Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

logo yabs

Test, Build, Deliver!

Build Status Latest Version License Documentation Status Coverage Status Code style: black Released with: Yabs StackOverflow: yabs


Build and deployment automation for Python projects.

A typical release workflow may look like this:

  1. Check preconditions: Is the workspace clean, anything to commit?, Is GitHub reachable?, Are we on the correct branch?, ...
  2. Make sure static code linters and unit tests pass.
  3. Bump the project's version number (major, minor, or patch, according to Semantic Versioning).
    Then patch the version string into the respective Python module or text file.
  4. Build sdist, wheel and msi installer assets.
  5. Tag the version, commit, and push.
  6. Upload distribution to PyPI.
  7. Create a new release on GitHub and upload assets.
  8. Create a new release on the Windows Package Manager Repository.
  9. Bump, tag, commit, and push for post-release.

Custom tasks may be added using the plugin framework.

Read the documentation for details.


(See grunt-yabs for a node.js variant if you have a JavaScript based development stack.)