CONTRIBUTING#

Versioning#

This project uses SemVer for software release versioning. Versioning of all release components is automated and can be controlled through a Git tag with a prefixed SemVer version (e.g. v1.0.0).

Should the Git HEAD have a tag with a SemVer string prefixed with v as a name, and the Git stage be empty, this version is then obliged to in all build processes. However should the Git stage not be empty, or the HEAD not being tagged, the automation system will increment the patch version and append a dev suffix. Even if a version was released by accident, it is not possible to do so as an official release.

Issue & Feature Tracking#

The Atlassian Bitbucket Issue Tracker is being used for tracking features and issues.

All source code changes for features must be tracked in a Git branch feat/$ISSUE, wheras $ISSUE is the id of the corresponding issue inside the issue tracker. Bugs are tracked under bugfix/$ISSUE and hotfixes are tracked under hotfix/$ISSUE.

Documentation#

$ python3 -m pipenv run htmldocgen
$ python3 -m pipenv run mddocgen

Releasing#

There currently is no release plan in place. Patches and hotfixes will be integrated on a have time, can do basis.

Features and Bugfixes must be (squash) merged into the Git branch dev first. Concluding a development interval as this program’s maintainer requires one to create a release/$SEMVER Git branch and have the release tested by whoever opened the issue, or feature. If bugs are found, they must be tracked inside the issue tracker and once concluded must be integrated into the release/$SEMVER Git branch and tested through whoever opened the bug. Once the bug is resolved, the release/$SEMVER Git branch is (fast-forward) merged into the dev branch. The release can only be concluded if the HEAD of the release/$SEMVER branch is tagged with a SemVer version string.

Afterwards the release/$SEMVER branch is merged (no fast-forward) into the master Git branch.

Each release (irrelevant of it being a major, minor, or patch release) must have a dedicated changelog release note.

Copy the release note of the previous release from doc/changelogs/%Y%M%D %d.%d.%d.rst and increment the date and version of the filename, as well as chapter title. Next make sure to stick to the Keep-A-Changelog format and describe the changes only through Fixed, Changed, Added sections.

Afterwards, include the release note inside the root changelog (docs/CHANGELOG.rst) and add a link to the web page of the Git repository tag.

Continouous Integration#

There currently is no CI/CD automation through pipelines in place. However, the build environment is properly virtualized to support simple pipelines, so it will probably be part of a future release. It is still being evaluated on how to operate Bitbucket Pipelines the cheapest. There are a multitude of factors to consider. For the time being, the build environment has been simplified enough as to avoid error-prone manual tasks.

$ python3 -m pipenv run tox
$ git commit -e
$ git tag "v$SEMVER"
$ python3 -m pipenv run tox
$ git diff --exit-code --quiet && echo "this is fine" || echo "this is not fine"
$ python3 -m pipenv run tox -e publish
$ git push -u origin HEAD "v$SEMVER"
$ python3 -m BITBUCKET_REPO_SLUG=py-aws-spitzel \
             python3 -m pipenv run tox -e publish-docs