77 lines (52 sloc) 3.46 KB

Contributing to Compose

Compose is a part of the Docker project, and follows the same rules and principles. Take a read of Docker's contributing guidelines to get an overview.


Pull requests will need:

Development environment

If you're looking contribute to Compose but you're new to the project or maybe even to Python, here are the steps that should get you started.

  1. Fork to your username.
  2. Clone your forked repository locally git clone
  3. You must configure a remote for your fork so that you can sync changes you make with the original repository.
  4. Enter the local directory cd compose.
  5. Set up a development environment by running python develop. This will install the dependencies and set up a symlink from your docker-compose executable to the checkout of the repository. When you now run docker-compose from anywhere on your machine, it will run your development version of Compose.

Install pre-commit hooks

This step is optional, but recommended. Pre-commit hooks will run style checks and in some cases fix style issues for you, when you commit code.

Install the git pre-commit hooks using tox by running tox -e pre-commit or by following the pre-commit install guide.

To run the style checks at any time run tox -e pre-commit.

Submitting a pull request

See Docker's basic contribution workflow for a guide on how to submit a pull request for code.

Documentation changes

Issues and pull requests to update the documentation should be submitted to the docs repo. You can learn more about contributing to the documentation here.

Running the test suite

Use the test script to run linting checks and then the full test suite against different Python interpreters:

$ script/test/default

Tests are run against a Docker daemon inside a container, so that we can test against multiple Docker versions. By default they'll run against only the latest Docker version - set the DOCKER_VERSIONS environment variable to "all" to run against all supported versions:

$ DOCKER_VERSIONS=all script/test/default

Arguments to script/test/default are passed through to the tox executable, so you can specify a test directory, file, module, class or method:

$ script/test/default tests/unit
$ script/test/default tests/unit/
$ script/test/default tests/unit/config/
$ script/test/default tests/unit/config/

Finding things to work on

Issues marked with the exp/beginner label are a good starting point for people looking to make their first contribution to the project.