This monorepo hosts the Shopouille backend services, shared libraries, and infrastructure tooling.
All release deployments are orchestrated through Git tags that follow Semantic Versioning with a v prefix.
vMAJOR.MINOR.PATCH→ immutable production releases (for examplev1.4.0)vMAJOR.MINOR.PATCH-rc.NUMBER→ immutable staging release candidates (for examplev1.4.0-rc.3)vMAJOR.MINOR.PATCH-{alpha,beta}.NUMBER→ optional internal validation tags (for examplev1.4.0-alpha.1)- Every release-related tag must be created from the
mainbranch and is protected from deletion or force-push through tag protection rules.
- (Optional) Cut
alpha/betatags from commits onmainto share early builds with reviewers or testers. - Once the change set is feature-complete, cut an
rctag from the currentmaincommit. Eachrcis a staging promotion and must never be moved. - After the latest RC has been validated in staging, create the final
vMAJOR.MINOR.PATCHtag on the exact same commit. No rebuild occurs between RC and final.
CI reacts to these tags as follows:
- Tags that match
v*-rc.*trigger staging deployment workflows. - Tags that match
v[0-9]+.[0-9]+.[0-9]+trigger production deployment workflows.
The reusable workflows under .github/workflows consume the tags described above:
- RC tags deploy to staging and run release-candidate validations.
- Once an RC is approved, the final tag reuses the same commit SHA, so the production release is a straight promotion with no rebuild.
- Production:
v2.3.5 - Release Candidate:
v2.3.5-rc.2 - Alpha/Beta (optional):
v2.3.5-alpha.1,v2.3.5-beta.4
Cut RC and final tags locally, then push them to origin:
# Ensure the commit you want is the tip of main
git checkout main
git pull origin main
# Create and push an RC tag for staging
git tag v2.3.5-rc.1
git push origin v2.3.5-rc.1
# After staging validation, reuse the same commit for the final tag
git tag v2.3.5
git push origin v2.3.5Never retag or delete RC/final tags. If a new build is required, bump the patch version and restart the RC cycle.