c32ebeac8b
Because * It would be nice to know if the backend changed that the frontend would break This commit * Adds make commands to check and fix that the graphql types match the nimbus-ui types * This will cause CI to break if a backend change would break the frontend |
||
---|---|---|
.circleci | ||
.github | ||
app | ||
kinto | ||
nginx | ||
scripts | ||
.env.integration | ||
.env.sample | ||
.git-blame-ignore-revs | ||
.gitignore | ||
CODE_OF_CONDUCT.md | ||
LICENSE | ||
Makefile | ||
README.md | ||
contributing.md | ||
docker-compose-integration-test.yml | ||
docker-compose-prod.yml | ||
docker-compose-test.yml | ||
docker-compose.yml |
README.md
Mozilla Experimenter
1. Design 2. Launch 3. Analyze
Experimenter is a platform for managing experiments in Mozilla Firefox.
Deployments
Staging
https://stage.experimenter.nonprod.dataops.mozgcp.net/
Production
https://experimenter.services.mozilla.com/
Installation
General Setup
- Install docker on your machine
- On linux, setup docker to run as non-root
-
Clone the repo
git clone <your fork>
-
Copy the sample env file
cp .env.sample .env
-
Set DEBUG=True for local development
vi .env
-
Create a new secret key and put it in .env
make secretkey
-
Run tests
make test
-
Setup the database
make refresh
Fully Dockerized Setup (continuation from General Setup 1-7)
-
Run a dev instance
make up
-
Navigate to it and add an SSL exception to your browser
https://localhost/
Semi Dockerized Setup (continuation from General Setup 1-7)
One might choose the semi dockerized approach for:
- faster startup/teardown time (not having to rebuild/start/stop containers)
- better ide integration
Notes:
-
Node ^14.0.0 is required
Semi Dockerized Setup
-
Pre reqs (macOs instructions)
brew install postgresql llvm openssl yarn echo 'export PATH="/usr/local/opt/llvm/bin:$PATH"' >> ~/.bash_profile export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/opt/openssl/lib/
-
Install dependencies
source .env poetry install (cd into app) yarn install
-
env values
.env (set at root): DEBUG=True DB_HOST=localhost HOSTNAME=localhost
-
Start postgresql, redis, autograph, kinto
make up_db
-
Django app
# in app poetry shell yarn workspace @experimenter/nimbus-ui build yarn workspace @experimenter/core build yarn workspace @experimenter/rapid build ./manage.py runserver 0.0.0.0:7001
Pro-tip: we have had at least one large code refactor. You can ignore specific large commits when blaming by setting the Git config's ignoreRevsFile
to .git-blame-ignore-revs
:
git config blame.ignoreRevsFile .git-blame-ignore-revs
Usage
Experimenter uses docker for all development, testing, and deployment.
The following helpful commands have been provided via a Makefile:
build
Build the application container by executing the build script
compose_build
Build the supporting services (nginx, postgresql) defined in the compose file
up
Start a dev server listening on port 80 using the Django runserver
up_db
Start postgresql, redis, autograph, kinto on their respective ports to allow running the Django runserver and yarn watchers locally (non containerized)
up_django
Start Django runserver, Celery worker, postgresql, redis, autograph, kinto on their respective ports to allow running the yarn watchers locally (non containerized)
up_detached
Start all containers in the background (not attached to shell)
check
Run all test and lint suites, this is run in CI on all PRs and deploys
migrate
Apply all django migrations
load_locales_countries
Populates locales and countries
load_dummy_experiments
Populates db with dummy experiments
bash
Start a bash shell inside the container (this lets you interact with the containerized filesystem and run Django management commands)
ssl
Create dummy SSL certs to use the dev server over a locally secure connection. This helps test client behaviour with a secure connection. This task is run automatically when needed.
kill
Stop and delete all docker containers. WARNING: this will remove your database and all data. Use this to reset your dev environment.
refresh
Run kill, migrate, load_locales_countries load_dummy_experiments
integration_test
Run the integration test suite inside a containerized instance of Firefox. You must also be already running a make up
dev instance in another shell to run the integration tests.
integration_vnc_up
Start a linux VM container with VNC available over vnc://localhost:5900
with password secret
. Right click on the desktop and select Applications > Shell > Bash
and enter tox -c tests/integration/
to run the integration tests and watch them run in a Firefox instance you can watch and interact with.
Frontend
Experimenter has three front-end UIs right now:
core
is the current UI used for Experimenter intake.rapid
is a partially-built React UI.nimbus-ui
is a new React UI for an upcoming Experimenter refactor.
Learn more about the organization of these UIs here.
API
API documentation can be found here
Contributing
Please see our Contributing Guidelines
License
Experimenter uses the Mozilla Public License