-
Notifications
You must be signed in to change notification settings - Fork 45
Setting up a development environment
- Install Docker. We use Docker because it lets us develop cross-platform.
- On Mac or Windows, increase Docker's memory to 4GB. (You don't need this step on Linux.) Mac instructions Windows instructions
- Install Git. That's XCode on Mac, GitHub Desktop for Windows, and
dnf install git
/apt install git
on Fedora/Ubuntu Linux. -
git clone https://github.com/CJWorkbench/cjworkbench.git
to clone this repo
You'll need a command line. First, get the development server up and running
git pull
-
bin/dev start
to run database migrations, start compiling JavaScript/CSS files, and run Django. - Browse to http://localhost:8000 and register a user.
- Django will fake-email you a confirmation code. Check the
local_mail/
subdirectory for the email and follow the link within. Then log in. - Press Ctrl+C in the console to kill everything
To create a user who has access to the Django admin page:
bin/dev python ./manage.py createsuperuser
# ... respond to the prompts.
# Now you can only log in after confirming the email address:
bin/dev sql -c 'UPDATE account_emailaddress SET verified = TRUE'
-
bin/dev python
-- open a Python console with Workbench's dependencies installed. This is useful for testing Pandas-related code (e.g.,import pandas
works). -
bin/dev python ./manage.py shell
-- open a Python console with Django loaded. This is useful for testing Workbench models (e.g.,import server.models
works). -
bin/dev sql
-- open a PostgreSQL shell to the development database. -
bin/dev npm install PACKAGE
-- you may runnpm
commands that modifypackage.json
andpackage-lock.json
; modules are installed to a Docker volume, not./node_modules
. -
bin/dev pipenv install PACKAGE
-- you may runpipenv
commands that modifyPipfile
andPipfile.lock
; packages are installed to a Docker volume. -
bin/dev clean
-- delete all Python packages, Node modules, the database, and files on disk that the database references.
-
bin/dev npm test
(~15s) runs JavaScript tests inassets/js/
.bin/dev npm test -- --watch
watches them for changes. Usebin/dev npm test WfModule
to test one module only. -
bin/dev unittest
(~90s) runs Django tests inserver/tests/
.bin/dev unittest -k server.tests.modules.test_loadurl
(~30s first run, ~6s subsequent runs) specifies just one module to test. -
bin/integration-test
(~15min) builds images exactly as we do in production and runs automated integration tests on them. It fails as soon as a single test fails, to save you time. Write tests inintegrationtests/*.py
; if there's an error,bin/integration-test
will fill your screen with helpful advice.
If you test features that send email (such as confirmation email for new accounts) the email will appear in the local_mail
folder in your cjworkbench
directory.
To develop with the integrated tools in PyCharm (run, test, debug, etc.) setup a Python interpreter using the docker-compose.yml
file, as described in this documentation.
You will need to tell run the python interpreter inside the frontend
container, and launch it with the pipenv-run-python
script to make sure it uses the correct virtual environment. This is what your PyCharm Python interpreter settings should look like:
On Mac, you can get to this dialog through PyCharm -> Preferences -> Project: cjworkbench -> Project Interpreter
then pick Show All
at the bottom of the Project Interpreter
drop-down.
Then your run configuration (for the server, as opposed to tests) needs to use this interpreter, and run on host 0.0.0.0
(not 127.0.0.1
) and port 8080
. Then, the server will come up on the browser on 127.0.0.1:8000
because of the port remapping in docker-compose.yml
The "Google Login" and "Facebook Login" buttons are always present (for now -- we're tracking an issue that will hide them). But in your dev instance, if you click one of those buttons, you'll get a 500-error page about DoesNotExist
.
To log in on your dev machine with Facebook and Google:
- Build an app on Facebook or Google's website. (See the "Google OAuth" section below for instructions. But use a totally different app! Call this app "Workbench Dev Login".)
- Browse to http://localhost:8000/admin/socialaccount/socialapp/add/ and add the Social App. Be sure to choose all Sites.
- Log out.
- Click the "Use Facebook Account" or "Use Google Account" button.
To download from Google Drive:
- Browse to https://console.developers.google.com
- Create a new organization, if wanted
- Create a new project within that organization:
Workbench Dev
- Enable the
Google Drive
API - Enable the
Google Picker
API - Add credentials for
Google Drive API
for aWeb server
accessingUser data
: NameGoogleConnect
, authorized originhttp://localhost:8000
, authorized redirect URIhttp://localhost:8000/oauth
, product nameWorkbench Dev
. - Download
client_id.json
orclient_secret_XXXXX.json
(they're the same) - Move that file into your Workbench project directory, as
client_secret.json
. (It's in.gitignore
: Google terms dictate it stay private.) - Restart
bin/dev start
- Create a new workflow and add a
Google Drive
module. - Sign in.
- Pick a file.
- Click
Update
To download from Intercom:
- Browse to https://developers.intercom.com and sign in
- Click "Your Apps"
- Click "New app"
- Enter an App Name (e.g., "Workbench Intercom Module"), choose your Workspace, and select "Internal integration". Click "Create app".
- Under "Authentication", click "Edit". Enable OAuth with "Redirect URL" of
http://localhost:8000/oauth
. Uncheck all permissions except "Read and list users and companies" and "Read tags". Click "Save". - In the left navbar, click "Basic information".
- Copy/paste the "Client ID" and "Client secret" values into a new file called
intercom_secret.json
in the root of the project (we.gitignore
it, because it exposes private data) with contents{"client_id":"...","client_secret":"...","redirect_url":"http://localhost:8000/oauth"}
. - Restart
bin/dev start
- Create a new workflow and add an
Intercom
module. - Sign in.
- Click
Load
To let users authenticate with Twitter:
- Browse to https://apps.twitter.com
- Click
Create New App
. Call itWorkbench Dev [random numbers]
, descriptionAuthenticator for CJWorkbench Twitter module, in dev mode only
, websitehttp://example.org
, callback URLhttp://localhost:8000/oauth
. Read and agree to the developer agreement. ClickCreate your Twitter application
. - Browse to
Permissions
. Switch toRead only
and clickUpdate Settings
. - Browse to
Keys and Access Tokens
. Copy/paste these into a new file calledtwitter_secret.json
in the root of the project (we.gitignore
it, because Twitter asks us to keep it private) with contents{"key":"....","secret":".....","redirect_url":"http://localhost:8000/oauth"}
. - Restart
bin/dev start
- Create a new workflow and add a
Twitter
module. - Sign in.
- Pick a search.
- Click
Update
To test Stripe payments:
- Log in to https://dashboard.stripe.com (and sign up, if needed)
- In the top-left of the Stripe dashboard, either rename your default account or create a new account: call it
workbench-dev@home
,workbench-dev@laptop
or some other descriptive name. Each development environment you use should have its own Stripe account, because the Stripe account must align with the Workbench database. Be sure you're "Viewing test data" in Stripe. - In the Stripe dashboard, go to "Products" -> "Add Product". Call it "Premium Plan".
- Create a Price in USD. (Keep "Recurring" and "Monthly".) At the top-right of the page, click "Save product".
- Click "Developers" -> "API keys" and click "Reveal test key token". Copy the two tokens "Publishable key" (
pk_test_123abc
) and the "Secret key" (sk_test_123abc
). - In a console, run
bin/dev stripe-setup pk_test_123abc sk_test_123abc
. (This writes./stripe.env
, copies Stripe Products to our database, and restarts the web server to become aware of Stripe API keys.) - Enable the Customer Portal: browse to https://dashboard.stripe.com/test/settings/billing/portal. Allow customers to cancel subscriptions; Cancel immediately; Prorate cancelled subscriptions; set the links to our public URLs, https://workbenchdata.com/privacy and https://workbenchdata.com/terms-of-service
- Whenever you want to interact with Stripe in your dev environment, run
bin/dev stripe-setup
to re-fetch Products, then runbin/dev stripe-listen
and keep it open.