1919
2020# Apache DataFusion Comet: Release Process
2121
22- This documentation explains the release process for Apache DataFusion Comet.
22+ This documentation explains the release process for Apache DataFusion Comet. Some preparation tasks can be
23+ performed by any contributor, while certain release tasks can only be performed by a DataFusion Project Management
24+ Committee (PMC) member.
25+
26+ ## Checklist
27+
28+ The following is a quick-reference checklist for the full release process. See the detailed sections below for
29+ instructions on each step.
30+
31+ - [ ] Release preparation: review expression support status and user guide
32+ - [ ] Create release branch
33+ - [ ] Generate release documentation
34+ - [ ] Update Maven version in release branch
35+ - [ ] Update version in main for next development cycle
36+ - [ ] Generate the change log and create PR against main
37+ - [ ] Cherry-pick the change log commit into the release branch
38+ - [ ] Build the jars
39+ - [ ] Tag the release candidate
40+ - [ ] Update documentation for the new release
41+ - [ ] Publish Maven artifacts to staging
42+ - [ ] Create the release candidate tarball
43+ - [ ] Start the email voting thread
44+ - [ ] Once the vote passes:
45+ - [ ] Publish source tarball
46+ - [ ] Create GitHub release
47+ - [ ] Promote Maven artifacts to production
48+ - [ ] Push the release tag
49+ - [ ] Close the vote and announce the release
50+ - [ ] Post release:
51+ - [ ] Register the release with Apache Reporter
52+ - [ ] Delete old RCs and releases from SVN
53+ - [ ] Write a blog post
54+
55+ ## Release Preparation
56+
57+ Before starting the release process, review the user guide to ensure it accurately reflects the current state of the
58+ project:
59+
60+ - Review the supported expressions and operators lists in the user guide. Verify that any expressions added since
61+ the last release are included and that their support status is accurate.
62+ - Spot-check the support status of individual expressions by running tests or queries to confirm they work as
63+ documented.
64+ - Look for any expressions that may have regressed or changed behavior since the last release and update the
65+ documentation accordingly.
66+
67+ It is also recommended to run benchmarks (such as TPC-H and TPC-DS) comparing performance against the previous
68+ release to check for regressions. See the
69+ [ Comet Benchmarking Guide] ( benchmarking.md ) for instructions.
70+
71+ These are tasks where agentic coding tools can be particularly helpful — for example, scanning the codebase for
72+ newly registered expressions and cross-referencing them against the documented list, or generating test queries to
73+ verify expression support status.
74+
75+ Any issues found should be addressed before creating the release branch.
2376
2477## Creating the Release Candidate
2578
2679This part of the process can be performed by any committer.
2780
28- Here are the steps, using the 0.1 .0 release as an example.
81+ Here are the steps, using the 0.13 .0 release as an example.
2982
3083### Create Release Branch
3184
@@ -45,8 +98,8 @@ Create a release branch from the latest commit in main and push to the `apache`
4598git fetch apache
4699git checkout main
47100git reset --hard apache/main
48- git checkout -b branch-0.1
49- git push apache branch-0.1
101+ git checkout -b branch-0.13
102+ git push apache branch-0.13
50103```
51104
52105### Generate Release Documentation
@@ -57,24 +110,24 @@ so we need to generate the actual content (config tables, compatibility matrices
57110``` shell
58111./dev/generate-release-docs.sh
59112git add docs/source/user-guide/latest/
60- git commit -m " Generate docs for 0.1 .0 release"
61- git push apache branch-0.1
113+ git commit -m " Generate docs for 0.13 .0 release"
114+ git push apache branch-0.13
62115```
63116
64117This freezes the documentation to reflect the configs and expressions available in this release.
65118
66119### Update Maven Version
67120
68- Update the ` pom.xml ` files in the release branch to update the Maven version from ` 0.1 .0-SNAPSHOT ` to ` 0.1 .0 ` .
121+ Update the ` pom.xml ` files in the release branch to update the Maven version from ` 0.13 .0-SNAPSHOT ` to ` 0.13 .0 ` .
69122
70- There is no need to update the Rust crate versions because they will already be ` 0.1 .0 ` .
123+ There is no need to update the Rust crate versions because they will already be ` 0.13 .0 ` .
71124
72125### Update Version in main
73126
74127Create a PR against the main branch to prepare for developing the next release:
75128
76- - Update the Rust crate version to ` 0.2 .0 ` .
77- - Update the Maven version to ` 0.2 .0-SNAPSHOT ` (both in the ` pom.xml ` files and also in the diff files
129+ - Update the Rust crate version to ` 0.14 .0 ` .
130+ - Update the Maven version to ` 0.14 .0-SNAPSHOT ` (both in the ` pom.xml ` files and also in the diff files
78131 under ` dev/diffs ` ).
79132
80133### Generate the Change Log
@@ -97,7 +150,7 @@ example generates a change log of all changes between the previous version and t
97150
98151``` shell
99152export GITHUB_TOKEN=< your-token-here>
100- python3 generate-changelog.py 0.0 .0 HEAD 0.1 .0 > ../changelog/0.1 .0.md
153+ python3 generate-changelog.py 0.12 .0 HEAD 0.13 .0 > ../changelog/0.13 .0.md
101154```
102155
103156Create a PR against the _ main_ branch to add this change log and once this is approved and merged, cherry-pick the
@@ -154,14 +207,16 @@ repository
154207
155208### Tag the Release Candidate
156209
157- Tag the release branch with ` 0.1.0-rc1 ` and push to the ` apache ` repo
210+ Ensure that the Maven version update and changelog cherry-pick have been pushed to the release branch before tagging.
211+
212+ Tag the release branch with ` 0.13.0-rc1 ` and push to the ` apache ` repo
158213
159214``` shell
160215git fetch apache
161- git checkout branch-0.1
162- git reset --hard apache/branch-0.1
163- git tag 0.1 .0-rc1
164- git push apache 0.1 .0-rc1
216+ git checkout branch-0.13
217+ git reset --hard apache/branch-0.13
218+ git tag 0.13 .0-rc1
219+ git push apache 0.13 .0-rc1
165220```
166221
167222Note that pushing a release candidate tag will trigger a GitHub workflow that will build a Docker image and publish
@@ -172,16 +227,19 @@ it to GitHub Container Registry at https://github.com/apache/datafusion-comet/pk
172227In ` docs ` directory:
173228
174229- Update ` docs/source/index.rst ` and add a new navigation menu link for the new release in the section ` _toc.user-guide-links-versioned `
175- - Add a new line to ` build.sh ` to delete the locally cloned ` comet-* ` branch for the new release e.g. ` comet-0.11 `
230+ - Add a new line to ` build.sh ` to delete the locally cloned ` comet-* ` branch for the new release e.g. ` comet-0.13 `
176231- Update the main method in ` generate-versions.py ` :
177232
178233``` python
179- latest_released_version = " 0.11 .0"
180- previous_versions = [" 0.8 .0" , " 0.9.1 " , " 0.10.1 " ]
234+ latest_released_version = " 0.13 .0"
235+ previous_versions = [" 0.11 .0" , " 0.12.0 " ]
181236```
182237
183238Test the documentation build locally, following the instructions in ` docs/README.md ` .
184239
240+ Once verified, create a PR against the main branch with these documentation changes. After merging, the docs will be
241+ deployed to https://datafusion.apache.org/comet/ by the documentation publishing workflow.
242+
185243Note that the download links in the installation guide will not work until the release is finalized, but having the
186244documentation available could be useful for anyone testing out the release candidate during the voting period.
187245
@@ -215,8 +273,7 @@ On Ubuntu `apt-get install -y libxml2-utils`
215273On RedHat ` yum install -y xmlstarlet `
216274
217275``` shell
218-
219- /comet:$./dev/release/publish-to-maven.sh -h
276+ ./dev/release/publish-to-maven.sh -h
220277usage: publish-to-maven.sh options
221278
222279Publish signed artifacts to Maven.
@@ -234,7 +291,7 @@ GPG_PASSPHRASE - Passphrase for GPG key
234291example
235292
236293``` shell
237- /comet:$ ./dev/release/publish-to-maven.sh -u release_manager_asf_id -r /tmp/comet-staging-repo-VsYOX
294+ ./dev/release/publish-to-maven.sh -u release_manager_asf_id -r /tmp/comet-staging-repo-VsYOX
238295ASF Password :
239296GPG Key (Optional):
240297GPG Passphrase :
@@ -250,11 +307,22 @@ actually happen automatically when running the script).
250307
251308### Create the Release Candidate Tarball
252309
253- Run the create-tarball script on the release candidate tag (` 0.1.0-rc1 ` ) to create the source tarball and upload it to
254- the dev subversion repository
310+ The ` create-tarball.sh ` script creates a signed source tarball and uploads it to the dev subversion repository.
311+
312+ #### Prerequisites
313+
314+ Before running this script, ensure you have:
315+
316+ 1 . A GPG key set up for signing, with your public key uploaded to https://pgp.mit.edu/
317+ 2 . Apache SVN credentials (you must be logged into the Apache SVN server)
318+ 3 . The ` requests ` Python package installed (` pip3 install requests ` )
319+
320+ #### Run the script
321+
322+ Run the create-tarball script on the release candidate tag (` 0.13.0-rc1 ` ):
255323
256324``` shell
257- ./dev/release/create-tarball.sh 0.1 .0 1
325+ ./dev/release/create-tarball.sh 0.13 .0 1
258326```
259327
260328This will generate an email template for starting the vote.
@@ -263,6 +331,20 @@ This will generate an email template for starting the vote.
263331
264332Send the email that is generated in the previous step to ` dev@datafusion.apache.org ` .
265333
334+ The verification procedure for voters is documented in
335+ [ Verifying Release Candidates] ( https://github.com/apache/datafusion-comet/blob/main/dev/release/verifying-release-candidates.md ) .
336+ Voters can also use the ` dev/release/verify-release-candidate.sh ` script to assist with verification:
337+
338+ ``` shell
339+ ./dev/release/verify-release-candidate.sh 0.13.0 1
340+ ```
341+
342+ ### If the Vote Fails
343+
344+ If the vote does not pass, address the issues raised, increment the release candidate number, and repeat from
345+ the [ Tag the Release Candidate] ( #tag-the-release-candidate ) step. For example, the next attempt would be tagged
346+ ` 0.13.0-rc2 ` .
347+
266348## Publishing Binary Releases
267349
268350Once the vote passes, we can publish the source and binary releases.
@@ -272,7 +354,7 @@ Once the vote passes, we can publish the source and binary releases.
272354Run the release-tarball script to move the tarball to the release subversion repository.
273355
274356``` shell
275- ./dev/release/release-tarball.sh 0.1 .0 1
357+ ./dev/release/release-tarball.sh 0.13 .0 1
276358```
277359
278360### Create a release in the GitHub repository
@@ -285,36 +367,33 @@ changelog in the description.
285367Promote the Maven artifacts from staging to production by visiting https://repository.apache.org/#stagingRepositories
286368and selecting the staging repository and then clicking the "release" button.
287369
288- ### Publishing Crates
289-
290- Publish the ` datafusion-comet-spark-expr ` crate to crates.io so that other Rust projects can leverage the
291- Spark-compatible operators and expressions outside of Spark.
292-
293370### Push a release tag to the repo
294371
295- Push a release tag (` 0.1 .0 ` ) to the ` apache ` repository.
372+ Push a release tag (` 0.13 .0 ` ) to the ` apache ` repository.
296373
297374``` shell
298375git fetch apache
299- git checkout 0.1 .0-rc1
300- git tag 0.1 .0
301- git push apache 0.1 .0
376+ git checkout 0.13 .0-rc1
377+ git tag 0.13 .0
378+ git push apache 0.13 .0
302379```
303380
304381Note that pushing a release tag will trigger a GitHub workflow that will build a Docker image and publish
305382it to GitHub Container Registry at https://github.com/apache/datafusion-comet/pkgs/container/datafusion-comet
306383
307- Reply to the vote thread to close the vote and announce the release.
384+ Reply to the vote thread to close the vote and announce the release. The announcement email should include:
308385
309- ## Update released version number in documentation
386+ - The release version
387+ - A link to the release notes / changelog
388+ - A link to the download page or Maven coordinates
389+ - Thanks to everyone who contributed and voted
310390
311- - We provide direct links to the jar files in Maven
312- - The Kubernetes page needs updating once the Docker image has been published to GitHub Container Regsistry
391+ ## Post Release
313392
314- ## Post Release Admin
393+ ### Register the release
315394
316395Register the release with the [ Apache Reporter Service] ( https://reporter.apache.org/addrelease.html?datafusion ) using
317- a version such as ` COMET-0.1 .0 ` .
396+ a version such as ` COMET-0.13 .0 ` .
318397
319398### Delete old RCs and Releases
320399
@@ -334,7 +413,7 @@ svn ls https://dist.apache.org/repos/dist/dev/datafusion | grep comet
334413Delete a release candidate:
335414
336415``` shell
337- svn delete -m " delete old DataFusion Comet RC" https://dist.apache.org/repos/dist/dev/datafusion/apache-datafusion-comet-0.1 .0-rc1/
416+ svn delete -m " delete old DataFusion Comet RC" https://dist.apache.org/repos/dist/dev/datafusion/apache-datafusion-comet-0.13 .0-rc1/
338417```
339418
340419#### Deleting old releases from ` release ` svn
@@ -350,10 +429,10 @@ svn ls https://dist.apache.org/repos/dist/release/datafusion | grep comet
350429Delete a release:
351430
352431``` shell
353- svn delete -m " delete old DataFusion Comet release" https://dist.apache.org/repos/dist/release/datafusion/datafusion-comet-0.0 .0
432+ svn delete -m " delete old DataFusion Comet release" https://dist.apache.org/repos/dist/release/datafusion/datafusion-comet-0.12 .0
354433```
355434
356- ## Post Release Activities
435+ ### Write a blog post
357436
358437Writing a blog post about the release is a great way to generate more interest in the project. We typically create a
359438Google document where the community can collaborate on a blog post. Once the content is agreed then a PR can be
0 commit comments