diff --git a/arrow/README.md b/arrow/README.md index 674c3fc6c8b..7c54da04a10 100644 --- a/arrow/README.md +++ b/arrow/README.md @@ -174,33 +174,6 @@ specific JIRA issues and reference them in these code comments. For example: // This is not sound because .... see https://issues.apache.org/jira/browse/ARROW-nnnnn ``` -# Publishing to crates.io +# Releases and publishing to crates.io -An Arrow committer can publish this crate after an official project release has -been made to crates.io using the following instructions. - -Follow [these -instructions](https://doc.rust-lang.org/cargo/reference/publishing.html) to -create an account and login to crates.io before asking to be added as an owner -of the [arrow crate](https://crates.io/crates/arrow). - -Checkout the tag for the version to be released. For example: - -```bash -git checkout apache-arrow-0.11.0 -``` - -If the Cargo.toml in this tag already contains `version = "0.11.0"` (as it -should) then the crate can be published with the following command: - -```bash -cargo publish -``` - -If the Cargo.toml does not have the correct version then it will be necessary -to modify it manually. Since there is now a modified file locally that is not -committed to GitHub it will be necessary to use the following command. - -```bash -cargo publish --allow-dirty -``` +Please see the [release](../dev/release/README.md) for details on how to create arrow releases diff --git a/dev/release/README.md b/dev/release/README.md new file mode 100644 index 00000000000..84ebd704efd --- /dev/null +++ b/dev/release/README.md @@ -0,0 +1,114 @@ + + +# Release management scripts + +# Process Overview +(TODO) + +# Mechanics of creating a release + +## Prepare active_release + +Create and merge a PR to update changelog and versions on `active_release` branch. See [#298](https://github.com/apache/arrow-rs/pull/298) for an example + +## Prepare release candidate + +(Note you need to be a committer to run these scripts as they upload to the apache svn servers) + +### Create git tag for the release: + +While the official release artifact is a signed tarball, having a tag to the commit it was created from can be useful for code archaeology. + +Using a string such as `4.0.1` as the ``, create and push the tag thusly: + +```shell +git fetch apache +git tag apache/active_release +# push tag to apache +git push apache +``` + +### Create, sign, and upload tarball + +Run the `create-tarball.sh` with the `` tag you created in previous steps + +This will create and upload a release candidate tarball to the [arrow +dev](https://dist.apache.org/repos/dist/dev/arrow) location of the +apache distribution svn server and provide you an email template to +send to dev@arrow.apache.org for release voting. + + +### Vote on artifact + +Send the email such as the following to dev@arrow.apache.org + +``` +TODO get from initial +``` + +For the release to become "official" it needs at least three PMC members to vote +1 on it. + + +#### If the release is not approved + +If the release is not approved, fix whatever the problem is +and try again + +Open question: The simplest process is to make a new minor release version (e.g. if `4.1.1` didn't pass, make `4.1.2`) and run the process again. This would allow us to avoid the overhead of creating "RC / release candidates but would means published version numbers could have gaps + + + +### If the release is approved, +Move tarball to release, e.g. https://dist.apache.org/repos/dist/release/arrow/apache-arrow-rs-4.1.0/ + +TODO (instructions / script to do this) + +### Publish on Crates.io + +Using only the released artifact (contents of the tarball): + +An Arrow committer can publish this crate after an official project release has +been made to crates.io using the following instructions. + +Follow [these +instructions](https://doc.rust-lang.org/cargo/reference/publishing.html) to +create an account and login to crates.io before asking to be added as an owner +of the [arrow crate](https://crates.io/crates/arrow). + +Checkout the tag for the version to be released. For example: + +```bash +git checkout apache-arrow-0.11.0 +``` + +If the Cargo.toml in this tag already contains `version = "0.11.0"` (as it +should) then the crate can be published with the following command: + +```bash +cargo publish +``` + +If the Cargo.toml does not have the correct version then it will be necessary +to modify it manually. Since there is now a modified file locally that is not +committed to GitHub it will be necessary to use the following command. + +```bash +cargo publish --allow-dirty +``` diff --git a/dev/release/create-tarball.sh b/dev/release/create-tarball.sh index d8a3388aa39..643d6954ea0 100755 --- a/dev/release/create-tarball.sh +++ b/dev/release/create-tarball.sh @@ -19,10 +19,23 @@ # -# This script creates a signed tarball in dev/dist/apache-arrow-.tar.gz -# and uploads it to the "dev" area of dist.apache.arrow (NOT an official release) +# This script creates a signed tarball in +# dev/dist/apache-arrow-.tar.gz and uploads it to the "dev" +# area of dist.apache.arrow (NOT an official release) and prepares an +# email for sending to the dev@arrow.apache.org list +# +# Instructions for use +# +# Ensure you have gpg setup for signing and have +# uploaded your public signature to https://pgp.mit.edu/ +# +# Ensure you have tagged the source at the appropriate spot + # # Based in part on 02-source.sh from apache/arrow +# + +### TODO: put the gitsha somewhere in the tarball set -e