Skip to content

Stable release process (every 2 months)

Linsong Wang edited this page Dec 6, 2024 · 26 revisions

Step 1: Create a release branch and increment the version in the master branch

Run this pipeline once.

Step 1.1: Manually verify quality of release

Linsong will add instructions on identifying the Docker image in the Docker hub.

https://github.com/prestodb/presto/wiki/Presto-release-testing-script

Step 2: Create the release notes PR

You must have the GitHub presto repo on a remote named "upstream" You must have your fork on a remote named "origin"

Then ensure that Step1: is complete and the release branch has been created by the pipeline.

Run the below script from the local master. The script should automatically create a PR for you.

Run this script in your recently rebased repo root folder: tdcmeehan@Timothys-MBP presto % ./src/release/release-notes.sh tdcmeehan <ACCESS_TOKEN>, where ACCESS_TOKEN is a personal access token with read privileges to the repository generated from https://github.com/settings/tokens.

Reviews may take up to 2 weeks to complete.

The PR is against the master branch; once the master branch copy is merged, we need to cherry-pick it into the release branch.

Note: For now, you must manually make a code change to add the date next to the release (see release.rst)

Note: you'll need to check each PR that doesn't have a release note and verify if it's due to the note being malformed or not present. If malformed, you'll need to edit the PR to add it. If not present, contact the author to suggest a release note.

Note: you'll also want to manually update the release.rst file to include the date when the release was cut (step 1).

Note: when you run this script, it will error out as below. This error is harmless, and if you check the latest pull requests in Presto, you will find the release notes PR.

2024-08-23T16:08:00.430-0400	ERROR	main	Bootstrap	Uncaught exception in thread main
java.lang.RuntimeException: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `java.util.LinkedHashMap` out of START_ARRAY token
 at [Source: (StringReader); line: 1, column: 33505] (through reference chain: java.util.LinkedHashMap["extensions"]->java.util.LinkedHashMap["warnings"])
	at com.facebook.presto.release.git.GithubGraphQlAction.githubApi(GithubGraphQlAction.java:198)
	at com.facebook.presto.release.git.GithubGraphQlAction.createPullRequest(GithubGraphQlAction.java:175)
	at com.facebook.presto.release.tasks.GenerateReleaseNotesTask.run(GenerateReleaseNotesTask.java:175)
	at com.facebook.presto.release.tasks.AbstractReleaseCommand.run(AbstractReleaseCommand.java:50)
	at com.facebook.presto.release.PrestoReleaseService.main(PrestoReleaseService.java:38)
Caused by: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `java.util.LinkedHashMap` out of START_ARRAY token
 at [Source: (StringReader); line: 1, column: 33505] (through reference chain: java.util.LinkedHashMap["extensions"]->java.util.LinkedHashMap["warnings"])
	at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:63)
	at com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1343)
	at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1139)
	at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1093)
	at com.fasterxml.jackson.databind.deser.std.StdDeserializer._deserializeFromEmpty(StdDeserializer.java:600)
	at com.fasterxml.jackson.databind.deser.std.MapDeserializer.deserialize(MapDeserializer.java:360)
	at com.fasterxml.jackson.databind.deser.std.MapDeserializer.deserialize(MapDeserializer.java:29)
	at com.fasterxml.jackson.databind.deser.std.MapDeserializer._readAndBindStringKeyMap(MapDeserializer.java:527)
	at com.fasterxml.jackson.databind.deser.std.MapDeserializer.deserialize(MapDeserializer.java:364)
	at com.fasterxml.jackson.databind.deser.std.MapDeserializer.deserialize(MapDeserializer.java:29)
	at com.fasterxml.jackson.databind.deser.std.MapDeserializer._readAndBindStringKeyMap(MapDeserializer.java:527)
	at com.fasterxml.jackson.databind.deser.std.MapDeserializer.deserialize(MapDeserializer.java:364)
	at com.fasterxml.jackson.databind.deser.std.MapDeserializer.deserialize(MapDeserializer.java:29)
	at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4013)
	at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3023)
	at com.facebook.presto.release.git.GithubGraphQlAction.githubApi(GithubGraphQlAction.java:195)
	... 4 more

Step 3: clean up the tag

  • on GitHub web, delete the tag for this release
  • in your local git repo, on the release branch (e.g. branch release-0.289), delete the local tag via git tag -d TAG, where TAG is the tag name of the tag you just deleted from the web UI.
  • Copy release notes merged on master into the release branch, e.g. git checkout release-0.289;git cherry-pick SHA;git push upstream release-0.289, where SHA is the commit ID of the release notes merge.
  • Tag this branch with 0.289: git tag -a TAG -m "release TAG", where TAG is the tag name of the tag you just deleted from the web UI.
  • push to Github remote: git push; git push upstream refs/tags/TAG, where TAG is the tag name of the tag you just deleted from the web UI.

Step 4: Publish Maven and Docker artifacts

These pipelines may be flaky. If so, reach out to Linsong Wang.

https://ci.ibm.prestodb.dev/job/presto-release-tools/job/presto-release-tools/job/pipeline-release-maven-artifacts/ https://ci.ibm.prestodb.dev/job/presto-release-tools/job/presto-release-tools/job/pipeline-release-docker-images/build?delay=0sec

Note: You may need to exclude additional submodules when publishing due to timeouts in Maven Central. You may not have the proper credentials to rebuild and exclude submodules, if so, you will need to reach out to Linsong Wang to get the proper permissions.

Step 5: Publish docs website

Run this job: https://ci.ibm.prestodb.dev/job/presto-release-tools/job/presto-release-tools/job/pipeline-release-docs/build?delay=0sec

When it's finished, examine the logs of the job. You'll see something like the following:

[2024-08-12T07:41:13.407Z] + git push --set-upstream https://wanglinsong:****@github.com/wanglinsong/prestodb.github.io.git 0.288.1-docs
[2024-08-12T07:41:16.714Z] remote: 
[2024-08-12T07:41:16.714Z] remote: Create a pull request for '0.288.1-docs' on GitHub by visiting:        
[2024-08-12T07:41:16.715Z] remote:      https://github.com/wanglinsong/prestodb.github.io/pull/new/0.288.1-docs        
[2024-08-12T07:41:16.715Z] remote: 
[2024-08-12T07:41:16.715Z] To https://github.com/wanglinsong/prestodb.github.io.git

Follow the link to create the PR for the docs.

Edit the PR and run the following on the branch from that PR across all files:

sed -e -ibak 's/@supports selector(.*11\.5rem)}}//' website/static/docs/current/_static/sphinx_immaterial_theme.*.css

Then squash and merge that commit back and the PR is ready for review.

Step 6: Finalize

Verify from Maven Central that the artifacts have been uploaded there. Verify from DockerHub that the images have been pushed. Reach out to Ali to update the links on the website.

Clone this wiki locally