Releasing
Software releases are a critical part of the development lifecycle. A well-structured release process ensures code quality, minimizes deployment risks, and maintains clear communication across teams.
A typical release process consists of several key components:
- Release Manager - A person or team responsible for coordinating and executing releases
- Release Flow - The sequence of environments and steps code goes through from development to production
- Versioning Workflow - The branching strategy that governs how code moves through environments (GitFlow being the most common)
- Version Scheme - The numbering system used to identify releases (CalVer, SemVer, or custom)
- Release Documentation - Runsheets, checklists, and procedures stored in accessible locations
- Automated Deployment - CI/CD pipelines that handle the technical deployment process
Vortex provides comprehensive support for all these components, with sensible defaults and integration points for popular hosting platforms.
Release flow
Projects typically follow a three-tier environment strategy with clear directional flows:
- Development - Latest development code, not yet released. May be unstable, but CI tests should pass.
- Stage - Pre-production environment. Mirrors production as closely as possible. Used for final release testing.
- Production - Live customer-facing application. Stable and reliable. Source of truth for data.
The specific environment setup (dev/stage/production) should be agreed upon within your team and documented in your project. Some teams may use additional environments (e.g., UAT, pre-prod) or different naming conventions.
Code goes "up" (from lower to higher environments) while database goes "down" (from higher to lower environments).
This means that the production database is the primary source of truth - it's what code is applied to. When performing a release, you are applying a new version of code to a database within a specific environment.
To ensure that code changes work correctly with real data structures, the following process is followed in lower environments:
- Database is copied from a higher environment to a lower one (e.g., production → stage → development)
- Code is deployed to that environment to be tested against the copied database
- Testing is performed to ensure everything works correctly
CI pipelines also use a copy of the production database (refreshed daily) to run all tests, ensuring code changes work with real data structures.
You would use a Versioning Workflow (like GitFlow) to manage how code moves across releases using the Version Scheme (like CalVer or SemVer).
You would document your release procedures in Release Documentation (like
docs/releasing.md) and create a release runsheet to guide release managers
through the release process.
Finally, the actual deployment to production is handled via Automated Deployment where, based on your hosting provider, the deployment process is fully automated.
GitFlow versioning workflow
git-flow is a versioning workflow that allows you to maintain clean separation between development and production code.
It allows you to have a stable development branch (develop) and a production-ready
branch (main), while providing dedicated branches for feature development,
release preparation, and hotfixes.
Branch structure
develop- Development branch where features are integratedmain- Production-ready code, always stable and tagged with releasesfeature/*- Individual feature development branchesrelease/*- Release preparation branches (e.g.,release/25.1.0)hotfix/*- Emergency fixes for production (e.g.,hotfix/25.1.1)
production branch
Most hosting providers support deploying specific git tags directly. In this
case, no separate production branch is needed - you simply tag releases on
main and deploy those tags.
Some hosting providers (like Lagoon) require a git branch to deploy from,
so tag-based deployments are not supported. In this case, you must create a
production branch and sync code from main to production after each
release.
While it's possible to automate copying main to production on tag creation
via CI/CD, this automation was conceptually avoided to prevent accidental
deployments to production without human oversight.
Release operations
Below are the typical steps to perform a release using git-flow. See cheat sheet for a quick reference on git-flow commands.
-
Start Release
git flow release start X.Y.ZCreates a
release/X.Y.Zbranch fromdevelop. It is recommended to push the branch to remote. -
Release Preparation
- Final bug fixes
- Documentation updates
- Release notes preparation
-
Finish Release
git flow release finish X.Y.Z- Merges release branch to
main - Tags the release
- Merges back to
develop - Deletes the release branch
- Merges release branch to
-
Deploy to Production
-
Tag-based hosting: Deploy the tag directly
-
Branch-based hosting (e.g., Lagoon): Manually sync to
productionbranchgit push origin main:production
-
Expected release outcome
A successful release should meet these criteria:
- Release branch exists as
release/X.Y.Zin GitHub repository - Release tag exists as
X.Y.Zin GitHub repository - The
HEADof themainbranch hasX.Y.Ztag - The hash of the
HEADof themainbranch exists in thedevelopbranch- This ensures everything pushed to
mainexists indevelop - Important if
mainhad any hotfixes not yet merged todevelop
- This ensures everything pushed to
- There are no open PRs in GitHub related to the release
Version scheme
Vortex supports CalVer and SemVer version numbering schemes to fit different project needs.
During installation, you can choose between Calendar Versioning (CalVer), Semantic Versioning (SemVer), or a custom scheme.
Calendar versioning (CalVer)
Format: YY.M.Z (e.g., 25.1.0, 25.11.1)
YY= Short year (no leading zeroes)M= Short month (no leading zeroes)Z= Hotfix/patch version (no leading zeroes)
Why CalVer
- Release frequency transparency: When you have multiple releases per month, dates make it easy to identify when a release happened
- Intuitive tracking: Stakeholders can immediately understand "this is from January 2025" vs memorizing version numbers
- Natural progression: No ambiguity about major vs minor changes - just the chronological order
- Marketing alignment: Easier to communicate to non-technical audiences ("our Q1 2025 release")