Release Flow Overview
ENS contracts follow a structured release process with multiple branches and environments:- Feature Branches - Development of new features
- Staging Branch - Pre-production testing environment
- Main Branch - Production-deployed code
Branch Strategy
Branch Hierarchy
Branch Rules
Standard Release Flow
Create Release Candidate
When ready for review, create a Release Candidate GitHub release:
This tagged commit is now subject to the bug bounty program.
Audit if necessary
Have the Release Candidate audited for security:
- Engage security auditors
- Review findings
- Create new RC if changes needed:
v1.2.3-RC1,v1.2.3-RC2, etc.
Deploy to testnet
Deploy the audited version to testnet:Open a PR to merge deployment artifacts into the feature branch, then create a testnet release:
v1.2.3-testnetIterate if needed
If further changes are required:
- Make changes on existing feature branch (if in sync)
- OR create new feature branch
- Follow steps 1-7 again
Deploy to mainnet
Deploy from Create a production release from the commit with deployment artifacts:
staging to Ethereum mainnet:v1.2.3Cherry-picked Release Flow
For isolated changes that need to be released independently:Emergency Release Process
For critical security fixes or urgent issues:Version Numbering
ENS contracts follow semantic versioning:Version Format
- Major.Minor.Patch (e.g.,
1.6.2) - Release Candidates -
v1.2.3-RC0,v1.2.3-RC1 - Testnet Releases -
v1.2.3-testnet - Production Releases -
v1.2.3
When to Bump Versions
- Major - Breaking changes, major new features
- Minor - New features, non-breaking changes
- Patch - Bug fixes, minor improvements
Migration Between Versions
Contract Upgrades
For contracts with upgrade mechanisms:User-Initiated Migrations
Some migrations require users to take action:- NameWrapper Upgrades - See Wrapper Upgrade Guide
- Resolver Updates - Users update their resolver addresses
- Controller Migrations - Switch to new registrar controllers
Deployment Artifacts Management
Archiving Old Deployments
Old deployment artifacts are archived:./deployments/archive.
Deployment Version Bumping
When preparing new deployments:- Bump the deploy script version number
- This ensures the script runs for each network
- Prevents accidental re-deployment of unchanged contracts
Testing Migrations
Fork Testing
Test migrations on a fork before production:Testnet Validation
Always validate migrations on testnet:Release Notes
Each release should include:- Summary of changes - What was added, changed, or fixed
- Migration instructions - If user action is required
- Contract addresses - New deployment addresses
- Breaking changes - Any incompatible changes
- Audit information - Link to audit reports if applicable
Release Note Template
Best Practices
Keep feature branches in sync
Keep feature branches in sync
Feature branches can be long-lived, so regularly sync with
staging:Avoid editing same files on different branches
Avoid editing same files on different branches
Coordinate with team to minimize merge conflicts by working on different files when possible.
Test thoroughly before mainnet
Test thoroughly before mainnet
- Run full test suite
- Deploy to testnet
- Test all migration paths
- Verify with independent review
Document all changes
Document all changes
- Update CHANGELOG
- Write clear commit messages
- Create comprehensive release notes
- Update documentation
Related Resources
Deployment Guide
Learn about deployment procedures
Wrapper Upgrade
NameWrapper upgrade process
Audits
Security audit information
Testing
Testing before release