Repository Branches and Releases
This document describes how repositories are structured, including branch names, versioning, and automation. This applies to Plugin, Skill, Service, and Library repositories as defined here.
Default Branches
Repositories always contain dev and master branches.
| Branch | Version | GitHub Release | Docker Image |
|---|---|---|---|
| dev | alpha | Pre-Release | dev |
| master | stable | Release | latest |
New code is always PR'd into the dev branch as discrete changes. This
Alpha Release Workflow
describes the process of making changes to a repository. This allows the commit
history of the dev branch to be used as a changelog for the project, with each
change corresponding to a specific (alpha) version and a descriptive commit/PR.
When an alpha release is ready to be promoted to a stable release, a PR is created
to merge changes from dev into master with a version number that generally
follows semver or calver. This
Stable Release Workflow
describes the process of proposing and approving a stable release. A commit with
the specific version number is created on the master branch, along with a GitHub
Release so master always reflects the code from the latest release.
Versioning
Repositories always publish alpha/beta/pre-release versions and latest/stable/normal versions. The terms are often used interchangeably, but this document will follow SemVer's terminology of "pre-release" and "normal release".
Pull requests to dev and pre-releases map 1:1, so a merged PR to dev
corresponds to a specific pre-release and vice versa. Pull requests to master
map to normal releases in the same way.
A pre-release should always have a corresponding GitHub Pre-release and a normal release should have a GitHub Release.
For packages published to PyPI, the PyPI version will always match the repository version. Docker images that correspond to a specific version will always have a tag matching the repository version.
GitHub Releases
GitHub pre-release tags will always correspond to a specific "pre-release" and releases tags will always correspond to a specific "normal release".
An exception to this is the Neon OS repository which will list a normal release as a pre-release temporarily so the release may be manually validated before being made available to users tracking the stable update track.
Docker Containers
For repositories that publish Docker images, the dev image tag will always
match the dev branch and the latest image will match the master branch.
A stable version tag (i.e. 1.0.1) will always be equivalent to latest,
tracking the master branch. Images that correspond to any release
(pre-release or normal release) will have an additional tag indicating the version
(i.e. 1.0.0, 1.0.0-a.1).
Note: These versions often match PyPI releases, with some formatting differences to comply with Docker tag formatting requirements
A repository may optionally publish alpha tagged images that do not correspond
to a specific version or tag. These are used for development and testing and should
be considered unstable references. If alpha images are used in a repository,
they should track a branch named alpha.
Kubernetes Deployments
In general, the alpha namespace will track alpha or dev images,
beta namespace will track dev, and prod will track specific stable versions.
prod will often specify versions equivalent to latest for each service, but
it should specify version tags to prevent accidental updates when a new latest
image is tagged and pods are re-created for some reason.