Web Application Release Process
Responsibilities
Individual Engineer
As an engineer you have responsibilities to ensure the work you’ve done is reliably released into production:
- Before your code is merged:
- Coordinate with DevOps on having configuration in place both on RC and production for your changes before it gets merged so that releases are not held up.
- After your code is merged:
- When the changes have been deployed on RC, verify your changes via functional testing and obtain acceptance from any necessary stakeholders.
- After your code is released:
- Perform smoke testing of the functionality if it won’t interfere with other application users.
Engineering Team
Collectively, the team members who have made changes are responsible for coordinating the release to production:
- The team members who have changes to the main branch are responsible for verifying their changes:
- The release candidate PR will contain a checklist of the included changes by commit message.
- Each engineer should:
- Perform a functional test of their changes.
- If testing is successful, the engineer should check the box next to the associated PR in the release-candidate PR.
- Any bug or regression discovered during testing should be communicated.
- When all changes in the release candidate have been verified by the team (all checkboxes have been checked), the engineer who has been designated Release Manager releases it to production.
- The Release Manager should monitor the release and application logs to ensure no errors are occurring.
- If the release failed, the Release Manager should investigate, communicating with other team members who are more informed about the problem area.
Release Lifecycle
sequenceDiagram
actor eng as Software Engineers
participant branchmain as main/master <br> branch
participant envci as CI <br> Environment
participant branchrc as release-candidate <br> branch
participant envrc as Release Candidate <br> Environment
participant branchrelease as release <br> branch
participant envprod as Production <br> Environment
loop
eng->>branchmain: Merge pull requests
end
critical Automated CI Deployments
branchmain->>envci: Deploy to CI
end
Note over eng: Requests a release candidate
critical New Release Candidate
branchmain->>branchrc: Latest code merged
branchrc->>branchrc: Release notes and PR generated
branchrc->>envrc: Deploy to RC
eng->>envrc: Engineer verifies their commit(s)
note over eng: Checks off boxes on the PR
end
critical Production Release
eng->>branchrc: Engineer coordinated release approval
branchrc->>branchmain: Merged back to main
branchmain->>branchrelease: Main branch merged to release
branchrelease->>envprod: Deploy to Production
end
Versioning
Our releases are versioned using a date-based versioning scheme following the pattern YYYY.MM.DD.#
:
YYYY
- full yearMM
- zero-padded month numberDD
- zero-padded day of the month#
- release number starting at0
for the first release that day and incrementing on each subsequent release
For example:
2022.03.15.0
would be the first release on March 15, 2022.2022.03.15.7
would be the seventh release on March 15, 2022.2022.03.16.0
would be the first release on March 16, 2022 (release number resets the next day).