Skip to content

Developer Tooling¤

This section outlines the tools and processes used for developing, testing, and deploying the crewmaster library.

Poetry¤

Poetry is our dependency management and packaging tool. We use it to manage project dependencies, create virtual environments, and build distributable packages.

  • pyproject.toml: All project configuration, including dependencies, is managed in this file.
  • poetry.lock: This file locks the exact versions of all dependencies to ensure reproducible builds.
  • Installation: Run poetry install to set up your virtual environment and install all dependencies.

Documentation¤

Our documentation is built using a combination of tools:

  • MkDocs: A fast and simple static site generator for project documentation.
  • mkdocs-material: A beautiful and modern theme for MkDocs.
  • mkdocstrings: A plugin that automatically generates documentation from our source code's Google-style docstrings, ensuring our documentation is always up-to-date.

CI/CD and Automation¤

Our Continuous Integration and Continuous Deployment (CI/CD) pipeline is managed by GitLab CI/CD. The pipeline is defined in the .gitlab-ci.yml file and automates the entire process from a new commit to a new release on PyPI.

The pipeline typically includes the following stages:

  • Test: Runs pytest to ensure all tests pass and the code is functioning correctly.
  • Lint: Enforces code style and best practices using linters.
  • Build: Creates the distributable sdist and wheel packages using Poetry.
  • Publish: Publishes the built packages to the PyPI (Python Package Index) repository.
  • Release: Creates a new GitLab release, tagging the commit with the new version.

Semantic Versioning and Releases¤

We follow Semantic Versioning (SemVer) for all releases. This system uses a MAJOR.MINOR.PATCH format to communicate the type of changes in a new release. The process is automated based on commit messages:

  • fix:: Bumps the PATCH version.
  • feat:: Bumps the MINOR version.
  • BREAKING CHANGE:: Bumps the MAJOR version.

This automation ensures that releases are handled consistently and that the version number accurately reflects the nature of the changes.

VS Code Integration¤

We use .devcontainer to provide a consistent and reproducible development environment. This configuration allows you to open the project in Visual Studio Code (VS Code) or GitHub Codespaces with all the necessary dependencies, linters, and settings pre-configured, so you can start contributing immediately without a complex setup.