We love to see our community members get involved! If you are planning to contribute to Dagster, you will first need to set up a local development environment.
Install Python. Python 3.6 or above recommended, but our CI/CD pipeline currently tests against up-to-date patch versions of Python 3.6, 3.7 and 3.8.
Create and activate a virtualenv, using the tool of your choice. On macOS you can install pyenv
with Homebrew:
brew install pyenv pyenv-virtualenv
Then add the following commands to your shell profile:
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
and finally create and activate the virtualenev:
pyenv install 3.7.4
pyenv virtualenv 3.7.4 dagster37
pyenv activate dagster37
Ensure that you have node installed by running node -v, and that you have yarn installed. If you are on macOS, you can install yarn with Homebrew:
brew install yarn
Clone the Dagster repository to the destination of your choice:
git clone git@github.com:dagster-io/dagster.git
Run make dev_install
at the root of the repository. This sets up a full Dagster developer environment with all modules and runs tests that do not require heavy external dependencies such as docker. This will take a few minutes. Note that certain sections of the makefile (sanity_check, which is part of rebuild_dagit) require POSIX compliant shells and will fail on CMD and powershell -- if developing on windows, using something like WSL or git-bash is recommended.
make dev_install
Run some tests manually to make sure things are working:
python -m pytest python_modules/dagster/dagster_tests
Some notes on developing in Dagster:
make black
and make pylint
in the root Dagster directory before submitting a pull request. If you're also using VS Code, you can see what we're using for our settings.json
here.For development, run the Dagit GraphQL server on a different port than the webapp, with any pipeline. For example:
cd dagster/examples/docs_snippets/docs_snippets/intro_tutorial/basics/connecting_solids/
dagit -p 3333 -f complex_pipeline.py
Keep this running. Then, in another terminal, run the local development (autoreloading, etc.) version of the webapp:
cd dagster/js_modules/dagit
make dev_webapp
During development, you might find these commands useful. Run them from dagster/js_modules/dagit
:
yarn ts
: Typescript typecheckingyarn lint
: Linting with autofixyarn jest
: An interactive Jest test runner that runs only affected tests by defaultTo run all of them together, run yarn test
.
To run the Dagster documentation website locally, run the following commands:
cd docs
yarn --cwd next dev # Serves the docs website on http://localhost:3001
The API documentation is generated from ReStructured Text files (.rst
), which extracts Python docstrings from the library files. The .rst
files can be found in the docs/sections/api/apidocs
directory.
If you change any .rst
files, be sure to run the following command in the docs
directory:
make buildnext
We encourage you to start with an issue labeled with the tag good first issue
on the Github issue board, to get familiar with our codebase as a first-time contributor.
Then, you can work on the issue labeled as good second issue
which is more like a medium task.
When you are ready for more of a challenge, you can tackle issues with the most 👍 reactions. We factor engagement into prioritization of the issues. You can also explore other labels and pick any issue based on your interest.
To submit your code, fork the Dagster repository, create a new branch on your fork, and open a Pull Request (PR) once your work is ready for review.
In the PR template, please describe the change, including the motivation/context, test coverage, and any other relevant information. Please note if the PR is a breaking change or if it is related to an open GitHub issue.
A Core reviewer will review your PR in around one business day and provide feedback on any changes it requires to be approved. Once approved and all the tests (including Buildkite!) pass, the reviewer will click the Squash and merge button in Github 🥳.
Your PR is now merged into Dagster! We’ll shout out your contribution in the weekly release notes.