Skip to content

Commit 2baa434

Browse files
authored
docs: improve release process documentation (#3508)
1 parent 354d142 commit 2baa434

File tree

1 file changed

+123
-44
lines changed

1 file changed

+123
-44
lines changed

docs/source/contributor-guide/release_process.md

Lines changed: 123 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,66 @@
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

2679
This 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`
4598
git fetch apache
4699
git checkout main
47100
git 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
59112
git 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

64117
This 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

74127
Create 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
99152
export 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

103156
Create 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
160215
git 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

167222
Note 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
172227
In `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

183238
Test 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+
185243
Note that the download links in the installation guide will not work until the release is finalized, but having the
186244
documentation 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`
215273
On 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
220277
usage: publish-to-maven.sh options
221278

222279
Publish signed artifacts to Maven.
@@ -234,7 +291,7 @@ GPG_PASSPHRASE - Passphrase for GPG key
234291
example
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
238295
ASF Password :
239296
GPG Key (Optional):
240297
GPG 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

260328
This will generate an email template for starting the vote.
@@ -263,6 +331,20 @@ This will generate an email template for starting the vote.
263331

264332
Send 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

268350
Once 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.
272354
Run 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.
285367
Promote the Maven artifacts from staging to production by visiting https://repository.apache.org/#stagingRepositories
286368
and 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
298375
git 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

304381
Note that pushing a release tag will trigger a GitHub workflow that will build a Docker image and publish
305382
it 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

316395
Register 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
334413
Delete 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
350429
Delete 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

358437
Writing a blog post about the release is a great way to generate more interest in the project. We typically create a
359438
Google document where the community can collaborate on a blog post. Once the content is agreed then a PR can be

0 commit comments

Comments
 (0)