mesoneer's Programming Challenge
Hi there, so you have decided to take on our Take-Home Programming Challenge. This page will give you an overview of what to prepare and what to do to complete the challenge
Preparing the Environment
The Java project requires
- JDK 17 or later.
- Gradle 6.1.1 or later.
- Git
In additions, please make your self familiar with the following test library:
- JUnit 5.
Info
If you haven't used JUnit 5. The page Writing Tests would provide you quickly information to start using JUnit 5 constructs.
You will need:
- Node.js v18 or later.
- NPM (shipped with Node.js bundle) or
pnpm. - Git
In additions, please make your self familiar with the following test library:
- Mocha.
- Vite.
To run the coding challenge, you have to install required tools on your environment. You will need:
- dotnet v8 (recommended) (You can follow this link to install dotnet tool which is suitable to your device).
- Git.
Cloning Your Challenge
Important Notice
mesoneer reserves the rights and ownerships of the GitHub repository created for you and all of its content. It is strictly prohibited, by any means, to distribute the content of the GitHub repository to public.
Overview
We use GitHub for hosting the challenge repositories.
- You will be provided a GitHub repository generated just for you. It is a private repository.
- You will be provided with an SSH private key so that you can clone it. The SSH Private key HAS NO PASSPHRASE.
Configure Your SSH Key
You will be given a private SSH key which is granted to read and write into the Git repository. In order to use this Private Key, you could either change your SSH Config or using an SSH Agent.
Configure GitHub SSH key
To specify Git to use SSH Private Key generated for you, it is necessary to modify your SSH Config file.
Please check https://linuxize.com/post/using-the-ssh-config-file/#ssh-config-file-location to know how to create a new one if you don't have yet an SSH Config file.
Add the below lines into your SSH Config file
# Your ~/.ssh/config file.
Host github.com
IdentityFile /path/to/private/key/generated/by/mesoneer.pem
Using SSH Agent ssh-agent
A quickest way to use it is to use a SSH Agent as below:
# Using Bash or Git Bash
# Start an SSH Agent Process
$> eval $(ssh-agent -s)
# Add the Private Key into the SSH Agent
$> ssh-add /path/to/the/given/private/key.pem
# Check if the key is added successfully
$> ssh-add -l
# Cloning the repository
$> git clone git@github.com:mesoneer-recruitment/your-challenge-repository.git
Beware if you have SSH keys configured on GitHub
If your ssh-agent or your SSH configuration does have other SSH key(s) configured for GitHub, you MAY NOT clone the repository because your key is used first. To resolve that, ensure that your ssh-agent contains only one key.
To verify, simply run the command ssh-agent -l and make sure that there is one key and it is the key mesoneer gives you.
To make sure, the following command should tell you:
$> ssh -T git@github.com
Hi mesoneer-recruitment/interview-challenges-XXX-YYY! You've successfully authenticated, but GitHub does not provide shell access.
Use git core.sshCommand option
Git supports to specify core.sshCommand on each run:
$> git -c core.sshCommand='ssh -i /absolute/path/to/private-key.pem -o IdentitiesOnly=yes' clone git@github.com....
Using Windows
On Windows, if you are using WSL v2, the above command line will work out of the box.
If you are using Git Bash, there are a few things you need to be careful for:
- Using Linux path instead of Windows (/d/path/to/key.pem instead of D:\path\to\key.pem).
- You may have to re-launch the ssh-agentcommand if you close the Git Bash window.
Reading the Requirements
The file README.md contains all the requirements of the challenge, please read it carefully.
Checking In Your Work
Commit Early, Push Often
It is STRONGLY advised that you git push your work as soon as possible and as frequent as possible.
- It is required that you make a commit once you finish a Level in the Challenge. You can create as many as commits as you like, but we want to see a commit representing a milestone that you finish a Level.
$> git commit -m "Finish Level 2"
- Please make commits as you usually do in your daily work. We would like to know your preferred practices when it comes to Source Version Control.
- Feel free to
git pushinto the Remote repository as much as possible. - Please do not commit or push unnecessary files or directories (built binary files, logs, etc).