This is an automated email from the ASF dual-hosted git repository.

cecemei pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/druid.git


The following commit(s) were added to refs/heads/master by this push:
     new 4b0c28ae3f7 minor: release process (#18681)
4b0c28ae3f7 is described below

commit 4b0c28ae3f79621e3a9fbae2542b62cb3f261528
Author: Cece Mei <[email protected]>
AuthorDate: Thu Oct 8 13:44:56 2026 -0700

    minor: release process (#18681)
    
    * release
    
    * prior-to-starting
    
    * docs
    
    * 35
    
    * format
    
    * release
    
    * release
    
    * review
    
    * lowercase
---
 distribution/asf-release-process-guide.md  | 431 ++++++++++++++++-------------
 distribution/bin/find-missing-backports.py |  10 +-
 distribution/bin/get-milestone-prs.py      |   8 +-
 distribution/bin/tag-missing-milestones.py |  14 +-
 4 files changed, 256 insertions(+), 207 deletions(-)

diff --git a/distribution/asf-release-process-guide.md 
b/distribution/asf-release-process-guide.md
index d5cdc5c164a..2d11997970d 100644
--- a/distribution/asf-release-process-guide.md
+++ b/distribution/asf-release-process-guide.md
@@ -17,46 +17,155 @@
   ~ under the License.
   -->
 
-## Getting Started
+## 🚀 Release Checklist
+
+- [ ] [Prior to starting, initial setup for release 
access](#prior-to-starting-initial-setup-for-release-access)
+  - [ ] [SVN access](#svn-access)
+  - [ ] [GPG key](#gpg-key)
+  - [ ] [Key propagation](#key-propagation)
+  - [ ] [Maven credentials](#maven-credentials)
+- [ ] [Announce intention to release](#announce-intention-to-release)
+- [ ] [Security vulnerabilities](#security-vulnerabilities)
+- [ ] [Create a release branch](#create-a-release-branch)
+  - [ ] [Preparing the release branch](#preparing-the-release-branch)
+  - [ ] [Preparing the master branch for the next version after 
branching](#preparing-the-master-branch-for-the-next-version-after-branching)
+  - [ ] [Backport PRs tagged with release 
milestone](#backport-prs-tagged-with-release-milestone)
+  - [ ] [Release branch hygiene](#release-branch-hygiene)
+- [ ] [LICENSE and NOTICE handling](#license-and-notice-handling)
+- [ ] [Release notes](#release-notes)
+- [ ] [Building a release candidate](#building-a-release-candidate)
+  - [ ] [Update the release branch to have all commits 
needed](#update-the-release-branch-to-have-all-commits-needed)
+  - [ ] [Set version and make a tag](#set-version-and-make-a-tag)
+  - [ ] [Do a clean clone (so the source distribution does not pick up extra 
files)](#do-a-clean-clone-so-the-source-distribution-does-not-pick-up-extra-files)
+  - [ ] [Switch to tag](#switch-to-tag)
+  - [ ] [Build Artifacts](#build-artifacts)
+  - [ ] [Verify checksums](#verify-checksums)
+  - [ ] [Verify GPG signatures](#verify-gpg-signatures)
+  - [ ] [Commit artifacts to SVN repo](#commit-artifacts-to-svn-repo)
+  - [ ] [Update druid.staged.apache.org](#update-druidstagedapacheorg)
+  - [ ] [Create staged Maven repo](#create-staged-maven-repo)
+  - [ ] [Release candidates and voting](#release-candidates-and-voting)
+    - [ ] [Druid PMC vote result](#druid-pmc-vote-result)
+- [Final Release](#final-release)
+  - [ ] [Create git tag](#create-git-tag)
+  - [ ] [Publish release artifacts to SVN](#publish-release-artifacts-to-svn)
+  - [ ] [Publish the staged Maven repo](#publish-the-staged-maven-repo)
+  - [ ] [Wait 24 hours then update 
druid.apache.org](#wait-24-hours-then-update-druidapacheorg)
+  - [ ] [Draft a release on github](#draft-a-release-on-github)
+  - [ ] [Announce the release](#announce-the-release)
+  - [ ] [Update Wikipedia](#update-wikipedia)
+  - [ ] [Remove old releases which are not 
'active'](#remove-old-releases-which-are-not-active)
+
+
+## Prior to starting, initial setup for release access
 
-### Announce intention to release
+### SVN access
+
+Make sure that you have Apache SVN access set up, as several steps in the 
release process will require you to make SVN commits.
+
+### GPG key
+
+First, make sure you've set up a GPG key according to ASF instructions: 
https://www.apache.org/dev/openpgp.html
+
+### Key propagation
+
+The Apache guide suggests using the MIT keyserver, but if there are 
availability issues consider using https://sks-keyservers.net/ or 
http://pgp.surfnet.nl/
+
+After your key has been propagated to public key servers, add your key 
fingerprint as your `OpenPGP Public Key Primary Fingerprint` at 
https://id.apache.org.
+
+The key fingerprint can be seen with `gpg --list-keys`, e.g.:
+
+```plaintext
+...
+pub   rsa4096 2019-02-28 [SC]
+      0495E031C35D132479C241EC9283C4921AC4483E
+uid           [ultimate] Jonathan Wei (CODE SIGNING KEY) <[email protected]>
+sub   rsa4096 2019-02-28 [E]
+...
+```
+
+`0495E031C35D132479C241EC9283C4921AC4483E` is the fingerprint in the example 
above.
+
+If all goes well, your Apache account will be associated with that key, which 
you can check at https://people.apache.org/committer-index.html
+
+You will also need to add your key to our project KEYS file: 
https://dist.apache.org/repos/dist/release/druid/KEYS, this repo can be pulled 
with:
+
+```bash
+$ svn co https://dist.apache.org/repos/dist/release/druid
+```
+
+Add your entry to the file and commit:
+
+```bash
+$ svn commit -m 'add key for [email protected]'
+```
+
+### Maven credentials
+
+You'll need to configure Maven with your Apache credentials by adding the 
following to `~/.m2/settings.xml`. Encrypt the password you store here, see 
https://maven.apache.org/guides/mini/guide-encryption.html for details.
+
+```xml
+<settings>
+ <servers>
+   <!-- To publish a snapshot of some part of Maven -->
+   <server>
+     <id>apache.snapshots.https</id>
+     <username>your-apache-username</username>
+     <password>{your-encrypted-password}</password>
+   </server>
+   <!-- To stage a release of some part of Maven -->
+   <server>
+     <id>apache.releases.https</id>
+     <username>your-apache-username</username>
+     <password>{your-encrypted-password}</password>
+   </server>
+ </servers>
+</settings>
+```
+
+## Announce intention to release
 
 First up in performing an official release of Apache Druid is to announce in 
the dev mailing list, [email protected], that it is about time for the next 
(approximately) quarterly release, or, that there is a critical bug that 
warrants doing a bug fix release, whatever the reason happens to be. Check for 
any critical bugs that are still open, or issues or PRs tagged with the release 
milestone, and give the community a bit of heads up to try and wrap up anything 
that _needs_ to be in th [...]
 
-### Create a release branch
+## Security vulnerabilities
+The release manager should also keep an eye-out for `Cron Job ITS` failures: 
https://github.com/apache/druid/actions/workflows/cron-job-its.yml. If there 
are security vulnerabilities, we need to fix them before creating an RC.
+
+## Create a release branch
 
 Next up is creating the release branch off of master (or the previous release 
branch for a bug fix release). Be sure to do this from the apache git repo, 
_not your fork_. Name the branch for the release version that is being created, 
omitting the `druid` prefix that will appear on the release candidate and 
release tags:
 
 ```bash
-$ git checkout origin/0.17.0
+$ git checkout origin/master
 ...
-$ git checkout -b 0.17.1
+$ git checkout -b 37.0.0
 ```
 
+For a hotfix or minor version release, branch off of the previous release 
branch instead:
+
 ```bash
-$ git checkout origin/master
+$ git checkout origin/37.0.0
 ...
-$ git checkout -b 0.17.0
+$ git checkout -b 37.0.1
 ```
 
-#### Preparing the release branch
+### Preparing the release branch
 Ensure that the web console and docker-compose file are in the correct state 
in the release branch.
 
 [package.json](../web-console/package.json) and 
[package-lock.json](../web-console/package-lock.json) should match the release 
version. If they do not, run:
 
 ```bash
-npm version 0.17.0
+npm version 37.0.0
 ```
 
 [unified-console.html](../web-console/unified-console.html), Javascript script 
tag must match the package.json version:
 
 ```html
-<script src="public/web-console-0.17.0.js"></script>
+<script src="public/web-console-37.0.0.js"></script>
 ```
 
 [`links.ts`](../web-console/src/links.ts) needs to be adjusted from `'latest'` 
to the release version:
 ```
-const DRUID_DOCS_VERSION = '0.17.0';
+const DRUID_DOCS_VERSION = '37.0.0';
 ```
 
 After this is done, run:
@@ -78,24 +187,24 @@ The sample 
[`docker-compose.yml`](https://github.com/apache/druid/blob/master/di
 ```yaml
 ...
   coordinator:
-    image: apache/druid:0.17.0
+    image: apache/druid:37.0.0
     container_name: coordinator
 ...
 ```
 
 Once everything is ready, then push the branch to `origin`. 
 
-#### Preparing the master branch for the next version after branching
+### Preparing the master branch for the next version after branching
 If doing a quarterly release, it will also be necessary to prepare master for 
the release _after_ the release you are working on, by setting the version to 
the next release snapshot:
 
 ```bash
-$ mvn versions:set -DnewVersion=0.18.0-SNAPSHOT
+$ mvn versions:set -DnewVersion=38.0.0-SNAPSHOT
 ```
 
 You should also prepare the web-console for the next release, by bumping the 
[package.json](../web-console/package.json) and 
[package-lock.json](../web-console/package-lock.json) version:
 
 ```bash
-npm version 0.18.0
+npm version 38.0.0
 ```
 
 which will update `package.json` and `package-lock.json`.
@@ -103,7 +212,7 @@ which will update `package.json` and `package-lock.json`.
 You will also need to manually update the top level html file, 
[unified-console.html](../web-console/unified-console.html), to ensure that the 
Javascript script tag is set to match the package.json version:
 
 ```html
-<script src="public/web-console-0.18.0.js"></script>
+<script src="public/web-console-38.0.0.js"></script>
 ```
 
 [`DRUID_DOCS_VERSION` in `links.ts`](../web-console/src/links.ts) should 
already be set to `'latest'` in the master branch, and so should not have to be 
adjusted.
@@ -113,106 +222,41 @@ The sample 
[`docker-compose.yml`](https://github.com/apache/druid/blob/master/di
 ```yaml
 ...
   coordinator:
-    image: apache/druid:0.18.0
+    image: apache/druid:38.0.0
     container_name: coordinator
 ...
 ```
 
 Once this is completed, open a PR to the master branch. Also, be sure to 
confirm that these versions are all correct in the release branch, otherwise 
fix them and open a backport PR to the release branch.
+You must finish this step right after the branch cut, this affects 
[auto-add-milestone](../.github/scripts/auto-add-milestone.sh) github action.
 
-#### Updating redirect links in the docs
-
-For docs, please make sure to add any relevant redirects in 
`website/redirects.json`. This has to be done before building the new website. 
-
+### Backport PRs tagged with release milestone
+If a PR is merged into the master branch after the release branch is created 
and tagged with the release version, then the commit must be backported to the 
release branch. Following tools can be helpful:
+- [tag-missing-milestones](bin/tag-missing-milestones.py)
+- [find-missing-backports](bin/find-missing-backports.py)
 
 ### Release branch hygiene
 
 The only additions to the release branch after branching should be bug fixes, 
which should be back-ported from the master branch, via a second PR or a 
cherry-pick, not with a direct PR to the release branch.  
 
 Release manager must also ensure that CI is passing successfully on the 
release branch. Since CI on branch can contain additional tests such as ITs for 
different JVM flavours. (Note that CI is sometimes flaky for older branches).
-To check the CI status on a release branch, you can go to the commits page 
e.g. https://github.com/apache/druid/commits/24.0.0. On this page, latest 
commit should show
+To check the CI status on a release branch, you can go to the commits page 
e.g. https://github.com/apache/druid/commits/37.0.0. On this page, latest 
commit should show
 a green &#10004; in the commit description. If the commit has a failed build, 
please click on red &#10005; icon in the commit description to go to travis 
build job and investigate. 
 You can restart a failed build via travis if it is flaky. 
 
-The release manager should also keep an eye-out for `Cron Job Unit Tests` 
failures: 
https://github.com/apache/druid/actions/workflows/cron-job-unit-tests.yml. If 
there are failures, we need to fix them before creating an RC.
+Make sure [Cron Job 
ITS](https://github.com/apache/druid/actions/workflows/cron-job-its.yml) passes.
 
 Once all issues and PRs that are still tagged with the release milestone have 
been merged, closed, or removed from the milestone and CI on branch is green, 
the next step is to put together a release candidate.
 
-## Initial setup to create a release candidate
-
-### SVN access
-
-Make sure that you have Apache SVN access set up, as several steps in the 
release process will require you to make SVN commits.
-
-### GPG key
-
-First, make sure you've set up a GPG key according to ASF instructions: 
https://www.apache.org/dev/openpgp.html
-
-### Key propagation
-
-The Apache guide suggests using the MIT keyserver, but if there are 
availability issues consider using https://sks-keyservers.net/ or 
http://pgp.surfnet.nl/
-
-After your key has been propagated to public key servers, add your key 
fingerprint as your `OpenPGP Public Key Primary Fingerprint` at 
https://id.apache.org.
-
-The key fingerprint can be seen with `gpg --list-keys`, e.g.:
-
-```plaintext
-...
-pub   rsa4096 2019-02-28 [SC]
-      0495E031C35D132479C241EC9283C4921AC4483E
-uid           [ultimate] Jonathan Wei (CODE SIGNING KEY) <[email protected]>
-sub   rsa4096 2019-02-28 [E]
-...
-```
-
-`0495E031C35D132479C241EC9283C4921AC4483E` is the fingerprint in the example 
above.
-
-If all goes well, your Apache account will be associated with that key, which 
you can check at https://people.apache.org/committer-index.html
-
-You will also need to add your key to our project KEYS file: 
https://dist.apache.org/repos/dist/release/druid/KEYS, this repo can be pulled 
with:
-
-```bash
-$ svn co https://dist.apache.org/repos/dist/release/druid
-```
-
-Add your entry to the file and commit:
-
-```bash
-$ svn commit -m 'add key for [email protected]'
-```
-
-### Maven credentials
-
-You'll need to configure Maven with your Apache credentials by adding the 
following to `~/.m2/settings.xml`. Encrypt the password you store here, see 
https://maven.apache.org/guides/mini/guide-encryption.html for details.
-
-```xml
-<settings>
- <servers>
-   <!-- To publish a snapshot of some part of Maven -->
-   <server>
-     <id>apache.snapshots.https</id>
-     <username>your-apache-username</username>
-     <password>{your-encrypted-password}</password>
-   </server>
-   <!-- To stage a release of some part of Maven -->
-   <server>
-     <id>apache.releases.https</id>
-     <username>your-apache-username</username>
-     <password>{your-encrypted-password}</password>
-   </server>
- </servers>
-</settings>
-```
-
 ## LICENSE and NOTICE handling
 
-Before cutting a release candidate, the release manager should ensure that the 
contents of our `LICENSE` and `NOTICE` files are up-to-date. You should 
specifically check that copyright YEAR is updated in the `NOTICE` file. 
+The license check has been handle by CI. This section is for informational 
purposes only in most cases. However, if this is the first release of the year, 
you should ensure that copyright `YEAR` in the `NOTICE` file has been updated. 
 
 The following links are helpful for understanding Apache's third-party 
licensing policies:
 
-http://www.apache.org/dev/licensing-howto.html
-http://www.apache.org/legal/src-headers.html
-http://www.apache.org/legal/resolved.html
+- http://www.apache.org/dev/licensing-howto.html
+- http://www.apache.org/legal/src-headers.html
+- http://www.apache.org/legal/resolved.html
 
 
 There are in effect 2 versions of the `LICENSE` and `NOTICE` file needed to 
perform a release, one set for the official ASF source release which are the 
actual `LICENSE` and `NOTICE` file in the root directory, and second for the 
convenience binary release which includes all of Druid's dependencies which we 
synthesize using some tools we have developed over the initial set of releases.
@@ -281,10 +325,10 @@ The 
[make-linkable-release-notes](bin/make-linkable-release-notes.py) script can
 The release branch should have all commits merged before you create a tag. A 
commit must be in the release branch if
 
 1) it is merged into the master branch before the release branch is created. 
In this case, the PR corresponding
-to the commit might not have the milestone tagged. The 
`tag-missing-milestones` script can be useful to find such PRs and
+to the commit might not have the milestone tagged. The 
[tag-missing-milestones](bin/tag-missing-milestones.py) script can be useful to 
find such PRs and
 tag them properly. See the above [Release notes](#release-notes) section for 
more details about the script.
 2) it is merged into the master branch after the release branch is created and 
tagged with the release version.
-In this case, the commit must be backported to the release branch. The 
`find-missing-backports` script can be used to
+In this case, the commit must be backported to the release branch. The 
[find-missing-backports](bin/find-missing-backports.py) script can be used to
 find such commits that have not been backported. Note that this script relies 
on the milestone tagged in the PR, so PRs
 must be tagged properly to make this script working. See the above [Release 
notes](#release-notes) section for more details about the script.
 
@@ -293,10 +337,11 @@ must be tagged properly to make this script working. See 
the above [Release note
 Once the release branch is good for an RC, you can build a new tag with:
 
 ```bash
-$ mvn -Pwebsite-docs -DreleaseVersion=0.17.0 
-DdevelopmentVersion=0.18.0-SNAPSHOT -Dtag=druid-0.17.0-rc3 -DpushChanges=false 
-DskipTests -Darguments=-DskipTests clean release:clean release:prepare
+$ mvn -Pwebsite-docs -DreleaseVersion=37.0.0 
-DdevelopmentVersion=38.0.0-SNAPSHOT -Dtag=druid-37.0.0-rc1 -DpushChanges=false 
-DskipTests -Darguments=-DskipTests clean release:clean release:prepare
+$ git push origin tag druid-37.0.0-rc1
 ```
 
-In this example it will create a tag, `druid-0.17.0-rc3`. If this release 
passes vote then we can add the final `druid-0.17.0` release tag later. 
+In this example it will create a tag, `druid-37.0.0-rc1`. If this release 
passes vote then we can add the final `druid-37.0.0` release tag later. 
 We added `website-docs` profile, because otherwise, website module is not 
updated with rc version. 
 
 
@@ -311,7 +356,7 @@ $ git clone [email protected]:apache/druid.git druid-release
 ### Switch to tag
 
 ```bash
-$ git checkout druid-0.17.0-rc3
+$ cd druid-release && git checkout druid-37.0.0-rc1
 ```
 
 ### Build Artifacts
@@ -323,12 +368,12 @@ $ mvn clean install -Papache-release,dist,rat -DskipTests 
-Dgpg.keyname=<your GP
 This should produce the following artifacts:
 
 ```plaintext
-apache-druid-0.17.0-bin.tar.gz
-apache-druid-0.17.0-bin.tar.gz.asc
-apache-druid-0.17.0-bin.tar.gz.sha512
-apache-druid-0.17.0-src.tar.gz
-apache-druid-0.17.0-src.tar.gz.asc
-apache-druid-0.17.0-src.tar.gz.sha512
+apache-druid-37.0.0-bin.tar.gz
+apache-druid-37.0.0-bin.tar.gz.asc
+apache-druid-37.0.0-bin.tar.gz.sha512
+apache-druid-37.0.0-src.tar.gz
+apache-druid-37.0.0-src.tar.gz.asc
+apache-druid-37.0.0-src.tar.gz.sha512
 ```
 
 Ensure that the GPG key fingerprint used in the `mvn install` command matches 
your release signing key in 
https://dist.apache.org/repos/dist/release/druid/KEYS.                          
                                                                     
@@ -336,18 +381,18 @@ Ensure that the GPG key fingerprint used in the `mvn 
install` command matches yo
 ### Verify checksums
 
 ```bash
-$ diff <(shasum -a512 apache-druid-0.17.0-bin.tar.gz | cut -d ' ' -f1) <(cat 
apache-druid-0.17.0-bin.tar.gz.sha512 ; echo)
+$ diff <(shasum -a512 apache-druid-37.0.0-bin.tar.gz | cut -d ' ' -f1) <(cat 
apache-druid-37.0.0-bin.tar.gz.sha512 ; echo)
 ...
-$ diff <(shasum -a512 apache-druid-0.17.0-src.tar.gz | cut -d ' ' -f1) <(cat 
apache-druid-0.17.0-src.tar.gz.sha512 ; echo)
+$ diff <(shasum -a512 apache-druid-37.0.0-src.tar.gz | cut -d ' ' -f1) <(cat 
apache-druid-37.0.0-src.tar.gz.sha512 ; echo)
 ...
 ```
 
 ### Verify GPG signatures
 
 ```bash
-$ gpg --verify apache-druid-0.17.0-bin.tar.gz.asc 
apache-druid-0.17.0-bin.tar.gz
+$ gpg --verify apache-druid-37.0.0-bin.tar.gz.asc 
apache-druid-37.0.0-bin.tar.gz
 ...
-$ gpg --verify apache-druid-0.17.0-src.tar.gz.asc 
apache-druid-0.17.0-src.tar.gz
+$ gpg --verify apache-druid-37.0.0-src.tar.gz.asc 
apache-druid-37.0.0-src.tar.gz
 ...
 ```
 
@@ -362,15 +407,17 @@ $ svn checkout 
https://dist.apache.org/repos/dist/dev/druid
 Copy the `src` and `bin` artifacts to a folder for the release version and add 
it to SVN and publish the artifacts:
 
 ```bash
-$ svn add 0.17.0-rc3
+$ mkdir 37.0.0-rc1
+$ cp ../druid-release/distribution/target/apache* ./37.0.0-rc1/.
+$ svn add 37.0.0-rc1
 ...
-$ svn commit -m 'add 0.17.0-rc3 artifacts'
+$ svn commit -m 'add 37.0.0-rc1 artifacts'
 ```
 
 > The commit might fail with the following message if the tarball exceeds 
 > 450MB in size (the current limit on the size of a single commit). If this 
 > happens, ensure that the tar does not include any superfluous dependencies. 
 > If the size is still not within 450MB, raise a ticket with asfinfra to 
 > increase the limit.
 > ```
-> $ svn commit -m 'add 0.17.0-rc3 artifacts'
-> Adding  (bin)  apache-druid-25.0.0-bin.tar.gz
+> $ svn commit -m 'add 37.0.0-rc1 artifacts'
+> Adding  (bin)  apache-druid-37.0.0-bin.tar.gz
 > Transmitting file data .svn: E175002: Commit failed (details follow):
 > svn: E175002: PUT request on 
 > '/repos/dist/!svn/txr/58803-1dhj/dev/druid/25.0.0-rc1/apache-druid-25.0.0-bin.tar.gz'
 >  failed
 > ```
@@ -379,7 +426,7 @@ $ svn commit -m 'add 0.17.0-rc3 artifacts'
 
 > Before you start, you need the following: Python 3.11 (or later) and Node 
 > 16.14 (or later).
 
-This repo (`druid`) is the source of truth for the Markdown files. The 
Markdown files get copied to `druid-website-src` and built there as part of the 
release process. It's all handled by a script in that repo  called 
`do_all_things`.
+This repo (`druid-release`) is the source of truth for the Markdown files. The 
Markdown files get copied to `druid-website-src` and built there as part of the 
release process. It's all handled by a script in that repo  called 
`do_all_things`.
 
 For more thorough instructions and a description of what the `do_all_things` 
script does, see the [`druid-website-src` 
README](https://github.com/apache/druid-website-src)
 
@@ -387,7 +434,7 @@ For more thorough instructions and a description of what 
the `do_all_things` scr
 
 2. From `druid-website`, checkout a staging branch based off of the 
`asf-staging` branch.
 
-3. From `druid-website-src`, create a release branch from `master`, such as 
`27.0.0-staging`.
+3. From `druid-website-src`, create a release branch from `master`, such as 
`37.0.0-staging`.
    1. Update the version list in `static/js/version.js` with the version 
you're releasing. The highest release version goes in position 0. Make sure to 
remove older releases. We only keep the 3 most recent listed in the file. If 
this is a patch release, replace the prior release of that version. For 
example, replace `27.0.0` with `27.0.1`. Don't add a new entry. 
    2. In this file, also update the release date. This is a placeholder date 
since the final date isn't decided until voting completes. You'll need to 
update it again before doing the production steps.
    3. In `scripts`, run: 
@@ -396,20 +443,22 @@ For more thorough instructions and a description of what 
the `do_all_things` scr
    # Include `--skip-install` if you already have Docusaurus 2 installed in 
druid-website-src. 
    # The script assumes you use `npm`. If you use `yarn`, include `--yarn`.
 
-   python do_all_things.py -v VERSION --source /my/path/to/apache/druid
+   python do_all_things.py -v VERSION --source /my/path/to/apache/druid-release
    ```
    
 
 4. Make a PR to the src repo (https://github.com/apache/druid-website-src) for 
the release branch. In the changed files, you should see the following:
-  - In `published_versions` directory: HTML files for `docs/VERSION` , 
`docs/latest`, and assorted HTML and non-HTML files 
+  - In `build` directory: HTML files for `docs/VERSION` , `docs/latest`, and 
assorted HTML and non-HTML files 
   - In the `docs` directory at the root of the repo, the new Markdown files.
     
     All these files should be part of your PR to `druid-website-src`.  
-    Verify the site looks fine and that the versions on the homepage and 
Downloads page look correct. You can run `http-server` or something similar in 
`published_versions`.
+    Verify the site looks fine and that the versions on the homepage and 
Downloads page look correct. You can run `http-server` or something similar in 
`build`.
   - The PR to `druid-website-src` should not be merged. Leave it in draft for 
reference. It can be closed when you're ready to push to production. 
    
 
-5. Make a PR to the website repo (https://github.com/apache/druid-website) for 
the `asf-staging` branch using the contents of `published_versions` in 
`druid-website-src`. Once the website PR is pushed to `asf-staging`, 
https://druid.staged.apache.org/ will be updated near immediately with the new 
docs.
+5. Make a PR to the website repo (https://github.com/apache/druid-website) for 
the `asf-staging` branch using the contents of `build` in `druid-website-src`. 
+   - From `druid-website`, run `rsync -av ../druid-website-src/build/* .`, 
this overwrites assets/docs and doesn't delete docs from previous versions.
+   - Once the website PR is pushed to `asf-staging`, 
https://druid.staged.apache.org/ will be updated near immediately with the new 
docs.
 
 ### Create staged Maven repo
 
@@ -435,7 +484,7 @@ provider inserts linebreaks beyond a certain length.
 ##### Subject
 
 ```plaintext
-[VOTE] Release Apache Druid 0.17.0 [RC3]
+[VOTE] Release Apache Druid 37.0.0 [RC2]
 ```
 
 ##### Body
@@ -443,81 +492,67 @@ provider inserts linebreaks beyond a certain length.
 ```plaintext
 Hi all,
 
-I have created a build for Apache Druid 0.17.0, release
-candidate 3.
+I have created a build for Apache Druid 37.0.0, release candidate 2.
 
-Thanks for everyone who has helped contribute to the release! You can read
-the proposed release notes here:
-https://github.com/apache/druid/issues/9066
+Thanks to everyone who has helped contribute to the release! You can read the 
proposed release notes here:
+https://github.com/apache/druid/issues/19287
 
-The release candidate has been tagged in GitHub as
-druid-0.17.0-rc3 (54d29e438a4df34d75e2385af6cefd1092c4ebb3),
-available here:
-https://github.com/apache/druid/releases/tag/druid-0.17.0-rc3
+The release candidate has been tagged in GitHub as druid-37.0.0-rc2 
(b206640c830bc2c3bdc2867cfb317c902a0e1acb), 
+available here: https://github.com/apache/druid/releases/tag/druid-37.0.0-rc2
 
 The artifacts to be voted on are located here:
-https://dist.apache.org/repos/dist/dev/druid/0.17.0-rc3/
+https://dist.apache.org/repos/dist/dev/druid/37.0.0-rc2/
 
 A staged Maven repository is available for review at:
-https://repository.apache.org/content/repositories/orgapachedruid-1016/
+https://repository.apache.org/content/repositories/orgapachedruid-1098/
 
 Staged druid.apache.org website documentation is available here:
-https://druid.staged.apache.org/docs/0.17.0/design/index.html
+https://druid.staged.apache.org/docs/37.0.0/design/index.html
 
-A Docker image containing the binary of the release candidate can be
-retrieved via:
-docker pull apache/druid:0.17.0-rc3
+A Docker image containing the binary of the release candidate can be retrieved 
via:
+docker pull apache/druid:37.0.0-rc2
 
 artifact checksums
 src:
-1f25c55e83069cf7071a97c1e0d56732437dbac4ef373ed1ed72b5b618021b74c107269642226e80081354c8da2e92dc26f1541b01072a4720fd6cfe8dc161a8
+f0ba5dbd3897b61d8956b5e9d1075d3f1681ff6905db505ac674c8f5b5bc899876cc3fee52b1799323a4fff8282d61d693dfef15d037cab656945952c2abefa2
 bin:
-0c4b71f077e28d2f4d3bc3f072543374570b98ec6a1918a5e1828e1da7e3871b5efb04070a8bcdbc172a817e43254640ce28a99757984be7d8dd3d607f1d870e
-docker: df9b900d3726ce123a5c054768da1ea08eba6efe635ced5abc3ad72d6c835e2c
+ba2f23755676a057df93e6ceb5cc9d158d1b0c8f693a9b189d7048c57aea161773b039076bfeb5d2eb1bc1cd318d8f80a5030bcb6ab7deaf30ba8b019cfb57be
+docker:
+15be98e21ac7c63cab1a60d26a0499c362173970e38046ae73624e01ae387641
 
 Release artifacts are signed with the following key:
-https://people.apache.org/keys/committer/cwylie.asc
+https://people.apache.org/keys/committer/yqm.asc
 
-This key and the key of other committers can also be found in the project's
-KEYS file here:
+This key and the key of other committers can also be found in the project's 
KEYS file here:
 https://dist.apache.org/repos/dist/release/druid/KEYS
 
-(If you are a committer, please feel free to add your own key to that file
-by following the instructions in the file's header.)
-
+(If you are a committer, please feel free to add your own key to that file by 
following the instructions in the file's header.)
 
 Verify checksums:
-diff <(shasum -a512 apache-druid-0.17.0-src.tar.gz | \
-cut -d ' ' -f1) \
-<(cat apache-druid-0.17.0-src.tar.gz.sha512 ; echo)
+diff <(shasum -a512 apache-druid-37.0.0-src.tar.gz | cut -d ' ' -f1) \
+<(cat apache-druid-37.0.0-src.tar.gz.sha512 ; echo)
 
-diff <(shasum -a512 apache-druid-0.17.0-bin.tar.gz | \
-cut -d ' ' -f1) \
-<(cat apache-druid-0.17.0-bin.tar.gz.sha512 ; echo)
+diff <(shasum -a512 apache-druid-37.0.0-bin.tar.gz | cut -d ' ' -f1) \
+<(cat apache-druid-37.0.0-bin.tar.gz.sha512 ; echo)
 
 Verify signatures:
-gpg --verify apache-druid-0.17.0-src.tar.gz.asc \
-apache-druid-0.17.0-src.tar.gz
+gpg --verify apache-druid-37.0.0-src.tar.gz.asc apache-druid-37.0.0-src.tar.gz
 
-gpg --verify apache-druid-0.17.0-bin.tar.gz.asc \
-apache-druid-0.17.0-bin.tar.gz
+gpg --verify apache-druid-37.0.0-bin.tar.gz.asc apache-druid-37.0.0-bin.tar.gz
 
-Please review the proposed artifacts and vote. Note that Apache has
-specific requirements that must be met before +1 binding votes can be cast
-by PMC members. Please refer to the policy at
-http://www.apache.org/legal/release-policy.html#policy for more details.
+Please review the proposed artifacts and vote. 
+Note that Apache has specific requirements that must be met before +1 binding 
votes can be cast by PMC members. 
+Please refer to the policy at 
https://www.apache.org/legal/release-policy.html#policy for more details.
 
-As part of the validation process, the release artifacts can be generated
-from source by running:
+As part of the validation process, the release artifacts can be generated from 
source by running:
 mvn clean install -Papache-release,dist -Dgpg.skip
 
 The RAT license check can be run from source by:
 mvn apache-rat:check -Prat
 
-This vote will be open for at least 72 hours. The vote will pass if a
-majority of at least three +1 PMC votes are cast.
+This vote will be open for at least 72 hours. The vote will pass if a majority 
of at least three +1 PMC votes are cast.
 
-[ ] +1 Release this package as Apache Druid 0.17.0
+[ ] +1 Release this package as Apache Druid 37.0.0
 [ ] 0 I don't feel strongly about it, but I'm okay with the release
 [ ] -1 Do not release this package because...
 
@@ -559,7 +594,7 @@ Once the Druid community vote passes (or fails), close the 
vote with a thread li
 ##### Subject
 
 ```plaintext
-[RESULT][VOTE] Release Apache Druid 0.17.0 [RC3]
+[RESULT][VOTE] Release Apache Druid 37.0.0 [RC2]
 ```
 
 ##### Body
@@ -567,19 +602,17 @@ Once the Druid community vote passes (or fails), close 
the vote with a thread li
 ```plaintext
 Thanks to everyone who participated in the vote! The results are as follows:
 
-Clint Wylie: +1 (non-binding)
-Jihoon Son: +1 (binding)
-Furkan KAMACI: +1 (non-binding)
-Julian Hyde: +1 (binding)
-David Lim: +1 (binding)
-Surekha Saharan: +1 (non-binding)
+Lucas Capistrant: +1 (binding)
+Clint Wylie: +1 (binding)
+Cece Mei: +1 (binding)
 
+The vote has passed with 3 binding +1 votes!
 ...
 ```
 
 ### Cancelling a vote
 
-If for any reason during the Druid PMC vote a blocking issue becomes apparent, 
a vote should be officially cancelled by sending an email with the following 
subject line: `[CANCEL][VOTE] Release Apache Druid 0.17.0 [RC3]` and the 
reasons for the cancellation in the body.
+If for any reason during the Druid PMC vote a blocking issue becomes apparent, 
a vote should be officially cancelled by sending an email with the following 
subject line: `[CANCEL][VOTE] Release Apache Druid 37.0.0 [RC2]` and the 
reasons for the cancellation in the body.
 
 ### Previous vote threads for additional examples
 
@@ -601,9 +634,9 @@ Once a release candidate has passed the Druid PMC vote, 
you'll need to do the fo
 Tag the rc that passed vote as the release tag and push to github.
 
 ```bash
-$ git checkout druid-0.17.0-rc3
-$ git tag druid-0.17.0
-$ git push origin tag druid-0.17.0
+$ git checkout druid-37.0.0-rc2
+$ git tag druid-37.0.0
+$ git push origin tag druid-37.0.0
 ```
 
 ### Publish release artifacts to SVN
@@ -613,27 +646,24 @@ The final release artifacts are kept in the 
`https://dist.apache.org/repos/dist/
 Use `svn mv` to publish the release artifacts as below:
 
 ```bash
-$ svn mv https://dist.apache.org/repos/dist/dev/druid/0.17.0-rc3 
https://dist.apache.org/repos/dist/release/druid/0.17.0 -m 'add 0.17.0 
artifacts'
+$ svn mv https://dist.apache.org/repos/dist/dev/druid/37.0.0-rc2 
https://dist.apache.org/repos/dist/release/druid/37.0.0 -m 'add 37.0.0 
artifacts'
 ```
 
 Replace the versions of the release candidate and the release with the ones 
you are currently working on. This command will drop those artifacts from the 
dev repo but add them to the release repo.
-Once the `svn mv` command succeeds, you should be able to see the release 
artifacts in `https://dist.apache.org/repos/dist/release/druid/0.17.0`.
+Once the `svn mv` command succeeds, you should be able to see the release 
artifacts in `https://dist.apache.org/repos/dist/release/druid/37.0.0`.
 
 ### Publish the staged Maven repo
-Returning to the staged repo you created for the Druid PMC vote ( 
https://repository.apache.org/#stagingRepositories), "Release" the repo to 
publish the Maven artifacts.
+Returning to the staged repo you created for the Druid PMC vote 
(https://repository.apache.org/#stagingRepositories), "Release" the repo to 
publish the Maven artifacts.
 
 
https://central.sonatype.org/pages/releasing-the-deployment.html#close-and-drop-or-release-your-staging-repository
 
 
-### Wait 24 hours
+### Wait 24 hours then update druid.apache.org
 
 Apache policy requires projects to wait at least 24 hours after uploading 
artifacts before announcing a release, to allow time for the release artifacts 
to propagate across mirrors.
 
 http://www.apache.org/legal/release-policy.html#release-announcements
 
-
-### Update druid.apache.org
-
 > Before you start, you need the following: Python 3.11 (or later) and Node 
 > 16.14 (or later).
 
 This repo (`druid`) is the source of truth for the Markdown files. The 
Markdown files get copied to `druid-website-src` and built there as part of the 
release process. It's all handled by a script in that repo  called 
`do_all_things`.
@@ -661,15 +691,17 @@ For more thorough instructions and a description of what 
the `do_all_things` scr
    
 
 5. Add the files to a PR to the src repo 
(https://github.com/apache/druid-website-src) for the release branch you just 
created. In the changed files, you should see the following:
-  - In `published_versions` directory: HTML files for `docs/VERSION` , 
`docs/latest`, and assorted HTML and non-HTML files. 
+  - In `build` directory: HTML files for `docs/VERSION` , `docs/latest`, and 
assorted HTML and non-HTML files. 
   - In the `docs` directory at the root of the repo, the new Markdown files.
     
     All these files should be part of your PR to `druid-website-src`.  
-    Verify the site looks fine and that the versions on the homepage and 
Downloads page look correct. You can run `http-server` or something similar in 
`published_versions`.
+    Verify the site looks fine and that the versions on the homepage and 
Downloads page look correct. You can run `http-server` or something similar in 
`build`.
 
-6. Make a PR to the website repo (https://github.com/apache/druid-website) for 
the `asf-site` branch using the contents of `published_versions` in 
`druid-website-src`. Once the website PR is pushed to `asf-site`, 
https://druid.apache.org/ will be updated near immediately with the new docs.
+6. Make a PR to the website repo (https://github.com/apache/druid-website) for 
the `asf-site` branch using the contents of `build` in `druid-website-src`. 
+  - From `druid-website`, run `rsync -av ../druid-website-src/build/* .`, this 
overwrites assets/docs and doesn't delete docs from previous versions.
+  - Once the website PR is pushed to `asf-site`, https://druid.apache.org/ 
will be updated near immediately with the new docs.
 
-7. When the site is published, the release PR to `druid-website-src` can also 
be merged. `asf-site` in `druid-website` and `published_versions` on the 
`master` branch in `druid-website-src` should align.
+7. When the site is published, the release PR to `druid-website-src` can also 
be merged. `asf-site` in `druid-website` and `build` on the `master` branch in 
`druid-website-src` should align.
 
 ### Draft a release on github
 
@@ -684,32 +716,39 @@ Additionally, announce it to the Druid official ASF Slack 
channel, https://druid
 ##### Subject
 
 ```plaintext
-[ANNOUNCE] Apache Druid 0.17.0 release
+[ANNOUNCE] Apache Druid 37.0.0 release
 ```
 
 ##### Body
 
 ```plaintext
-The Apache Druid team is proud to announce the release of Apache Druid 0.17.0. 
+The Apache Druid team is proud to announce the release of Apache Druid 37.0.0. 
 Druid is a high performance analytics data store for event-driven data.
 
-Apache Druid 0.17.0 contains over 350 new features, performance
-enhancements, bug fixes, and major documentation improvements from 50
+Apache Druid 37.0.0 contains over 255 new features, performance
+enhancements, bug fixes, and major documentation improvements from 29
 contributors. Major new features and improvements include:
 
-- 'Vectorized' query processing
-- 'Minor' compaction
-- Native parallel indexing with shuffle
-- New 'indexer' process
-- Huge improvements to the web console
-- New documentation website
-- Official Docker image
+- Removed hadoop-based ingestion
+- Dynamic query blocklist
+- Dynamic default query context on Broker
+- Broker tier selection for real-time servers
+- Manual Broker routing in the web console
+- Minor compaction to compact only fragmented segments for Overlord-based 
compaction
+- Fingerprinting mechanism to track compaction states for Overlord-based 
compaction
+- Cascading reindexing to apply different compaction configurations based on 
the age of your data
+- Read-only authorizer
+- Thrift input format
+- sys.queries table for Dart engine
+- New Consul contrib extension for service discovery and Coordinator/Overlord 
leader election
+
+Also, Auto-compaction using compaction supervisors, Multi-supervisor 
ingestion, Incremental cache, Kubernetes-based task management are now 
generally available!
 
 Source and binary distributions can be downloaded from:
 https://druid.apache.org/downloads.html
 
 Release notes are at:
-https://github.com/apache/druid/releases/tag/druid-0.17.0
+https://github.com/apache/druid/releases/tag/druid-37.0.0
 
 A big thank you to all the contributors in this milestone release!
 ```
diff --git a/distribution/bin/find-missing-backports.py 
b/distribution/bin/find-missing-backports.py
index e412527d00f..e273c61ef5e 100755
--- a/distribution/bin/find-missing-backports.py
+++ b/distribution/bin/find-missing-backports.py
@@ -35,6 +35,8 @@ def extract_pr_title_from_commit_message(commit_msg):
 
 def extract_pr_numbers_from_commit_message(commit_msg):
     extracted_numbers = re.findall(pr_number_pattern, commit_msg)
+    if len(extracted_numbers) == 0:
+      print("No pr number found from commit: {}".format(commit_msg))
     return extracted_numbers
 
 def find_missing_backports(pr_jsons, release_pr_subjects, release_pr_numbers):
@@ -57,7 +59,7 @@ def find_next_url(links):
         if link.find("rel=\"next\"") >= 0:
             match_result = re.match("<https.*>", link)
             if match_result is None:
-                raise Exception("Next link[{}] is found but can't find 
url".format(link))
+                raise Exception("❌ Next link[{}] is found but can't find 
url".format(link))
             else:
                 url_holder = match_result.group(0)
                 return url_holder[1:-1]
@@ -84,7 +86,7 @@ command = "git log {}..{} --oneline | tail 
-1".format(master_branch, previous_br
 previous_branch_first_commit = subprocess.check_output(command, 
shell=True).decode('UTF-8')
 match_result = re.match("(\w+) .*", previous_branch_first_commit)
 if match_result is None:
-    raise Exception("Can't find the first commit of the previous release.")
+    raise Exception("❌ Can't find the first commit of the previous release.")
 previous_branch_first_commit = match_result.group(1)
 
 print("Previous branch: {}, first commit: {}".format(previous_branch, 
previous_branch_first_commit))
@@ -110,14 +112,14 @@ while True:
   pr_url = 
"https://api.github.com/search/issues?per_page=50&page={}&q=milestone:{}+type:pr+is:merged+is:closed+repo:apache/druid".format(page,milestone_title)
   pr_resp = requests.get(pr_url, auth=(github_username, 
os.environ["GIT_TOKEN"])).json()
   if pr_resp['incomplete_results']:
-    sys.stderr.write('This script cannot handle incomplete results')
+    sys.stderr.write('❌ This script cannot handle incomplete results')
     sys.exit(1)
   pr_items.extend(pr_resp['items'])
   if len(pr_resp['items']) < 50:
     print("Total PRs for current milestone: {}".format(len(pr_items)))
     print("Total expected count: {}".format(pr_resp['total_count']))
     if pr_resp['total_count'] != len(pr_items):
-      sys.stderr.write('Expected PR count does not match with number of PRs 
fetched')
+      sys.stderr.write('❌ Expected PR count does not match with number of PRs 
fetched')
       sys.exit(1)
     break
 find_missing_backports(pr_items, release_pr_subjects, release_pr_numbers)
diff --git a/distribution/bin/get-milestone-prs.py 
b/distribution/bin/get-milestone-prs.py
index 9d541ec3ea8..8e058de9660 100755
--- a/distribution/bin/get-milestone-prs.py
+++ b/distribution/bin/get-milestone-prs.py
@@ -61,19 +61,19 @@ for commit_id in all_release_commits.splitlines():
         resp_json = resp.json()
 
         milestone_found = False
-        closed_pr_nums = []
+        closed_prs = []
         if (resp_json.get("items") is None):
             print("Could not get PRs for commit ID {}, resp: 
{}".format(commit_id, resp_json))
             continue
 
         for pr in resp_json["items"]:
-            closed_pr_nums.append(pr["number"])
+            closed_prs.append(pr["html_url"])
             milestone = pr["milestone"]
             if milestone is not None:
                 milestone_found = True
-                print("COMMIT: {},  PR#: {},  MILESTONE: {}".format(commit_id, 
pr["number"], pr["milestone"]["url"]))
+                print("COMMIT: {},  PR#: {},  MILESTONE: {}".format(commit_id, 
pr["html_url"], pr["milestone"]["url"]))
         if not milestone_found:
-            print("NO MILESTONE FOUND FOR COMMIT: {}, CLOSED PRs: 
{}".format(commit_id, closed_pr_nums))
+            print("NO MILESTONE FOUND FOR COMMIT: {}, CLOSED PRs: 
{}".format(commit_id, closed_prs))
 
     except Exception as e:
         print("Got exception for commitID: {}  ex: {}".format(commit_id, e))
diff --git a/distribution/bin/tag-missing-milestones.py 
b/distribution/bin/tag-missing-milestones.py
index cf41afd63b6..8b9e420c02d 100755
--- a/distribution/bin/tag-missing-milestones.py
+++ b/distribution/bin/tag-missing-milestones.py
@@ -25,6 +25,7 @@ if len(sys.argv) != 5:
   sys.stderr.write("  e.g., program myusername 75c70c2ccc 29f3a328da 30\n")
   sys.stderr.write("  e.g., The milestone number for Druid 30 is 56, since the 
milestone has the url https://github.com/apache/druid/milestone/56\n";)
   sys.stderr.write("  It is also necessary to set a GIT_TOKEN environment 
variable containing a personal access token.\n")
+  sys.stderr.write("  Set the APPLY_TAGS environment variable to 'false' to 
preview changes without actually tagging any pull requests (defaults to 
'true').\n")
   sys.exit(1)
 
 expected_apache_html_url_prefix = "https://github.com/apache/druid/pull/";
@@ -53,12 +54,19 @@ for sha in all_commits.splitlines():
         continue
       if pr['milestone'] is None:
         print("Tagging Pull Request {} with milestone {}".format(pr_number, 
milestone))
-        url = 
"https://api.github.com/repos/apache/druid/issues/{}".format(pr_number)
-        requests.patch(url, json=milestone_json, auth=(github_username, 
os.environ["GIT_TOKEN"]))
+        if os.environ.get("APPLY_TAGS", "true").lower() == "true":
+          url = 
"https://api.github.com/repos/apache/druid/issues/{}".format(pr_number)
+          response = requests.patch(url, json=milestone_json, 
auth=(github_username, os.environ["GIT_TOKEN"]))
+          if response.status_code == 200:
+            print("✅ Tagged Pull Request {}".format(pr['html_url']))
+          else:
+            print("❌ Response: {}".format(response.json()))
+        else:
+          print("💤 APPLY_TAGS is false, not tagging Pull Request 
{}".format(pr['html_url']))
       else:
         print("Skipping Pull Request {} since it's already tagged with 
milestone {}".format(pr_number, pr['milestone']['number']))
 
   except Exception as e:
-    print("Got exception for commit: {}  ex: {}".format(sha, e))
+    print("❌ Got exception for commit: {}  ex: {}".format(sha, e))
     continue
 


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to