Releasing OpenSC should be simple and streamlined, yet a predictable and easily repeatable process. This page describes releasing OpenSC from Git.
- At least one (or more, if needed) pre-releases must be done before the actual release.
- After a release candidate has been published, no more merges to the master branch should happen, only release-critical single commits can be cherry-picked and a new release candidate created.
- Normal development should continue when the final release is done.
- OpenSC usually does not release micro updates for previously released versions
- Micro updates happen in rare occasions when fixing more critical issues
- Request a CVE in case of security relevant fixes or changes.
- Use Red Hat product security at
secalert@redhat.comdescribing the CVE and ask for CVE allocation.- Do NOT use mitre directly as their response times are terrible.
- Filter OSS-Fuzz for security relevant issues that were fixed for this release
- Filter Coverity scan for High impact issues that were fixed for this release
- Use Red Hat product security at
- Update the security advisories
- Mention CVE ID in the
NEWSfile
- Add a upcoming release to wiki page Smart Card Release Testing
- Create a tracking issue with proposed changelog for
NEWS, for example Towards new release 0.22.0
Release (or RC) version must be changed in the following files:
NEWS: Make sure to fix the release date for final release!VERSION.mk: change package version major/minor/fix as needed, RCs get the package suffix-rc, which is removed for the final releaseconfigure.ac: Update the LT version number, which is required with changes to, for example,opensc.handlibopensc.exports.packaging/opensc.spec: Update the version number to matchVERSION.mkSECURITY.md: Update supported version
Optionally, discuss changes to NEWS by opening a new issue with your suggestions.
-
Create release tag
-
Lightweight tag for release candidate
-
Via GitHub when creating release - GitHub will automatically create
*-rcXas lightweight tag -
Locally with git
git tag 0.20.0 git push origin 0.20.0
-
-
Annotated tag for final release
-
Locally with git
git tag -a 0.20.0 git push origin 0.20.0
-
-
-
Prepare build artifacts
-
Wait around 30-50 minutes (after pushing the tag) to allow build artifacts to be built
-
All builds must succeed and must not generate more warnings than the previous build.
-
Download signed MacOS installers from GH Actions (use the artifact
opensc-build-macos-15from theOSXpipeline) -
Download signed Windows installers from Signpath.io:
- Navigate to Signpath's outstanding Signing Requests
- Select the ones that were issued with the creation of the release tag
- Check the signing request's commit ID (under repository data) matches the commit pointed by release tag
- Approve signing and wait for completion of the signing process
- Download signed artifact from Signpath.io and extract them from zip archives
-
Download debug zip archives for Windows from github artifacts (names matching the MSI from signpath with
-dbgsuffix) -
Do a separate smoke test for all installers and the tarball, document your results in the Wiki.
-
- A new (draft) release is created via button on the release page
- Describe the release including all changes to NEWS (Markdown)
- Select appropriate tag (when pushed before) or create new one in GitHub (for lightweight tags only)
- For final releases, select the existing tag, e.g.
0.20.0; for release candidates choose a new tag, e.g.0.20.0-rc1
- For final releases, select the existing tag, e.g.
- Upload the build artifacts to the new release
- From Nightly Builds: Release tarball, OSX installer, 2 variants (default, light) of Windows separate debug archives for both 64b and 32b
- From Signpath.io: 2 variants (default, light) of Windows installer for both 64b and 32b
- Check:
This is a pre-releaseif only creating a release candidateSet as latest releaseif creating final release
- Write announcement, short human readable version
- Short overview of OpenSC
- Important and visible (breaking) changes in this release (not a copy of
NEWSfile) - URL-s for downloads
- Pointers to full verbose information (list of commits, full changelog, closed bugs)
- SHA-256 hashes of release artifacts (
openssl sha256orsha256sum) - Plans for next release
- Find someone to proofread the announcement.
- Via mail publish the announcement on opensc-announce@lists.sourceforge.net and opensc-devel@lists.sourceforge.net lists.
- In case of security relevant changes, forward the announcement to oss-security@lists.openwall.com
- Update the Main Wiki page with links to new release
- Happens on exceptional basis only when fixing significant problems.
- Release contains only fixup commits on top of previous minor/major release.
- Discuss whether changes need another round of testing.
-
Create new branch from last release tag
git checkout -b stable-0.X.[Y+1] tags/0.X.Y
-
Add commits with fixes
- Use git
cherry-pick -xto pick commits frommasterto reference commit hashes
- Use git
-
Remove suffixes from build names in
.github/build.shscriptdiff --git a/.github/build.sh b/.github/build.sh index 7770590af1..afb58af450 100755 --- a/.github/build.sh +++ b/.github/build.sh @@ -15,11 +15,6 @@ if [ "$GITHUB_EVENT_NAME" == "pull_request" ]; then else SUFFIX="$GITHUB_BASE_REF-pr$PR_NUMBER" fi -else - BRANCH=$(echo $GITHUB_REF | awk 'BEGIN { FS = "/" } ; { print $3 }') - if [ "$BRANCH" != "master" ]; then - SUFFIX="$BRANCH" - fi fi if [ -n "$SUFFIX" ]; then ./bootstrap.ci -s "$SUFFIX" </code></pre>
-
Both in
stable-0.X.[Y+1]andmasterbranch:- update
NEWSwith changes, - update version in
SECURITY.md, - update version and LT revision in
configure.ac.
- update
-
Push release tag
0.X.[Y+1]intostable-0.X.[Y+1]branchgit tag -a 0.25.1 git push origin 0.25.1
-
Wait for artifacts to build
-
Write announcement
- The repository OpenSC/Nightly is used to hold nightly builds for both MacOS and Windows.
- They are pushed on every master commit so the old builds need to be cleaned up regularly.
- Ideally after the new release is done, any old branch before last release can be removed through the github web UI on OpenSC/Nightly/branches/stale.
- For more info, see the related issues
From Github Actions, there is one access token that is used by CI to push artifacts to the Nightly repository.Its expiration can be checked on the organization settings page.
- When it expires, the new token needs to be generated in user settings.
- The token needs Read and Write access to code and Read access to metadata in OpenSC/Nightly repository.
- The Github Actions token needs to be inserted into the OpenSC repository secrets.