Getting Started with CIViC Development on AWS - griffithlab/civic-server GitHub Wiki
Developers interested in contributing to the CIViC codebase will need to set up an environment for examining the effect of any changes made to the code. This guide details covers getting started on development quickly, from setting up your AWS development environment to submitting your code through GitHub.
Set up development environment
Boot up and connect to an AWS instance
Creating a new AWS instance from the CIViC AMI
-
Log into the AWS EC2 management console
-
Navigate to the us-west-2 (Oregon) subdomain
-
Navigate to Images->AMIs and search 'Public images' for the civic dev instance (
ami-0d6dc9d8df9221279
) -
Right-click on the civic AMI and select 'Launch'
-
The recommended configuration follows, with unmentioned attributes left at defaults:
Configuration
Type Tag Security Group t2.micro Name=civic_[username] See Security table Security
Type Protocol Port Range Source SSH TCP 22 0.0.0.0/0 Custom TCP Rule TCP 3000-3001 0.0.0.0/0 -
Create or select an existing SSH key. See the Amazon documentation for more information on this subject
-
Launch instance
Log into your AWS EC2 instance
- Navigate to the
instances
page on the EC2 management console - Locate the instance with the name tag designated in step 5 above
- Check if the instance state is
running
- If the state is
stopped
, right-click on the instance and selectInstance State -> Start
- Move on to step 4 once the instance state is
running
-
Select the instance and copy the
Public IP
listed in the instance description at the bottom of the page -
Open a terminal (or ssh client software, such as PuTTY) and connect using the following:
ssh credentials
attribute value username ubuntu ssh key private key from step 6 above ip address Public IP
from step 4 of this sectionUsing the GNU ssh utility, the command would look like this:
ssh -i /path/to/private_key.pem ubuntu@PUBLIC_IP
Launching services
- From your ssh session, launch
screen
(more about screen):
screen -S civic-server
- Change to the
civic-server
directory, update the server, and launch it
cd civic-server
git pull origin master
rails s -b 0.0.0.0
- Verify that the server has started correctly (the following text is displayed):
[TIMESTAMP] INFO WEBrick 1.3.1
[TIMESTAMP] INFO ruby 2.3.1 (2016-04-26) [x86_64-linux]
[TIMESTAMP] INFO WEBrick::HTTPServer#start: pid=2701 port=3000
Optional: If you are not doing client development, you may skip steps 4-8, and instead direct your browser to http://INSTANCE_PUBLIC_IP:3000
to test that the instance is working properly.
- Detach from
screen
by pressingctrl-a
,ctrl-d
, and start a newscreen
for the client:
screen -S civic-client
- Change to the
civic-client
directory, update the client, and launch it
cd civic-client
git pull origin master
gulp serve
- Verify that the client has started correctly (the following text is displayed):
[TIMESTAMP] Server started http://0.0.0.0:3001
[TIMESTAMP] LiveReload started on port 35729
-
Test that the client is accessible over the web, by opening a web browser and navigating to
http://INSTANCE_PUBLIC_IP:3001
-
Detach from
screen
by pressingctrl-a
,ctrl-d
Contributing code
Configuring git and GitHub forks
- Fork the civic-server (https://github.com/genome/civic-server) and civic-client (https://github.com/genome/civic-client) GitHub repositories (see how to fork a GitHub repository)
- In your ssh session, configure git to use your credentials:
git config --global user.name "Your Name"
git config --global user.email [email protected]
After completing these steps, all that remains is linking to these forks as remotes from your local git repository on your instance. This can be done via https (recommended) or ssh.
Configuring git remotes for GitHub over https (recommended)
For users WITH 2-factor authentication enabled that are NOT sharing login credentials for their AWS instance, consider using SSH instead.
- Add your forks as remotes using your GitHub username
cd civic-server
git remote add FORK_NAME https://github.com/YOUR_USERNAME/civic-server.git
cd ../civic-client
git remote add FORK_NAME https://github.com/YOUR_USERNAME/civic-client.git
- Create a personal access token (only if using GitHub 2-factor authentication)
For instructions on creating a personal access token, go here. Be sure to grant repo permissions for the token. Use this token as a password when accessing the remote repository using git on the command line.
Configuring git remotes for GitHub over ssh (advanced users)
WARNING: If you are sharing your login credentials to your AWS instance, DO NOT USE THIS METHOD
- Add your forks as remotes using your GitHub username
cd civic-server
git remote add FORK_NAME [email protected]:YOUR_USERNAME/civic-server.git
cd ../civic-client
git remote add FORK_NAME [email protected]:YOUR_USERNAME/civic-client.git
- Add SSH keys from your AWS instance to your GitHub account using the GitHub instructions.
Making changes
Changes to the codebases for the server (in the civic-server
directory) and the client (in the civic-client
directory) are reflected live on http://INSTANCE_PUBLIC_IP:3001
. Before you begin making changes, you should create a new branch in the corresponding directory:
git checkout -b FEATURE_NAME
You can read more about branching with git here.
After you have made changes that you want to keep, commit them to the current branch and push to your GitHub fork:
git add -A
git commit -m 'DESCRIPTION OF CHANGES'
Next, ensure that your changes do not conflict with other users' changes:
git pull origin master
If conflicts arise, see this article on how to resolve them.
Next, push your changes to GitHub:
git push -u FORK_NAME FEATURE_NAME
Finally, submit your feature branch as a pull request, and work with the CIViC core developers to merge your code into CIViC.
When you are ready to work on a new feature, switch back to master, pull in changes, and start a new branch for the new feature:
git checkout master
git pull origin master
git checkout -b NEW_FEATURE_NAME
Configuring the CIViC dev instance to allow a generic login
In your instance, go to http://INSTANCE_PUBLIC_IP:3001/api/auth/developer
. You should then be presented with a login form, where you can login as any generic user. Enter a username and email address and submit. Once done return to http://INSTANCE_PUBLIC_IP:3001
.
If you want admin privileges, you’ll need to use the rails console. To set that up you can do the following:
cd civic-server
rails c
Then, on the console prompt:
user = User.last
user.make_admin!
exit