Pekko Release Process - apache/pekko-site GitHub Wiki
The release is managed by a Release Manager (a human) and involves building and deploying artifacts (including generating SHA digests and PGP signatures for them). Emails must be sent to Apache mailing lists and a vote arranged.
The release can only be finalized after passing the vote. This involves moving the release artifacts to official Apache release repo (from the staging repo). We also need to release the Maven artifacts. The Pekko web site must be updated to include links to download the release. Emails are also sent out announcing the release.
If the component you're releasing has already been set up for CI-assisted releasing, see Pekko-Release-Process ‐ ATR-CI‐assisted-release instead.
- https://incubator.apache.org/guides/releasemanagement.html
- https://incubator.apache.org/cookbook/#two_phase_vote_on_podling_releases
- https://incubator.apache.org/policy/incubation.html#releases
- Pekko dev mailing list
- You can start the release notes PR early, but we no longer require it to be merged before tagging the release.
- Releasing off a branch other than main branch?
- We don't tend to backport changes like year changes in NOTICE files and dependency version updates
- so if you are releasing from a branch like 1.0.x, 1.1.x, etc., you should check if we need to update the year in the NOTICE files (check also the 'legal' directory)
- see if there are patch level dependency updates that can be added - maybe only if they fix CVEs and only if they don't require much uptake other than changing changing the jar version
- There might be a Docker image created but please don't remove the instructions not related to Docker
- it is useful for people to understand how to do the build even if it is partially encapsulated in a Docker image
- Install the Java SDK (which versions are acceptable may depend on which module you're releasing)
- Install sbt
- Install GraphViz - version 2.26 or newer required
- Use a gpg key that has your 'apache.org' email address associated with it.
- There is a good write up about how GPG is set up for doing releases at https://github.com/sbt/sbt-ci-release#gpg
- Export your public key and add it to https://github.com/apache/pekko/blob/main/KEYS as documented in that file
- Also ensure the KEYS file in svn is up to date. https://dist.apache.org/repos/dist/release/pekko/KEYS
- Upload public part of key to https://keys.openpgp.org/
-
Add
credentials += Credentials(Path.userHome / ".sbt" / "sonatype_credentials")to your$HOME/.sbt/1.0/sonatype.sbt -
Add your Apache credentials to
$HOME/.sbt/sonatype_credentials(if the file already exists then append it after existing entries).
realm=Apache Nexus Repository Manager
host=repository.apache.org
user=<APACHE ID>
password=<APACHE PASSWORD>
- Use
git statusto ensure you are using the 'main' branch and have no uncommitted file changes- git tag - eg
v1.0.0-RC1
- git tag - eg
-
sbt "clean; set ThisBuild / version := \"1.0.0\"; signedSourceDistGenerate"(orsbt "clean; set ThisBuild / version := \"1.0.0\"; sourceDistGenerate")- NB do not include the 'RC' in version name when building the source distribution
- these files need to be released without modification after the vote passes
- The generated files will appear in
target/distdirectory - If you used
sourceDistGenerateabove, usegpg -abto generate.ascsignatures. You may need to use the--default-key <SECRET_KEY_ID>option. - Add the files to svn - https://dist.apache.org/repos/dist/dev/pekko (create a dir named after the RC version, eg
1.0.0-RC1).- svn co https://dist.apache.org/repos/dist/dev/pekko/ pekko-dist
- cd pekko-dist
- mkdir 1.0.0-RC1
- cd 1.0.0-RC1
- cp /path/to/apache-pekko-1.0.0-src-20230527.tgz .
- cp /path/to/apache-pekko-1.0.0-src-20230527.tgz.asc .
- cp /path/to/apache-pekko-1.0.0-src-20230527.tgz.sha512 .
- cd ..
- svn commit -m "Pekko 1.0.0-RC1"
- If you leave the steps above to CI, still build the archive locally and compare the result.
- we are not yet releasing, we are just staging the jars for later release
- use
git statusto ensure you are using the 'main' branch and have no uncommitted file changes - Use the appropriate JDK when running these sbt commands
- double check by running
java -versionand watching the first line of the sbt startup
- double check by running
- Make sure that the project is clean by running
sbt +clean.- This is important as sbt's incremental compiler is not deterministic if existing compiled JVM bytecode exists
sbt "set ThisBuild / version := \"1.0.0-RC1\"; +publishSigned"- before proceeding to the Sonatype upload, please check the output from the
publishSignedrun- there might be plenty of warnings about scaladoc but check to see if there were issues with graphviz calls
- if you have graphviz errors, you should check that you have an up to date version installed
- if you continue to have graphviz issues, please contact the Pekko dev list before proceeding
- be very careful with the sbt-sonatype calls
- we cannot do a full release until the votes pass
-
sonatypeReleaseandsonatypeBundleReleaseare the commands that MUST NOT be used
-
sbt "set ThisBuild / version := \"1.0.0\"; sonatypePrepare; set ThisBuild / version := \"1.0.0\"; sonatypeBundleUpload; sonatypeClose"- sometimes the 'close' fails due to sonatype not finding your public key in the keyservers, even when they are there. In that case, log into https://repository.apache.org with your Apache credentials, go to 'Staging Repositories', find the relevant repository, and manually trigger the 'close' again.
- If you used CI to achieve the above, verify the binaries can be reproduced
- basically an email to [email protected] list
- this is based on https://lists.apache.org/thread/v1cw3rtkwbysl2n606n4rqchf7k0x4f4 and https://lists.apache.org/thread/05g171bk4k08krhvrs46v6hym7lrnc4j
Subject: [VOTE] Release Apache Pekko 1.0.0-RC1
Hello Pekko Community,
This is a call for a vote to release Apache Pekko version 1.0.0-RC1.
The discussion thread:
<insert lists.apache.org link here>
The release candidate:
https://dist.apache.org/repos/dist/dev/pekko/1.0.0-RC1/
This release has been signed with a PGP key available here:
https://downloads.apache.org/pekko/KEYS
Release Notes:
<insert URL here>
Git branch for the release:
https://github.com/apache/pekko/tree/v1.0.0-RC1
Git commit ID: <insert ID here>
Please download, verify, and test.
We have also staged jars in the Apache Nexus Repository. These were built with the same code
as appears in this Source Release Candidate. We would appreciate if users could test with these too.
If anyone finds any serious problems with these jars, please also notify us on this thread.
https://repository.apache.org/content/groups/staging/org/apache/pekko/
For sbt 1.9.4 or greater you can add this resolver
resolvers += Resolver.ApacheMavenStagingRepo
Otherwise for older versions of sbt
resolvers += "Apache Pekko Staging" at "https://repository.apache.org/content/groups/staging"
The VOTE will pass if we have more positive votes than negative votes
and there must be a minimum of 3 approvals from Pekko PMC members.
Anyone voting in favour of the release, could you please provide a list of the checks you have done?
The vote will be left open until <insert date/time here>.
[ ] +1 approve
[ ] +0 no opinion
[ ] -1 disapprove with the reason
To learn more about Apache Pekko, please see https://pekko.apache.org/
Checklist for reference:
[ ] Download links are valid.
[ ] Checksums and signatures.
[ ] LICENSE/NOTICE files exist
[ ] No unexpected binary files
[ ] All source files have ASF headers
[ ] Can compile from source
[ ] Can verify the binary build
To compile from the source, please refer to:
https://github.com/apache/pekko/blob/main/README.md#building-from-source
To verify the binary build, please refer to:
https://github.com/apache/pekko-site/wiki/Pekko-Release-Process#verifying-the-binary-build
Some notes about verifying downloads can be found at:
https://pekko.apache.org/download.html#verifying-downloads
Here is my +1.
Thanks,
XXXXXXX (Apache Pekko PMC member)
- include the release notes
- details about the Maven staged jars and how to construct a resolver for sbt (maybe also mvn)
- basic details about the voting process and the date/time of when the vote ends
- anyone can vote
- we need a minimum of 3 approvals from Pekko PMC members
- if there were artifacts staged from CI, the review must include independently reproducing these artifacts.
- if we have more approvals than disapprovals, the vote passes (as long we have more approvals than disapprovals among all voters), eg 3 +1s and 2 -1s is a vote for release
- the vote can be cancelled by the Release Manager if there is a serious flaw found in the release candidate
- delete the RC files in https://dist.apache.org/repos/dist/dev/pekko/1.0.0-RC1
- use https://repository.apache.org/ UI to remove the staged jars
- respond to the email thread announcing the result
-
add git tag 'v1.0.0' to the same commit as the accepted RC and push it
-
ensure that this tag is what you have checked out and that you have no uncommitted changes locally
-
Deploy the jars to Apache Maven Repository (staging) building with version 'v1.0.0'
- leave the 1.0.0-RC1 jars in staging for comparison
- the steps are the same as when we deployed the RC (see above)
- again, do not complete the Maven release yet
-
email the Pekko dev thread to say that release jars are staged and invite users to double check that they match the RC jars.
-
Leave the 1.0.0 jars up at least 24 hours so that the community can verify that they match the latest successfully voted RC jars
- we require at least 1 PMC member to validate the release jars match the RC jars
- Pekko projects use sbt-reproducible-builds as a tool to verify that
the jars built in the Build the Release step can be reproduced and hence verified by the community.
- The tool works by creating binaries locally and comparing them against a Maven repository
- you may need to install diffoscope which sbt-reproducible-builds uses to diff the files
- By default the Pekko projects check against Apache Staging repo (i.e.
https://repository.apache.org/content/groups/staging/) since this is where binaries are meant to sit while the voting is happening- If needed its possible to override this, i.e. by running
sbt "set ThisBuild / reproducibleBuildsCheckResolver := Resolver.DefaultMavenRepository; shell"- Note that its important that you override the
ThisBuild / reproducibleBuildsCheckResolverin this manner because otherwise the project will be in a dirty VCS state which causes the project to build as a snapshot
- Note that its important that you override the
- If needed its possible to override this, i.e. by running
- First run
sbt +cleanand then runsbt ++2.12 reproducibleBuildsCheck/sbt ++2.13 reproducibleBuildsCheckrespectively to check that your binary build matches what the release manager has deployed.- Scala 3 is not yet support due to the compiler not creating deterministic binaries, see https://github.com/apache/pekko/issues/325
- Then check sbt's output to see if there are any potential problems, i.e.
Is usually a red herring since the tool will try and check against all possible artifacts (even though some are intentionally not designed to be deployed), see https://github.com/raboof/sbt-reproducible-builds/issues/257. What you need to look out for are cases like this
[info] # `pekko-bench-jmh_2.12-1.0.1-RC1.buildinfo`: NOT OK [info] [info] - pekko-bench-jmh_2.12-1.0.1-RC1.jar: Missing in theirs but present in ours [info] - pekko-bench-jmh_2.12-1.0.1-RC1.pom: Missing in theirs but present in oursThen it indicates there was a problem.[info] - pekko-remote_2.13-1.0.1.jar: Mismatch: our 95c34c631ecc11ffd02b9d823977167e72dbe5ebd9127d15e68c7bd0173c79f144f5bd8391f74e1b641f973a62fb3755c7ce0669e04394b5b44d6bca63dc424a did not match their 8b3bbdf2c962b23f49d493da1bd3f43de7bfe0d7b19399133fd549dc9fb7d3c464258e44d8d15d489f7ca44547cabe35698fde270816f537111e78a2817a8820
- use https://repository.apache.org/ UI to release the staged 1.0.0 jars
- move the release files from https://dist.apache.org/repos/dist/dev/pekko/1.0.0-RC1 to https://dist.apache.org/repos/dist/release/pekko/1.0.0
- ideally use
svn mv dev/pekko/1.0.0-RC1 release/pekko/1.0.0, notably dropping the 'RC' - dist.apache.org is a huge repo so you probably want a sparse checkout - see https://svnbook.red-bean.com/en/1.8/svn.advanced.sparsedirs.html
- ideally use
- make sure the RC files are gone from https://dist.apache.org/repos/dist/dev/pekko
- once this is committed to svn, you should receive an automated email from
[email protected]with a link tohttps://reporter.apache.org/addrelease.html?pekkoor something like that- follow that link and record the release and the date - prefix the release, eg 'Pekko 1.0.0'
- we will have a 'Pekko HTTP 1.0.0' in due course so we need to differentiate them
- update the download page in https://github.com/apache/pekko-site and publish the updated pages
- we need to match the contents of other Apache project download pages
- https://poi.apache.org/download.html (one example)
- there are some download links already - so try to match those
- we only need to link to most recent version of each module - there is already a general purpose link for to archives.apache.org
- note the links to the release files are of this format: https://www.apache.org/dyn/closer.lua/poi/release/src/poi-src-5.2.3-20220909.zip
- the page this returns shows links to https://dlcdn.apache.org/poi/release/src/poi-src-5.2.3-20220909.zip
- the files that we add to https://dist.apache.org/repos/dist/release/pekko will automatically be copied to https://dlcdn.apache.org (but it can take a while)
- send emails to Pekko users and dev lists - use a subject like
[ANNOUNCE] Apache Pekko 1.0.0 released - also to Apache Announce list
- ensure that you have updated the download page first
- this list is curated and don't be surprised if they bounce it back to you requesting fixes
- you can only send emails to [email protected] from your designated @apache.org email so make sure that you have SMTP outgoing mail-relay service setup.