GithubHelp home page GithubHelp logo

weballianz / cp-local-development Goto Github PK

View Code? Open in Web Editor NEW

This project forked from coderdojo/cp-local-development

0.0 1.0 0.0 152 KB

Local development tool for the Community Platform

License: MIT License

Dockerfile 12.91% Shell 87.09%

cp-local-development's Introduction

Community Platform (Zen) Local Development

Instructions for setting up local development for the CoderDojo Community. There are four main parts to setting up your local development environment:

  • Install the tools (docker, docker-compose, etc)
  • Setting up the Community Platform code
  • Loading test data into your fresh setup
  • Making code changes

Not what you were looking for?

Please visit the our documentation repository for more information about the project. We log issues in the documentation repository here.

Install Tools

To develop for Zen you need the following tools installed:

  • Docker Docker engine version 1.13.0 - Zen's development environment run completely in docker giving each mircoservice its own container
  • Docker-compose version 1.10.0 or higher - this is used to start the containers and set the env variables
  • You also need to have Git installed in order to get the Community Platform code from GitHub.

Code Setup

Next step is to get the Community Platform code cloned and up and running. To do that you clone this repo and each micro service:

Run:

git clone https://github.com/CoderDojo/cp-local-development.git && cd cp-local-development
./setup_repo.sh
./install_deps.sh

You may have permission errors on Windows in which case you need to change ownership to yourself.

Docker-compose

To first set up the local development environment run, from the cp-local-development folder, docker-compose up zen. Once zen has loaded then docker-compose up testdata to load testdata. This will build the containers and add the test data. To start zen from then on you just have to run

docker-compose up zen

To restart a container run

docker-compose restart $service

To Stop the containers just run.

docker-compose stop

Note that you can also run services individually if you wish, e.g. docker-compose up dojos. Once docker looks to be running all the services ok (you'll see a lot of stack traces in the output if they are not running ok!) you should be able to hit localhost:8000 in your browser. If this is your first time running, you should see the "Find a Dojo to attend" Page this page wont return any dojos till you load testdata

Note that the Forums and Badges will not be operable in local development mode, to run these, you need to install both NodeBB and BadgeKit locally.

Test Data

To reload the test data just run docker-compose down -v && docker-compose up testdata. This will delete the current database and reload all testdata. When all the test data is loaded, you should see Dojos appearing when you refresh your home page. The different users you can login with are listed in this file

End to End Tests

You can run the e2e tests by running docker-compose run --rm test It means, it'll wipe your test database and start the e2e tests.

Making code changes and working locally

When you initialise a system, it creates a workspace-<systemName> folder for each system, e.g. workspace-zen. If you open this directory in your code editor you will see all the code repositories that make up this system, e.g. cp-zen-platform, cp-dojos-service, cp-users-service, cp-countries-service, etc. When you first set it up, the init command will checkout the default branch for that system, e.g. my-zen-branch for each service. From then on, it's up to you to manage the contents of this directory, e.g. creating branches, changing branches, etc. The run command will simply run whatever is in those directories, it doesn't care about what branch they're on, etc.

Creating your own forks

You can read more about the repositories and system architecture in this document.

Once forked, link your newly forked repository to the original one:

$ # add the forked repository as local
$ # git remote add local https://github.com/<your-username>/<repository-name>

$ # As an example, if you have forked cp-zen-platform and your github username is JaneDoe
$ git remote add local https://github.com/JaneDoe/cp-zen-platform

Development workflow

Then, a typical development workflow would be:

$ cd ./workspace-zen/cp-zen-platform
$ git checkout -b my-new-branch
$ # make changes to code in your editor of choice. Any time code changes in a service the `run` command will automatically reload the service
$ git push -u local my-new-branch
$ # to pull request, code review, merge, etc on github

To update your forked repository:

$ # grab latest code changes from the common repository
$ git fetch origin

$ # then integrate them with your local codebase (like "git pull" which is fetch + merge)
$ git merge origin/master master

$ # or, better, replay your local work on top of the fetched branch
$ # like a "git pull --rebase"
$ git rebase origin/master

The localdev tool

This tool is designed to make it as easy as possible to on-board new developers to the Community Platform. It is also designed to be cross platform, so developers can contribute to the community on their OS of choice, e.g. Windows, Mac & Linux.

The system.js file is a mixture of code and data, and it's where the 'systems' are defined (just 'zen' now). At its core, each System contains a set of Services, and each service has its own code repository on github. When each command starts, it prints out the full information of the system it's using, e.g.

zen: {
  services: [{
    name: 'cp-dojos-service',
    test: {
      name: 'test-dojo-data',
      port: 11301,
      host: process.env.CD_DOJOS || 'localhost',
    },
...

Environment values

localdev has four places where environment variables can be set:

  • env vars that are global to all systems, these are read first
  • env vars that are system specific, these are read next
  • env vars that are service specific, these are read next
  • local setup specific variables, these are read last

Settings at any level will override existing settings, so for example anything you set in your local setup will override any previous setting.

See system.js for global, system and service environment variables.

To set local environment variables, set them in the docker-compose.yml:

Debug

localdev uses the Debug module, to get extra debug information, run commands prefixed with 'DEBUG=localdev:* ..', e.g.

DEBUG=localdev:* ./localdev.js run zen

Troubleshooting

SELinux

If you are using a distribution of the Linux kernel that implements SELinux you may have permissions issues with volumes disappearing. This is due to having not set SELinux Policies. A quick workaround to not setting all the required policies is to run. su -c "setenforce 0" before runing any docker command.

Still having issues?

Check out our troubleshooting doc.

cp-local-development's People

Contributors

adhorrig avatar aryess avatar butlerx avatar cianmclennan avatar ciaramchugh avatar ckiss avatar danielbrierton avatar david-cahill avatar dberesford avatar heyitsmaimai avatar josmas avatar kennanseno avatar klaviercat avatar mcdonnelldean avatar mef avatar niccokunzmann avatar no9 avatar optikfluffel avatar sudheesh001 avatar wardormeur avatar william-riley-land avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.