This document outlines the automated release process for deploying code to devnet environments using GitHub Actions.
- Repository must have the GitHub Actions workflow file: auto-release.yml
- User must have permissions to create Pull Requests and labels
- Repository must have a
mainbranch and areleasebranch
- Ensure your code changes are ready for deployment
- Create or update the
releasebranch with the latest changes - Push the
releasebranch to the repository
- Create a Pull Request from
releasebranch tomainbranch - Add a descriptive title and description for the release
Add the following mandatory labels to your Pull Request:
release- Triggers the release workflow- Version label - Format:
0.2.0- Examples:
1.2.3,2.0.1
- Examples:
- Devnet label - Format:
devnetXwhere X is a number- Examples:
devnet0,devnet1,devnet2
- Examples:
✅ release
✅ 1.2.0
✅ devnet1
- Review the Pull Request changes
- Ensure all checks pass
- Merge the Pull Request (do not just close it)
Once merged, the GitHub Actions workflow will automatically:
- Validate Labels - Check that all required labels are present
- Check Version Tag - Ensure the version tag doesn't already exist
- Delete Existing Resources - Remove devnet tag and GitHub release if devnet tag is being repeated
- Create/Update Devnet Branch - Create or update the devnet branch (e.g.,
devnet1) - Generate Changelog - Create release notes with commit history
- Create Git Tags - Create both version tag (e.g.,
v1.2.0) and devnet tag (e.g.,Devnet1) - Create GitHub Release - Publish release with changelog
- Devnet Branch:
devnet1(lowercase) - Contains deployed code - Main Branch: Updated with merged changes
- Version Tag:
v1.2.0- Semantic version tag - Devnet Tag:
Devnet1(capitalized) - Deployment environment tag
- Name:
Release v1.2.0 - Devnet1 - Tag:
Devnet1 - Notes: Includes changelog with commit history
- Status: Prerelease (for devnet deployments)
| Type | Format | Example | Purpose |
|---|---|---|---|
| PR Labels | devnetX |
devnet1 |
Specifies target environment |
| Git Branches | devnetX |
devnet1 |
Long-lived deployment branch |
| Git Tags | DevnetX |
Devnet1 |
Deployment milestone marker |
| Version Tags | vX.Y.Z |
v1.2.0 |
Semantic version marker |
❌ Missing required labels: version label (e.g., 1.0.0) and devnet label (devnet0, devnet1, devnet2, etc.)
Solution: Add the missing labels to your PR
❌ Version tag v1.2.0 already exists. Please use a new version.
Solution: Use a different version number (e.g., 1.2.1)
Workflow only runs for PRs from 'release' branch to 'main' branch
Solution: Ensure your PR is from release → main
The workflow automatically generates a changelog by:
- Finding the last devnet tag for the same environment
- Comparing commits between the last tag and current HEAD
- Including commit messages with short hashes
- Limiting to 20 commits if no previous tag exists
-
Use Devnet Semantic Versioning: Follow
0.X.Yformat where:- 0 = Always 0 for devnet releases
- X = Devnet number (matches devnet label, e.g., 1 for devnet1, 2 for devnet2)
- Y = Release increment for that devnet (starts from 0)
Examples:
- First release to devnet1:
0.1.0 - Second release to devnet1:
0.1.1 - Third release to devnet1:
0.1.2 - First release to devnet2:
0.2.0
-
Descriptive Commit Messages: Will appear in changelog
-
Test Before Release: Ensure code is tested before merging
-
Incremental Versions: Don't skip version numbers within the same devnet
-
Environment Isolation: Use different devnet numbers for different features
| Devnet | Version Sequence | Description |
|---|---|---|
| devnet1 | 0.1.0, 0.1.1, 0.1.2 |
Feature branch A releases |
| devnet2 | 0.2.0, 0.2.1, 0.2.2 |
Feature branch B releases |
| devnet3 | 0.3.0, 0.3.1, 0.3.2 |
Integration testing releases |
After triggering the release:
- Check the Actions tab for workflow progress
- Monitor for any error messages in the workflow logs
- Verify the created branch, tags, and release
- Confirm deployment to the target devnet environment
For issues with the release process:
- Check workflow logs in GitHub Actions
- Verify all prerequisites are met
- Ensure proper permissions are granted
- Review error messages for specific guidance