-
Notifications
You must be signed in to change notification settings - Fork 24
Release Process
The following process describes the steps of releasing a new version of the Issue Labeler. The steps begin at the stage of the main branch containing what is desired to be marked as a new version of the workflows. The release process requires a few iterations capturing multiple commit SHA values to ensure each release is fully pinned to a consistent state through each layer of the architecture.
The branch name should match the version to be released.
- Choose the
vX.Y.Zbranch created. - Click 'Run Workflow'
The release workflow publishes the predictor app image to GitHub's docker registry and updates the Issue Labeler's Actions that can be referenced by other repositories to encode the image's SHA. Those updated actions will be committed and pushed to the vX.Y.Z branch.
Important
The commit produced by the Release action lands on the vX.Y.Z branch, advancing its HEAD. The SHA of that commit — advertised in every uses: line of the release body and pointed to by the vX.Y.Z-release tag — is what consumers must pin to in their uses: lines. After publishing, the branch HEAD may advance further with post-release maintenance commits (for example, repinning the in-repo workflow templates to the just-released SHA); the release-body SHA remains canonical. See "The release-body SHA, the release tag, and the branch HEAD" below for details.
First, navigate to the vX.Y.Z branch and capture the latest commit SHA. The 'Release' process above will have added a commit to that branch for pinning the Docker Container Image's reference. That commit must be used for consumers to reference the new version of Issue Labeler.
The latest commit on the vX.Y.Z branch is shown as a placeholder below as {vX.Y.Z-commit-sha}.
Note the commit SHA is different from the SHA256 digest of the predictor app's Docker Container Image.
Using GitHub's Releases feature, draft a new release and choose/enter the following:
- Create a new tag called
vX.Y.Z-release - Choose the
vX.Y.Zbranch as the Target - Enter a title in the form of
vX.Y.Z - {Title} - In the description, provide the following information to inform consumers how to reference the Issue Labeler's actions by pinning to the commit sha for this new version.
## Referencing vX.Y.Z
To reference `dotnet/issue-labeler` vX.Y.Z actions, workflows should pin to the SHA associated with the release as follows:
* `uses: dotnet/issue-labeler/download@{vX.Y.Z-commit-sha} # vX.Y.Z`
* `uses: dotnet/issue-labeler/train@{vX.Y.Z-commit-sha} # vX.Y.Z`
* `uses: dotnet/issue-labeler/test@{vX.Y.Z-commit-sha} # vX.Y.Z`
* `uses: dotnet/issue-labeler/promote@{vX.Y.Z-commit-sha} # vX.Y.Z`
* `uses: dotnet/issue-labeler/restore@{vX.Y.Z-commit-sha} # vX.Y.Z`
* `uses: dotnet/issue-labeler/predict@{vX.Y.Z-commit-sha} # vX.Y.Z`
Before publishing the release (or before merging any post-release patch commits to the vX.Y.Z branch), confirm the SHA pinned in every uses: line across the workflow templates on the vX.Y.Z branch matches the SHA shown in the release body. A scripted check is sufficient:
# Replace EXPECTED with the {vX.Y.Z-commit-sha} that the release body advertises
EXPECTED="<sha>"
cd <issue-labeler clone>
git checkout "$EXPECTED"
# Find any 'uses: dotnet/issue-labeler/<action>@<sha>' line whose SHA is not EXPECTED.
# If anything is printed, the templates and release body are out of sync.
grep -rIn 'dotnet/issue-labeler/[a-z]\+@' .github/workflows \
| grep -v "$EXPECTED" \
&& echo "::error:: mismatched SHA above"Past patch cycles have produced situations where the release body advertised one SHA while the workflow templates were pinned to a different SHA. This check catches that class of mistake before consumers copy the wrong reference.
Three related-but-distinct SHAs are associated with a release:
-
Release-body SHA — the SHA advertised in every
uses:line of the GitHub release body. This is the canonical SHA consumers must pin to. It's also what everyuses:line in this wiki references. -
vX.Y.Z-releasetag — a lightweight tag placed on the release-body SHA. The tag and the release-body SHA always match. -
vX.Y.Zbranch HEAD — at the moment of release this matches the release-body SHA. After publishing, the branch HEAD typically advances by at least one post-release maintenance commit (for example, a "Repin labeler workflows to latestvX.Y.ZSHA" commit that updates the in-repo workflow templates to reference the just-released SHA). Do not pin to the branch HEAD — pin to the release-body SHA.
For v2.1.0 these SHAs are concretely:
| Ref | SHA | Pin? |
|---|---|---|
Release body / v2.1.0-release tag |
98f1d9b85686147ffdc155547cdd3469546c4e26 |
✅ Yes |
v2.1.0 branch HEAD |
dedab068d5b2fcc6f85fee4ea9e9be79c3f12449 |
❌ No (post-release maintenance) |
If a post-release patch is required (for example, to fix a workflow template), commit the change to the vX.Y.Z branch, move the vX.Y.Z-release tag and update the release body's uses: lines to reference the new SHA, re-run the SHA-consistency check above, and update the wiki's Onboarding snippets to match.