Originally shared on Google Drive in 2022 - updated and moved to Confluence in May 2023 to reflect that we are no longer using Google Docs for specification documents.
Building Block Version Scheme & Release Process
GovStack Building Block Definition Documents and API specs must be:
Uniquely and semantically versioned
Developed iteratively with rapid releases
Fork-able into separate release flows and merged back (for localized/contextualized versions)
Support Git workflows
Naming conventions follow the following standard: <owner>-bb-<name>-<module>
In this document, we have been using specification
as an explicit label of the Build Block specification.
Example of a GovStack Building Block Definition Document: govstack-bb-consent-specification
Example of a forked GovStack Building Block:gov.in-bb-consent-specification
Building block definition documents have the following version 1.0.0 or X.Y.Z
Semantics:
X = major version, new features/requirements added, major changes to existing requirements, new review process required
Y = minor version, substantial changes based on feedback, changes with smaller side-effects, API changes required to be non-breaking.
Z = patch version, small changes, additions without side-effects, typos etc, may be released outside of a full review process
Version suffixes are used to release documents that have not finally been approved.
-draft1 = Draft release from WG
-poc1 = POC release, proof of concept, a release for Technical Committee or other BB WGs
-rc1 = Release candidate, a release pending input from review committee
Example using a version suffix to indicate that it is the first release candidate for TAC
A document can be versioned and released from a local source to clearly label draft status, experimental forks etc. For example if a WG member releases an artifact from their own Git branch, they may want to add the git commit hash or a timestamp, example: govstack-bb-consent-specification-1.2.3-git2be5010706654
A fork occurs when a Building Block has a temporary or permanent maintenance and release flow forked from its origin. It is important to understand which GovStack version that a fork originated from, we therefore propose that the fork maintains information about which upstream GovStack release it was last sync’ed with.
The label of the fork is technically not a part of the version, but a part of the name of the project.
Format: <upstream-version>-<fork-version>
Example:
Original GovStack version: govstack-bb-consent-specification-1.0.0
Forked version from gov.in, first release:bb-consent-specification-gov.in-1.0.0-0.1
The background of this version scheme can be understood from Debian Package versioning: https://manpages.debian.org/wheezy/dpkg-dev/deb-version.5.en.html
The same project may have workflows in different systems, which thus have separate release cycles that are periodically synchronized.
For instance:
Workflow | Git | Comment | |
Definition doc draft | govstack-bb-consent-specification-1.0.0-draft1 | Using the “draft” suffix, we tag versions in GitBook that are signed off by the WG. For instance to pass on for internal review. | |
Definition doc review release | govstack-bb-consent-specification-1.0.0-rc1 | Specification releases signed off by product owner. | |
Definition doc review | govstack-bb-consent-specification-1.0.0 | Finally, we release a “stable” document without the draft/rc suffix. | |
Definition doc feedback processing | govstack-bb-consent-specification-1.0.1 | During a rapid processing of review feedback, we may wish to indicate updates by bumping the patch version each time, making the changes visible to review panelists. | |
Release for POC | This document will have SRS level detail with proven POC | ||
Product level version | Same BB may be be used in different products, with different customization | ||
Country level version | Same product may be used in different countries with different customization |
It is noted that many people will have access to suggest changes, implement changes and tag versions. The following release process should be followed with respect to version numbering:
Work Group members:
GitBook: Releases versions with local suffix (drafts etc) or patch numbers
Git: Pull Requests from own forks
Work Group leads:
GitBook: Releases the “rc” label
Git: Pull Requests, potentially from WG common repository
Product Owner / Technical Committee
Git/GitBook: All releases