diff --git a/rust/release_crates/BUILD b/rust/release_crates/BUILD index ba06d1f8d07e..960eedf33f48 100644 --- a/rust/release_crates/BUILD +++ b/rust/release_crates/BUILD @@ -12,3 +12,15 @@ sh_binary( tags = ["manual"], deps = ["@bazel_tools//tools/bash/runfiles"], ) + +sh_binary( + name = "release", + srcs = ["release.sh"], + data = [ + "//rust/release_crates/protobuf:protobuf_crate", + "//rust/release_crates/protobuf_codegen:protobuf_codegen_crate", + "//rust/release_crates/protobuf_example:protobuf_example_crate", + ], + tags = ["manual"], + deps = ["@bazel_tools//tools/bash/runfiles"], +) diff --git a/rust/release_crates/protobuf/Cargo-template.toml b/rust/release_crates/protobuf/Cargo-template.toml index 35dbce555ebc..c8c0cbbf5402 100644 --- a/rust/release_crates/protobuf/Cargo-template.toml +++ b/rust/release_crates/protobuf/Cargo-template.toml @@ -6,7 +6,7 @@ # https://developers.google.com/open-source/licenses/bsd [package] -name = "protobuf" +name = "staging-protobuf" version = "{VERSION}" edition = "2021" # The Rust edition (not to be confused with Protobuf Edition). links = "libupb" diff --git a/rust/release_crates/protobuf_codegen/Cargo-template.toml b/rust/release_crates/protobuf_codegen/Cargo-template.toml index 7382e38c7a47..eaa4867af561 100644 --- a/rust/release_crates/protobuf_codegen/Cargo-template.toml +++ b/rust/release_crates/protobuf_codegen/Cargo-template.toml @@ -1,6 +1,6 @@ [package] edition = "2021" # The Rust edition (not to be confused with Protobuf Edition). -name = "protobuf-codegen" +name = "staging-protobuf-codegen" readme = "README.md" version = "{VERSION}" description = "Code generator for Rust Protocol Buffers bindings" diff --git a/rust/release_crates/protobuf_example/Cargo-template.toml b/rust/release_crates/protobuf_example/Cargo-template.toml index 1ea0b0264a04..8315d4fc1311 100644 --- a/rust/release_crates/protobuf_example/Cargo-template.toml +++ b/rust/release_crates/protobuf_example/Cargo-template.toml @@ -1,10 +1,10 @@ [package] -name = "protobuf-example" +name = "staging-protobuf-example" version = "{VERSION}" edition = "2021" [dependencies] -protobuf = { version = "{VERSION}", path = "../protobuf" } +protobuf = { version = "{VERSION}", path = "../protobuf", package = "staging-protobuf" } [build-dependencies] -protobuf-codegen = { version = "{VERSION}", path = "../protobuf_codegen" } \ No newline at end of file +protobuf-codegen = { version = "{VERSION}", path = "../protobuf_codegen", package = "staging-protobuf-codegen" } \ No newline at end of file diff --git a/rust/release_crates/release.sh b/rust/release_crates/release.sh new file mode 100755 index 000000000000..0393aa411ab0 --- /dev/null +++ b/rust/release_crates/release.sh @@ -0,0 +1,69 @@ +#!/bin/bash +# A script that publishes the protobuf crates to crates.io. + +# --- begin runfiles.bash initialization --- +# Copy-pasted from Bazel's Bash runfiles library (tools/bash/runfiles/runfiles.bash). +set -euo pipefail +if [[ ! -d "${RUNFILES_DIR:-/dev/null}" && ! -f "${RUNFILES_MANIFEST_FILE:-/dev/null}" ]]; then + if [[ -f "$0.runfiles_manifest" ]]; then + export RUNFILES_MANIFEST_FILE="$0.runfiles_manifest" + elif [[ -f "$0.runfiles/MANIFEST" ]]; then + export RUNFILES_MANIFEST_FILE="$0.runfiles/MANIFEST" + elif [[ -f "$0.runfiles/bazel_tools/tools/bash/runfiles/runfiles.bash" ]]; then + export RUNFILES_DIR="$0.runfiles" + fi +fi +if [[ -f "${RUNFILES_DIR:-/dev/null}/bazel_tools/tools/bash/runfiles/runfiles.bash" ]]; then + source "${RUNFILES_DIR}/bazel_tools/tools/bash/runfiles/runfiles.bash" +elif [[ -f "${RUNFILES_MANIFEST_FILE:-/dev/null}" ]]; then + source "$(grep -m1 "^bazel_tools/tools/bash/runfiles/runfiles.bash " \ + "$RUNFILES_MANIFEST_FILE" | cut -d ' ' -f 2-)" +else + echo >&2 "ERROR: cannot find @bazel_tools//tools/bash/runfiles:runfiles.bash" + exit 1 +fi +# --- end runfiles.bash initialization --- + +read -p 'Enter cratesio auth token: ' AUTH_TOKEN + +TMP_DIR=$(mktemp -d) +trap 'rm -rf -- "$TMP_DIR"' EXIT + +CARGO_HOME=$TMP_DIR/cargo_home +mkdir $CARGO_HOME + +CRATE_ROOT=$TMP_DIR/protobuf +mkdir $CRATE_ROOT + +PROTOBUF_TAR=$(rlocation com_google_protobuf/rust/release_crates/protobuf/protobuf_crate.tar) + +echo "Expanding protobuf crate tar" +tar -xvf $PROTOBUF_TAR -C $CRATE_ROOT + +CODEGEN_ROOT=$TMP_DIR/protobuf_codegen +mkdir $CODEGEN_ROOT + +CODEGEN_TAR=$(rlocation com_google_protobuf/rust/release_crates/protobuf_codegen/protobuf_codegen_crate.tar) + +echo "Expanding protbuf_codegen crate tar" +tar -xvf $CODEGEN_TAR -C $CODEGEN_ROOT + +EXAMPLE_ROOT=$TMP_DIR/protobuf_example +mkdir $EXAMPLE_ROOT + +EXAMPLE_TAR=$(rlocation com_google_protobuf/rust/release_crates/protobuf_example/protobuf_example_crate.tar) + +echo "Expanding protobuf_example crate tar" +tar -xvf $EXAMPLE_TAR -C $EXAMPLE_ROOT + +cd $CRATE_ROOT +CARGO_HOME=$CARGO_HOME CARGO_REGISTRY_TOKEN=$AUTH_TOKEN cargo publish + +cd $CODEGEN_ROOT +CARGO_HOME=$CARGO_HOME CARGO_REGISTRY_TOKEN=$AUTH_TOKEN cargo publish + +# The example crate cannot be published due to it having a build.rs that +# modifies files outside of the OUT_DIR. +#cd $EXAMPLE_ROOT +# CARGO_HOME=$CARGO_HOME CARGO_REGISTRY_TOKEN=$AUTH_TOKEN cargo publish +