Skip to content
Back to top
View this page

# Workflow

This page describes the tooling used during development of this project. It also serves as a reference for the various commands that you would use when working on this project.

## Overview

This project uses the GitHub Flow for collaboration. The codebase is Python.

- flit is used for automating development tasks.

- nox is used for automating development tasks.

- pre-commit is used for running the linters.

- sphinx is used for generating this documentation.

- pytest is used for running the automated tests.

## Repository Layout

The repository layout is pretty standard for a modern pure-Python project.

- `CODE_OF_CONDUCT.md`

- `LICENSE`

- `README.md`

- `.nox/` – Generated by nox.

- `dist/` – Generated as part of the release process.

- `docs/` – Sources for the documentation.

- `src/`

  - `installer/` – Actual source code for the package

- `tests/` – Automated tests for the package.

- `noxfile.py` – for nox.

- `pyproject.toml` – for packaging and tooling configuration.

## Initial Setup

To work on this project, you need to have git 2.17+ and Python 3.8+.

- Clone this project using git:

      git clone https://github.com/pypa/installer.git
      cd installer

- Install the project’s main development dependencies:

      pip install nox

You’re all set for working on this project.

## Commands

### Code Linting

    nox -s lint

Run the linters, as configured with pre-commit.

### Testing

    nox -s test

Run the tests against all supported Python versions, if an interpreter for that version is available locally.

    nox -s test-3.14

Run the tests against Python 3.14. It is also possible to specify other supported Python versions (like `3.12` or `pypy3`).

### Documentation

    nox -s docs

Generate the documentation for installer into the `build/docs` folder. This (mostly) does the same thing as `nox -s docs-live`, except it invokes `sphinx-build` instead of sphinx-autobuild.

    nox -s docs-live

Serve this project’s documentation locally, using sphinx-autobuild. This will open the generated documentation page in your browser.

The server also watches for changes made to the documentation (`docs/`), which will trigger a rebuild. Once the build is completed, server will automagically reload any open pages using livereload.

## Release process

- Update the changelog.

- Update the version number in `__init__.py`.

- Commit these changes.

- Create a signed git tag.

- Run `flit publish`.

- Update the version number in `__init__.py`.

- Commit these changes.

- Push tag and commits.