Skip to content

Update release instructions to not push tags until release is approved #7754

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 10 commits into from
Jul 1, 2025
25 changes: 16 additions & 9 deletions dev/release/README.md
Original file line number Diff line number Diff line change
@@ -105,25 +105,25 @@ create a release candidate using the following steps. Note you need to
be a committer to run these scripts as they upload to the apache `svn`
distribution servers.

### Pick a Release Candidate (RC) number
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"Pick a Release Candidate (RC) number" -> "Create git tag for the release" order may be better:

diff --git a/dev/release/README.md b/dev/release/README.md
index 7b2d4f175..e2257b69c 100644
--- a/dev/release/README.md
+++ b/dev/release/README.md
@@ -105,14 +105,14 @@ create a release candidate using the following steps. Note you need to
 be a committer to run these scripts as they upload to the apache `svn`
 distribution servers.
 
-### Create git tag for the release:
-
-While the official release artifact is a signed tarball, we also tag the commit it was created for convenience and code archaeology.
-
 ### Pick a Release Candidate (RC) number
 
 Pick numbers in sequential order, with `1` for `rc1`, `2` for `rc2`, etc.
 
+### Create git tag for the release:
+
+While the official release artifact is a signed tarball, we also tag the commit it was created for convenience and code archaeology.
+
 Use a string such as `43.0.0` as the `<version>`.
 
 Create and push the tag thusly (for example, for version `4.1.0` and `rc2` would be `4.1.0-rc2`):


Pick numbers in sequential order, with `1` for `rc1`, `2` for `rc2`, etc.

### Create git tag for the release:

While the official release artifact is a signed tarball, we also tag the commit it was created for convenience and code archaeology.

Use a string such as `43.0.0` as the `<version>`.

Create and push the tag thusly:
Create and push the tag thusly (for example, for version `4.1.0` and `rc2` would be `4.1.0-rc2`):

```shell
git fetch apache
git tag <version> apache/main
git tag <version>-<rc> apache/main
# push tag to apache
git push apache <version>
git push apache <version>-<rc>
```

### Pick an Release Candidate (RC) number

Pick numbers in sequential order, with `1` for `rc1`, `2` for `rc2`, etc.

### Create, sign, and upload tarball

Run `create-tarball.sh` with the `<version>` tag and `<rc>` and you found in previous steps.
@@ -191,9 +191,16 @@ If the release is not approved, fix whatever the problem is and try again with t

### If the release is approved,

Move tarball to the release location in SVN, e.g. https://dist.apache.org/repos/dist/release/arrow/arrow-4.1.0/, using the `release-tarball.sh` script:
Then, create a new release on GitHub using the tag `<version>` (e.g. `4.1.0`).

Rust Arrow Crates:
Push the release tag to github

```shell
git tag <version> <version>-<rc>
git push apache <version>
```

Move tarball to the release location in SVN, e.g. https://dist.apache.org/repos/dist/release/arrow/arrow-rs-4.1.0/, using the `release-tarball.sh` script:

```shell
./dev/release/release-tarball.sh 4.1.0 2
37 changes: 18 additions & 19 deletions dev/release/create-tarball.sh
Original file line number Diff line number Diff line change
@@ -45,13 +45,14 @@ SOURCE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
SOURCE_TOP_DIR="$(cd "${SOURCE_DIR}/../../" && pwd)"

if [ "$#" -ne 2 ]; then
echo "Usage: $0 <tag> <rc>"
echo "Usage: $0 <version> <rc>"
echo "ex. $0 4.1.0 2"
exit
fi

tag=$1
version=$1
rc=$2
tag="${version}-rc${rc}"


# mac tar doesn't have --delete, so use gnutar
@@ -64,9 +65,12 @@ else
tar=tar
fi

release_hash=$(cd "${SOURCE_TOP_DIR}" && git rev-list --max-count=1 ${tag})
if ! git -C "${SOURCE_TOP_DIR}" rev-list --max-count=1 ${tag}; then
echo "Cannot continue: unknown git tag: $tag"
fi


release=apache-arrow-rs-${tag}
release=apache-arrow-rs-${version}
distdir=${SOURCE_TOP_DIR}/dev/dist/${release}-rc${rc}
tarname=${release}.tar.gz
tarball=${distdir}/${tarname}
@@ -75,22 +79,18 @@ url="https://dist.apache.org/repos/dist/dev/arrow/${release}-rc${rc}"
echo "Attempting to create ${tarball} from tag ${tag}"


if [ -z "$release_hash" ]; then
echo "Cannot continue: unknown git tag: $tag"
fi

echo "Draft email for [email protected] mailing list"
echo ""
echo "---------------------------------------------------------"
cat <<MAIL
To: [email protected]
Subject: [VOTE][RUST] Release Apache Arrow Rust ${tag} RC${rc}
Subject: [VOTE][RUST] Release Apache Arrow Rust ${version} RC${rc}

Hi,

I would like to propose a release of Apache Arrow Rust Implementation, version ${tag}.

This release candidate is based on commit: ${release_hash} [1]
This release candidate is based on commit: ${tag} [1]

The proposed release tarball and signatures are hosted at [2].

@@ -106,22 +106,21 @@ The vote will be open for at least 72 hours.
[ ] +0
[ ] -1 Do not release this as Apache Arrow Rust ${version} because...

[1]: https://github.com/apache/arrow-rs/tree/${release_hash}
[1]: https://github.com/apache/arrow-rs/tree/${tag}
[2]: ${url}
[3]: https://github.com/apache/arrow-rs/blob/${release_hash}/CHANGELOG.md
[4]: https://github.com/apache/arrow-rs/blob/main/dev/release/verify-release-candidate.sh
[3]: https://github.com/apache/arrow-rs/blob/${tag}/CHANGELOG.md
[4]: https://github.com/apache/arrow-rs/blob/master/dev/release/verify-release-candidate.sh
MAIL
echo "---------------------------------------------------------"



# create <tarball> containing the files in git at $release_hash
# the files in the tarball are prefixed with {tag} (e.g. 4.0.1)
# use --delete to filter out `object_store` files
# create <tarball> containing the files in git at $tag
# the files in the tarball are prefixed with {release}
# (e.g. apache-arrow-rs-4.0.1)
mkdir -p ${distdir}
(cd "${SOURCE_TOP_DIR}" && \
git archive ${release_hash} --prefix ${release}/ \
| $tar --delete ${release}/'object_store' \
git archive ${tag} --prefix ${release}/ \
| gzip > ${tarball})

echo "Running rat license checker on ${tarball}"
@@ -138,4 +137,4 @@ gpg --armor --output ${tarball}.asc --detach-sig ${tarball}
echo "Uploading to apache dist/dev to ${url}"
svn co --depth=empty https://dist.apache.org/repos/dist/dev/arrow ${SOURCE_TOP_DIR}/dev/dist
svn add ${distdir}
svn ci -m "Apache Arrow Rust ${tag} ${rc}" ${distdir}
svn ci -m "Apache Arrow Rust ${version} ${rc}" ${distdir}