blob: 20e34504d96ad57725b71edd6bf2742fd9a01c81 [file] [view]
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->
# Doris release helper scripts
Helper scripts for an Apache Doris Release Manager (RM) to cut a **source** release candidate:
package and sign the source tarball, upload it to the Apache dev SVN, and draft the `[VOTE]` email.
## Prerequisites
Have these ready before you run anything:
- The release **tag is already created and pushed** to `apache/doris` — these scripts only verify it
(branch prep, patch merges and tag creation are out of scope).
- A local clone of `apache/doris` with that tag fetched.
- These tools on `PATH`: `git`, `gpg`, `svn`, `sha512sum`, `curl`, `gzip`.
- A GPG signing key — or let step 01 import an existing one, or generate and publish a new one.
- ASF credentials exported in your shell (used for the SVN upload and the KEYS publish):
```bash
export ASF_USERNAME=<your-apache-id>
export ASF_PASSWORD='<your-apache-ldap-password>'
```
- `release.env` filled in for this release — see [Configuration](#configuration) for the fields.
## Steps
Run from this directory, in order:
1. **Check the signing environment** — `./01-check-env.sh`. Re-run until it ends with
`environment looks READY`.
2. **Package, sign & upload** — `./02-package-sign-upload.sh`. Builds and signs the source tarball
and uploads it to the dev SVN. It pauses twice for confirmation; nothing public happens before
the final confirm.
3. **Draft the vote email** — `./03-vote-mail.sh`. Prompts for the Release Notes URL and prints the
draft; review it and send it yourself from your `@apache.org` address.
---
Everything below is reference detail.
## Files
- `release.env` — all configuration (version, paths, signing key, SVN URLs, email). **Edit this first.**
- `01-check-env.sh` — check / prepare the GPG signing environment and ASF credentials.
- `02-package-sign-upload.sh` — `git archive` the tag, GPG-sign, sha512, sign any prebuilt binaries
locally, then upload the source artifacts to the dev SVN.
- `03-vote-mail.sh` — generate the `[VOTE]` email draft.
## Configuration
The scripts are reusable across releases — they hold no version; edit `release.env` each time.
Set at least:
- `VERSION` / `RC` — e.g. `4.0.6` and `rc02`; `TAG` is derived as `${VERSION}-${RC}`.
- `GIT_REMOTE` — the git remote pointing at `github.com/apache/doris`.
- `APACHE_ID` / `APACHE_EMAIL` / `SIGNER_NAME` — your committer id, `@apache.org` email, and the
display name used to sign the vote email.
- `SIGNING_KEY` — fingerprint of the key to sign with (leave empty to auto-detect a single local secret key).
- `BIN_FILES` — optional absolute paths to prebuilt binary tarballs to sign locally (see below). Leave
the list empty (the default) to skip binary signing and run the source-only flow. When set, step 03
advertises each binary in the vote email under `BIN_DOWNLOAD_BASE`; when empty that section is omitted.
`REPO_DIR` defaults to the enclosing checkout (`${ROOT}/../../`) since these scripts live inside
`apache/doris`; override it only if you run them against a different clone.
The SVN URLs, dev mailing list and verify-guide link rarely change; the defaults target the official
Doris dist repos. The **vote SVN artifacts are source-only**: `apache-doris-<tag>-src.tar.gz` + `.asc`
+ `.sha512`. All script output (source tarball, signatures, SVN checkouts, email draft) goes to
`WORK_DIR` (`<this-dir>/<tag>`, i.e. `tools/release-tools/<tag>`, by default).
## What each step does
- **01** verifies the required tools, your `GPG_TTY` / `gpg.conf`, resolves (or helps you create) a
signing key, checks it is present in the live published `KEYS`, runs a test sign + verify, and
confirms your ASF credentials. It is read-mostly: every state-changing action (edit `gpg.conf`,
import / generate a key, publish `KEYS`) prompts before acting.
- **02** checks the local tag matches `GIT_REMOTE`, builds the source tarball from the tag with
`git archive`, signs it and writes the `.sha512`. If `BIN_FILES` is non-empty it then GPG-signs and
sha512s each prebuilt binary tarball, writing the `.asc` / `.sha512` sidecars **next to** each binary
(these are NOT uploaded — you upload the binaries and their sidecars yourself). Finally it uploads
the three **source** files to `dev/doris/<tag>/` on the Apache dist SVN. **Eyeball the target URL**
at the confirm prompt before committing — nothing public happens until the final confirm.
- **03** writes `vote-email.txt` and `vote-email.eml` into `WORK_DIR` and prints the draft. Review it
and send it yourself from your `@apache.org` address.
## Not automated (on purpose)
- Sending the vote email — it goes to a public ASF list, so you review and send it manually.
- Uploading binary packages — step 02 can *sign* the tarballs listed in `BIN_FILES`, but binaries are
not part of the ASF source vote, so you upload them (with their `.asc`/`.sha512`) manually.
- Post-vote steps — tallying the result, the result email, and moving the artifacts from `dev/` to
`release/` once the vote passes.