summaryrefslogtreecommitdiffstats
path: root/docs/development/workflow.md
diff options
context:
space:
mode:
Diffstat (limited to 'docs/development/workflow.md')
-rw-r--r--docs/development/workflow.md116
1 files changed, 116 insertions, 0 deletions
diff --git a/docs/development/workflow.md b/docs/development/workflow.md
new file mode 100644
index 0000000..0c4f9e7
--- /dev/null
+++ b/docs/development/workflow.md
@@ -0,0 +1,116 @@
+# 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.7+.
+
+- Clone this project using git:
+
+ ```sh
+ git clone https://github.com/pradyunsg/installer.git
+ cd installer
+ ```
+
+- Install the project's main development dependencies:
+
+ ```sh
+ pip install nox
+ ```
+
+You're all set for working on this project.
+
+## Commands
+
+### Code Linting
+
+```sh
+nox -s lint
+```
+
+Run the linters, as configured with [pre-commit].
+
+### Testing
+
+```sh
+nox -s test
+```
+
+Run the tests against all supported Python versions, if an interpreter for that
+version is available locally.
+
+```sh
+nox -s test-3.9
+```
+
+Run the tests against Python 3.9. It is also possible to specify other supported
+Python versions (like `3.7` or `pypy3`).
+
+### Documentation
+
+```sh
+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].
+
+```sh
+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.
+
+[github flow]: https://guides.github.com/introduction/flow/
+[flit]: https://flit.readthedocs.io/en/stable/
+[nox]: https://nox.readthedocs.io/en/stable/
+[pytest]: https://docs.pytest.org/en/stable/
+[sphinx]: https://www.sphinx-doc.org/en/master/
+[sphinx-autobuild]: https://github.com/executablebooks/sphinx-autobuild
+[pre-commit]: https://pre-commit.com/