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

lidavidm pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-adbc.git


The following commit(s) were added to refs/heads/main by this push:
     new 7402f9adb chore(dev/release): decouple version numbers (#1762)
7402f9adb is described below

commit 7402f9adb8ec726cec87b672fac847f418d3b5af
Author: David Li <[email protected]>
AuthorDate: Mon Apr 29 11:14:23 2024 +0900

    chore(dev/release): decouple version numbers (#1762)
    
    Start refactoring our release process so that we can theoretically
    handle different version numbers in different language subprojects.
    
    Fixes #1490.
    
    ---------
    
    Co-authored-by: Sutou Kouhei <[email protected]>
    Co-authored-by: Sutou Kouhei <[email protected]>
---
 .github/workflows/packaging.yml                | 99 ++++++++++----------------
 ci/linux-packages/Rakefile                     | 13 ++--
 dev/release/01-prepare.sh                      | 89 +++++++++++------------
 dev/release/02-sign.sh                         | 37 +++-------
 dev/release/03-source.sh                       | 38 ++++------
 dev/release/04-java-upload.sh                  | 22 +++---
 dev/release/05-linux-upload.sh                 | 22 +++---
 dev/release/06-binary-verify.sh                | 46 +++++++-----
 dev/release/post-01-upload.sh                  | 23 +++---
 dev/release/post-02-binary.sh                  | 31 +++-----
 dev/release/post-03-python.sh                  | 29 +++-----
 dev/release/post-04-go.sh                      | 33 ++++++---
 dev/release/post-05-linux.sh                   | 28 +++-----
 dev/release/post-06-ruby.sh                    | 20 +++---
 dev/release/post-07-csharp.sh                  | 29 +++-----
 dev/release/post-09-bump-versions.sh           | 65 ++++++++++-------
 dev/release/post-10-website.sh                 | 38 +++++-----
 dev/release/{post-04-go.sh => utils-common.sh} | 31 ++++----
 dev/release/utils-prepare.sh                   | 68 +++++++++++-------
 dev/release/{post-04-go.sh => versions.env}    | 28 ++++----
 20 files changed, 383 insertions(+), 406 deletions(-)

diff --git a/.github/workflows/packaging.yml b/.github/workflows/packaging.yml
index 22efb9b45..4fa2a7911 100644
--- a/.github/workflows/packaging.yml
+++ b/.github/workflows/packaging.yml
@@ -74,43 +74,14 @@ jobs:
           git fetch --tags --force origin
 
       - name: Prepare version
-        id: version
         run: |
-          if [ "${GITHUB_REF_TYPE}" = "tag" ]; then
-            VERSION=${GITHUB_REF_NAME#apache-arrow-adbc-}
-            VERSION=${VERSION%-rc*}
-          else
-            VERSION=$(grep 'set(ADBC_VERSION' 
c/cmake_modules/AdbcVersion.cmake | \
-                        grep -E -o '[0-9]+\.[0-9]+\.[0-9]+')
-            description=$(git describe \
-                            --always \
-                            --dirty \
-                            --long \
-                            --match "apache-arrow-adbc-[0-9]*.*" \
-                            --tags)
-            case "${description}" in
-              # apache-arrow-adbc-0.1.0-10-1234567-dirty
-              apache-arrow-adbc-*)
-                # 10-1234567-dirty
-                distance="${description#apache-arrow-adbc-*.*.*-}"
-                # 10-1234567
-                distance="${distance%-dirty}"
-                # 10
-                distance="${distance%-*}"
-                ;;
-              *)
-                distance=$(git log --format=oneline | wc -l)
-                ;;
-            esac
-            VERSION="${VERSION}.dev${distance}"
-          fi
-          echo "VERSION=${VERSION}" >> $GITHUB_ENV
-          echo "VERSION=${VERSION}" >> "$GITHUB_OUTPUT"
+          source dev/release/versions.env
+          echo "VERSION=${RELEASE}" | tee -a $GITHUB_ENV
 
       - name: Create archive
         run: |
           ci/scripts/source_build.sh \
-            apache-arrow-adbc-${{ steps.version.outputs.VERSION }} \
+            apache-arrow-adbc-${VERSION} \
             $(git log -n 1 --format=%h)
 
       - uses: actions/upload-artifact@v4
@@ -118,7 +89,7 @@ jobs:
           name: source
           retention-days: 7
           path: |
-            apache-arrow-adbc-${{ steps.version.outputs.VERSION }}.tar.gz
+            apache-arrow-adbc-*.tar.gz
 
   go-binaries:
     name: "Go ${{ matrix.os }}"
@@ -235,13 +206,11 @@ jobs:
           name: source
 
       - name: Extract source archive
-        id: version
         run: |
           source_archive=$(echo apache-arrow-adbc-*.tar.gz)
           VERSION=${source_archive#apache-arrow-adbc-}
           VERSION=${VERSION%.tar.gz}
-          echo "VERSION=${VERSION}" >> $GITHUB_ENV
-          echo "VERSION=${VERSION}" >> "$GITHUB_OUTPUT"
+          echo "VERSION=${VERSION}" | tee -a $GITHUB_ENV
 
           tar xf apache-arrow-adbc-${VERSION}.tar.gz
           mv apache-arrow-adbc-${VERSION} adbc
@@ -256,7 +225,7 @@ jobs:
         run: |
           pushd adbc
           docker compose run \
-            -e SETUPTOOLS_SCM_PRETEND_VERSION=${{ 
steps.version.outputs.VERSION }} \
+            -e SETUPTOOLS_SCM_PRETEND_VERSION=$VERSION \
             docs
           popd
 
@@ -340,7 +309,6 @@ jobs:
           path: arrow
 
       - name: Set output variables
-        id: info
         run: |
           echo "ARROW_SOURCE=$(pwd)/arrow" >> $GITHUB_ENV
           case ${{ matrix.target }} in
@@ -359,14 +327,16 @@ jobs:
           source_archive=$(echo apache-arrow-adbc-*.tar.gz)
           VERSION=${source_archive#apache-arrow-adbc-}
           VERSION=${VERSION%.tar.gz}
-          echo "VERSION=${VERSION}" >> $GITHUB_ENV
-          echo "VERSION=${VERSION}" >> "$GITHUB_OUTPUT"
+          echo "VERSION=${VERSION}" | tee -a $GITHUB_ENV
 
       - name: Extract source archive
         run: |
-          tar xf apache-arrow-adbc-${{ steps.info.outputs.VERSION }}.tar.gz
-          mv apache-arrow-adbc-${{ steps.info.outputs.VERSION }} adbc
-          mv apache-arrow-adbc-${{ steps.info.outputs.VERSION }}.tar.gz 
adbc/ci/linux-packages/
+          tar xf apache-arrow-adbc-$VERSION.tar.gz
+
+          source ./apache-arrow-adbc-$VERSION/dev/release/versions.env
+
+          mv apache-arrow-adbc-$VERSION adbc
+          mv apache-arrow-adbc-$VERSION.tar.gz adbc/ci/linux-packages/
 
       - name: Set up Ruby
         uses: ruby/setup-ruby@v1
@@ -469,8 +439,7 @@ jobs:
           source_archive=$(echo apache-arrow-adbc-*.tar.gz)
           VERSION=${source_archive#apache-arrow-adbc-}
           VERSION=${VERSION%.tar.gz}
-          echo "VERSION=${VERSION}" >> $GITHUB_ENV
-          echo "VERSION=${VERSION}" >> "$GITHUB_OUTPUT"
+          echo "VERSION=${VERSION}" | tee -a $GITHUB_ENV
 
           tar xf apache-arrow-adbc-${VERSION}.tar.gz
           mv apache-arrow-adbc-${VERSION} adbc
@@ -536,11 +505,10 @@ jobs:
           source_archive=$(echo apache-arrow-adbc-*.tar.gz)
           VERSION=${source_archive#apache-arrow-adbc-}
           VERSION=${VERSION%.tar.gz}
-          echo "VERSION=${VERSION}" >> $GITHUB_ENV
-          echo "VERSION=${VERSION}" >> "$GITHUB_OUTPUT"
+          echo "VERSION=${VERSION}" | tee -a $GITHUB_ENV
 
-          tar xf apache-arrow-adbc-${VERSION}.tar.gz
-          mv apache-arrow-adbc-${VERSION} adbc
+          tar xf apache-arrow-adbc-$VERSION.tar.gz
+          mv apache-arrow-adbc-$VERSION adbc
 
       - name: Show inputs
         run: |
@@ -590,7 +558,8 @@ jobs:
     strategy:
       fail-fast: false
       matrix:
-        arch: ["amd64", "arm64v8"]
+        # XXX(lidavidm): disable arm64 build for now while I test things
+        arch: ["amd64"]
         manylinux_version: ["2014"]
         is_pr:
           - ${{ startsWith(github.ref, 'refs/pull/') }}
@@ -609,12 +578,13 @@ jobs:
           source_archive=$(echo apache-arrow-adbc-*.tar.gz)
           VERSION=${source_archive#apache-arrow-adbc-}
           VERSION=${VERSION%.tar.gz}
-          echo "VERSION=${VERSION}" >> $GITHUB_ENV
-          echo "VERSION=${VERSION}" >> "$GITHUB_OUTPUT"
 
           tar xf apache-arrow-adbc-${VERSION}.tar.gz
           mv apache-arrow-adbc-${VERSION} adbc
 
+          source adbc/dev/release/versions.env
+          echo "VERSION=${VERSION_NATIVE}" | tee -a $GITHUB_ENV
+
       - name: Show inputs
         run: |
           echo "upload_artifacts: ${{ github.event.inputs.upload_artifacts }}" 
>> $GITHUB_STEP_SUMMARY
@@ -631,7 +601,7 @@ jobs:
         run: |
           pushd adbc
           docker compose run \
-            -e SETUPTOOLS_SCM_PRETEND_VERSION=${{ 
steps.version.outputs.VERSION }} \
+            -e SETUPTOOLS_SCM_PRETEND_VERSION=$VERSION \
             python-wheel-manylinux
           popd
 
@@ -717,12 +687,14 @@ jobs:
           source_archive=$(echo apache-arrow-adbc-*.tar.gz)
           VERSION=${source_archive#apache-arrow-adbc-}
           VERSION=${VERSION%.tar.gz}
-          echo "VERSION=${VERSION}" >> $GITHUB_ENV
-          echo "SETUPTOOLS_SCM_PRETEND_VERSION=${VERSION}" >> $GITHUB_ENV
 
           tar xf apache-arrow-adbc-${VERSION}.tar.gz
           mv apache-arrow-adbc-${VERSION} adbc
 
+          source adbc/dev/release/versions.env
+          echo "VERSION=${VERSION_NATIVE}" | tee -a $GITHUB_ENV
+          echo "SETUPTOOLS_SCM_PRETEND_VERSION=${VERSION_NATIVE}" | tee -a 
$GITHUB_ENV
+
       - name: Show inputs
         run: |
           echo "upload_artifacts: ${{ github.event.inputs.upload_artifacts }}" 
>> $GITHUB_STEP_SUMMARY
@@ -737,13 +709,13 @@ jobs:
         run: |
           pushd adbc
           vcpkg_version=$(cat ".env" | grep "VCPKG" | cut -d "=" -f2 | tr -d 
'"')
-          echo "VCPKG_VERSION=$vcpkg_version" >> "$GITHUB_OUTPUT"
+          echo "VCPKG_VERSION=$vcpkg_version" | tee -a "$GITHUB_ENV"
           popd
 
       - name: Install vcpkg
         run: |
           pushd adbc
-          ci/scripts/install_vcpkg.sh $VCPKG_ROOT ${{ 
steps.vcpkg_version.outputs.VCPKG_VERSION }}
+          ci/scripts/install_vcpkg.sh $VCPKG_ROOT $VCPKG_VERSION
           popd
 
       - uses: actions/setup-go@v5
@@ -868,12 +840,13 @@ jobs:
           source_archive=$(echo apache-arrow-adbc-*.tar.gz)
           VERSION=${source_archive#apache-arrow-adbc-}
           VERSION=${VERSION%.tar.gz}
-          echo "VERSION=${VERSION}" >> $GITHUB_ENV
-          echo "VERSION=${VERSION}" >> "$GITHUB_OUTPUT"
 
           tar xf apache-arrow-adbc-${VERSION}.tar.gz
           mv apache-arrow-adbc-${VERSION} adbc
 
+          source adbc/dev/release/versions.env
+          echo "VERSION=${VERSION_NATIVE}" | tee -a $GITHUB_ENV
+
           (. adbc/.env && echo "GO_VERSION=${GO}") >> $GITHUB_ENV
 
       - name: Show inputs
@@ -961,17 +934,17 @@ jobs:
           name: source
 
       - name: Extract source archive
-        id: version
         run: |
           source_archive=$(echo apache-arrow-adbc-*.tar.gz)
           VERSION=${source_archive#apache-arrow-adbc-}
           VERSION=${VERSION%.tar.gz}
-          echo "VERSION=${VERSION}" >> $GITHUB_ENV
-          echo "VERSION=${VERSION}" >> "$GITHUB_OUTPUT"
 
           tar xf apache-arrow-adbc-${VERSION}.tar.gz
           mv apache-arrow-adbc-${VERSION} adbc
 
+          source adbc/dev/release/versions.env
+          echo "VERSION=${VERSION_NATIVE}" | tee -a $GITHUB_ENV
+
       - name: Show inputs
         run: |
           echo "upload_artifacts: ${{ github.event.inputs.upload_artifacts }}"
@@ -982,7 +955,7 @@ jobs:
         run: |
           pushd adbc
           docker compose run  \
-            -e SETUPTOOLS_SCM_PRETEND_VERSION=${{ 
steps.version.outputs.VERSION }} \
+            -e SETUPTOOLS_SCM_PRETEND_VERSION=$VERSION \
             python-sdist
           popd
 
diff --git a/ci/linux-packages/Rakefile b/ci/linux-packages/Rakefile
index 3945c1111..bc5daab6d 100644
--- a/ci/linux-packages/Rakefile
+++ b/ci/linux-packages/Rakefile
@@ -38,10 +38,15 @@ module Helper
     version_env = ENV["VERSION"]
     return version_env if version_env
 
-    meson_build = top_source_dir / "c" / "cmake_modules" / "AdbcVersion.cmake"
-    version = meson_build.read.scan(/ADBC_VERSION "(.+?)"/)[0][0]
-    formatted_release_time = release_time.strftime("%Y%m%d")
-    version.gsub(/-SNAPSHOT\z/) {"-dev#{formatted_release_time}"}
+    versions_env = top_source_dir / "dev" / "release" / "versions.env"
+    version = versions_env.read[/RELEASE="(.+?)"/, 1]
+    adbc_version_cmake = top_source_dir / "c" / "cmake_modules" / 
"AdbcVersion.cmake"
+    native_version = adbc_version_cmake.read[/ADBC_VERSION "(.+?)"/, 1]
+    if native_version.end_with?("-SNAPSHOT")
+      formatted_release_time = release_time.strftime("%Y%m%d")
+      version += "-dev#{formatted_release_time}"
+    end
+    version
   end
 
   def detect_release_time
diff --git a/dev/release/01-prepare.sh b/dev/release/01-prepare.sh
index 7dab7968e..279e764b6 100755
--- a/dev/release/01-prepare.sh
+++ b/dev/release/01-prepare.sh
@@ -20,60 +20,61 @@
 set -ue
 
 SOURCE_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+source "$SOURCE_DIR/utils-common.sh"
+source "$SOURCE_DIR/utils-prepare.sh"
 
-if [ "$#" -ne 5 ]; then
-  echo "Usage: $0 <arrow-dir> <prev_veresion> <version> <next_version> 
<rc-num>"
-  echo "Usage: $0 ../arrow 0.1.0 0.2.0 0.3.0 0"
-  exit 1
-fi
+main() {
+    if [ "$#" -ne 2 ]; then
+        echo "Usage: $0 <arrow-dir> <rc_num>"
+        echo "Usage: $0 ../arrow 0"
+        exit 1
+    fi
 
-. $SOURCE_DIR/utils-prepare.sh
+    local -r arrow_dir="$1"
+    local -r rc_number="$2"
+    local -r 
release_candidate_tag="apache-arrow-adbc-${RELEASE}-rc${rc_number}"
 
-arrow_dir=$1
-prev_version=$2
-version=$3
-next_version=$4
-next_version_snapshot="${next_version}-SNAPSHOT"
-rc_number=$5
+    export ARROW_SOURCE="$(cd "${arrow_dir}" && pwd)"
 
-export ARROW_SOURCE="$(cd "${arrow_dir}" && pwd)"
+    if [[ $(git tag -l "${release_candidate_tag}") ]]; then
+        local -r next_rc_number=$(($rc_number+1))
+        echo "Tag ${release_candidate_tag} already exists, so create a new 
release candidate:"
+        echo "1. Create or checkout maint-<version>."
+        echo "2. Execute the script again with bumped RC number."
+        echo "Commands:"
+        echo "   git checkout maint-${RELEASE}"
+        echo "   dev/release/01-prepare.sh ${arrow_dir} ${next_rc_number}"
+        exit 1
+    fi
 
-release_candidate_tag="apache-arrow-adbc-${version}-rc${rc_number}"
+    ############################## Pre-Tag Commits 
##############################
 
-if [[ $(git tag -l "${release_candidate_tag}") ]]; then
-    next_rc_number=$(($rc_number+1))
-    echo "Tag ${release_candidate_tag} already exists, so create a new release 
candidate:"
-    echo "1. Create or checkout maint-<version>."
-    echo "2. Execute the script again with bumped RC number."
-    echo "Commands:"
-    echo "   git checkout maint-${version}"
-    echo "   dev/release/01-prepare.sh ${version} ${next_version} 
${next_rc_number}"
-    exit 1
-fi
+    header "Updating changelog for ${RELEASE}"
+    # Update changelog
+    # XXX: commitizen doesn't respect --tag-format with --incremental, so mimic
+    # it by hand.
+    (
+        echo ;
+        # Strip trailing blank line
+        printf '%s\n' "$(cz ch --dry-run --unreleased-version "ADBC Libraries 
${RELEASE}" --start-rev apache-arrow-adbc-${PREVIOUS_RELEASE})"
+    ) >> ${SOURCE_DIR}/../../CHANGELOG.md
+    git add ${SOURCE_DIR}/../../CHANGELOG.md
+    git commit -m "chore: update CHANGELOG.md for ${RELEASE}"
 
-############################## Pre-Tag Commits ##############################
+    header "Prepare release ${RELEASE} on tag ${release_candidate_tag}"
 
-echo "Updating changelog for $version"
-# Update changelog
-# XXX: commitizen doesn't respect --tag-format with --incremental, so mimic
-# it by hand.
-(
-    echo ;
-    # Strip trailing blank line
-    printf '%s\n' "$(cz ch --dry-run --unreleased-version "ADBC Libraries 
${version}" --start-rev apache-arrow-adbc-${prev_version})"
-) >> ${SOURCE_DIR}/../../CHANGELOG.md
-git add ${SOURCE_DIR}/../../CHANGELOG.md
-git commit -m "chore: update CHANGELOG.md for $version"
+    update_versions "release"
+    # --allow-empty required for RCs after the first
+    git commit -m "chore: update versions for ${RELEASE}" --allow-empty
 
-echo "Prepare release ${version} on tag ${release_candidate_tag}"
+    ######################### Tag the Release Candidate 
#########################
 
-update_versions "${version}" "${next_version}" "release"
-# --allow-empty required for RCs after the first
-git commit -m "chore: update versions for ${version}" --allow-empty
+    header "Tag the release candidate ${release_candidate_tag}"
 
-######################### Tag the Release Candidate #########################
+    git tag -a "${release_candidate_tag}" -m "ADBC Libraries ${RELEASE} RC 
${rc_number}"
 
-git tag -a "${release_candidate_tag}" -m "ADBC Libraries ${version} RC 
${rc_number}"
+    echo "Created release candidate tag: ${release_candidate_tag}"
+    echo "Push this tag before continuing!"
+}
 
-echo "Created release candidate tag: ${release_candidate_tag}"
-echo "Push this tag before continuing!"
+main "$@"
diff --git a/dev/release/02-sign.sh b/dev/release/02-sign.sh
index 2eb8dce5c..1bc067394 100755
--- a/dev/release/02-sign.sh
+++ b/dev/release/02-sign.sh
@@ -18,30 +18,21 @@
 
 set -eu
 
-main() {
-    local -r source_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
-    local -r source_top_dir="$( cd "${source_dir}/../../" && pwd )"
-    pushd "${source_top_dir}"
+SOURCE_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+source "${SOURCE_DIR}/utils-common.sh"
+source "${SOURCE_DIR}/utils-prepare.sh"
 
-    if [ "$#" -ne 3 ]; then
-        echo "Usage: $0 <prev-version> <version> <rc-num>"
+main() {
+    if [ "$#" -ne 1 ]; then
+        echo "Usage: $0 <rc-num>"
+        echo "Usage: $0 0"
         exit 1
     fi
 
-    local -r prev_version="$1"
-    local -r version="$2"
-    local -r rc_number="$3"
-    local -r tag="apache-arrow-adbc-${version}-rc${rc_number}"
-    local -r tarball="apache-arrow-adbc-${version}"
+    pushd "${SOURCE_TOP_DIR}"
 
-    : ${REPOSITORY:="apache/arrow-adbc"}
-
-    if [[ ! -f "${source_dir}/.env" ]]; then
-        echo "You must create ${source_dir}/.env"
-        echo "You can use ${source_dir}/.env.example as a template"
-    fi
-
-    source "${source_dir}/.env"
+    local -r rc_number="$1"
+    local -r tag="apache-arrow-adbc-${RELEASE}-rc${rc_number}"
 
     header "Looking for GitHub Actions workflow on ${REPOSITORY}:${tag}"
     local run_id=""
@@ -72,7 +63,7 @@ main() {
     header "Adding release notes"
     # XXX: commitizen likes to include the entire history even if we
     # give it a tag, so we have to give it both tags explicitly
-    local -r release_notes=$(cz ch --dry-run --unreleased-version "ADBC 
Libraries ${version}" --start-rev apache-arrow-adbc-${prev_version})
+    local -r release_notes=$(cz ch --dry-run --unreleased-version "ADBC 
Libraries ${RELEASE}" --start-rev apache-arrow-adbc-${PREVIOUS_RELEASE})
     echo "${release_notes}"
     gh release edit \
        "${tag}" \
@@ -97,12 +88,6 @@ main() {
     popd
 }
 
-header() {
-    echo "============================================================"
-    echo "${1}"
-    echo "============================================================"
-}
-
 sign_asset() {
     local -r asset="$1"
     local -r sigfile="${asset}.asc"
diff --git a/dev/release/03-source.sh b/dev/release/03-source.sh
index 286d4a7ae..7c7d204ac 100755
--- a/dev/release/03-source.sh
+++ b/dev/release/03-source.sh
@@ -18,27 +18,19 @@
 
 set -eu
 
-main() {
-    local -r source_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
-    local -r source_top_dir="$( cd "${source_dir}/../../" && pwd )"
+SOURCE_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+source "${SOURCE_DIR}/utils-common.sh"
+source "${SOURCE_DIR}/utils-prepare.sh"
 
-    if [ "$#" -ne 2 ]; then
-        echo "Usage: $0 <version> <rc-num>"
+main() {
+    if [ "$#" -ne 1 ]; then
+        echo "Usage: $0 <rc-num>"
         exit 1
     fi
-    local -r version="$1"
-    local -r rc_number="$2"
-    local -r tag="apache-arrow-adbc-${version}-rc${rc_number}"
-    local -r tarball="apache-arrow-adbc-${version}.tar.gz"
-
-    : ${REPOSITORY:="apache/arrow-adbc"}
-
-    if [[ ! -f "${source_dir}/.env" ]]; then
-        echo "You must create ${source_dir}/.env"
-        echo "You can use ${source_dir}/.env.example as a template"
-    fi
 
-    source "${source_dir}/.env"
+    local -r rc_number="$1"
+    local -r tag="apache-arrow-adbc-${RELEASE}-rc${rc_number}"
+    local -r tarball="apache-arrow-adbc-${RELEASE}.tar.gz"
 
     header "Downloading assets from release"
     local -r download_dir="packages/${tag}"
@@ -63,7 +55,11 @@ main() {
 
     # commit to svn
     svn add "tmp/${tag}"
-    svn ci -m "Apache Arrow ADBC ${version} RC${rc_number}" "tmp/${tag}"
+    if [[ ${DRY_RUN} -eq 0 ]]; then
+        svn ci -m "Apache Arrow ADBC ${RELEASE} RC${rc_number}" "tmp/${tag}"
+    else
+        echo "Dry run: not committing to dist.apache.org"
+    fi
 
     # clean up
     rm -rf tmp
@@ -71,10 +67,4 @@ main() {
     echo "Uploaded at https://dist.apache.org/repos/dist/dev/arrow/${tag}";
 }
 
-header() {
-    echo "============================================================"
-    echo "${1}"
-    echo "============================================================"
-}
-
 main "$@"
diff --git a/dev/release/04-java-upload.sh b/dev/release/04-java-upload.sh
index f7606bb08..8315d7a2f 100755
--- a/dev/release/04-java-upload.sh
+++ b/dev/release/04-java-upload.sh
@@ -21,22 +21,20 @@ set -e
 set -u
 set -o pipefail
 
-main() {
-    local -r source_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
-    local -r source_top_dir="$(cd "${source_dir}/../../" && pwd)"
+SOURCE_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+source "${SOURCE_DIR}/utils-common.sh"
+source "${SOURCE_DIR}/utils-prepare.sh"
 
-    if [ $# -ne 3 ]; then
-        echo "Usage: $0 <arrow-dir> <version> <rc-number>"
-        echo "Usage: $0 ../arrow 1.0.0 0"
+main() {
+    if [ $# -ne 2 ]; then
+        echo "Usage: $0 <arrow-dir> <rc-number>"
+        echo "Usage: $0 ../arrow 0"
         exit
     fi
 
     local -r arrow_dir="$(cd "$1" && pwd)"
-    local -r version="$2"
-    local -r rc_number="$3"
-    local -r tag="apache-arrow-adbc-${version}-rc${rc_number}"
-
-    : ${REPOSITORY:="apache/arrow-adbc"}
+    local -r rc_number="$2"
+    local -r tag="apache-arrow-adbc-${RELEASE}-rc${rc_number}"
 
     export ARROW_ARTIFACTS_DIR="$(pwd)/packages/${tag}/java"
     rm -rf "${ARROW_ARTIFACTS_DIR}"
@@ -51,7 +49,7 @@ main() {
        "${tag}"
 
     export UPLOAD_FORCE_SIGN=0
-    "${arrow_dir}/dev/release/06-java-upload.sh" "${version}" "${rc_number}"
+    "${arrow_dir}/dev/release/06-java-upload.sh" "${RELEASE}" "${rc_number}"
 }
 
 main "$@"
diff --git a/dev/release/05-linux-upload.sh b/dev/release/05-linux-upload.sh
index f48b81870..9b8f72652 100755
--- a/dev/release/05-linux-upload.sh
+++ b/dev/release/05-linux-upload.sh
@@ -21,22 +21,20 @@ set -e
 set -u
 set -o pipefail
 
-main() {
-    local -r source_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
-    local -r source_top_dir="$(cd "${source_dir}/../../" && pwd)"
+SOURCE_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+source "${SOURCE_DIR}/utils-common.sh"
+source "${SOURCE_DIR}/utils-prepare.sh"
 
-    if [ $# -ne 3 ]; then
-        echo "Usage: $0 <arrow-dir> <version> <rc-number>"
-        echo "Usage: $0 ../arrow 1.0.0 0"
+main() {
+    if [ $# -ne 2 ]; then
+        echo "Usage: $0 <arrow-dir> <rc-number>"
+        echo "Usage: $0 ../arrow 0"
         exit
     fi
 
     local -r arrow_dir="$(cd "$1" && pwd)"
-    local -r version="$2"
-    local -r rc_number="$3"
-    local -r tag="apache-arrow-adbc-${version}-rc${rc_number}"
-
-    : ${REPOSITORY:="apache/arrow-adbc"}
+    local -r rc_number="$2"
+    local -r tag="apache-arrow-adbc-${RELEASE}-rc${rc_number}"
 
     export ARROW_ARTIFACTS_DIR="$(pwd)/packages/${tag}/linux"
     rm -rf "${ARROW_ARTIFACTS_DIR}"
@@ -67,7 +65,7 @@ main() {
     export UPLOAD_ALMALINUX=${UPLOAD_ALMALINUX:-1}
     export UPLOAD_DEBIAN=${UPLOAD_DEBIAN:-1}
     export UPLOAD_UBUNTU=${UPLOAD_UBUNTU:-1}
-    "${arrow_dir}/dev/release/05-binary-upload.sh" "${version}" "${rc_number}"
+    "${arrow_dir}/dev/release/05-binary-upload.sh" "${RELEASE}" "${rc_number}"
 }
 
 main "$@"
diff --git a/dev/release/06-binary-verify.sh b/dev/release/06-binary-verify.sh
index 2a9aad46e..1130f0913 100755
--- a/dev/release/06-binary-verify.sh
+++ b/dev/release/06-binary-verify.sh
@@ -18,27 +18,27 @@
 
 set -euo pipefail
 
-main() {
-    local -r source_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
-    local -r source_top_dir="$( cd "${source_dir}/../../" && pwd )"
-
-    local -r version="$1"
-    local -r rc_number="$2"
-    local -r tag="apache-arrow-adbc-${version}-rc${rc_number}"
+SOURCE_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+source "${SOURCE_DIR}/utils-common.sh"
+source "${SOURCE_DIR}/utils-prepare.sh"
 
-    : ${WORKFLOW_REF:="main"}
-    : ${REPOSITORY:="apache/arrow-adbc"}
+main() {
+    if [ $# -ne 1 ]; then
+        echo "Usage: $0 <rc-number>"
+        echo "Usage: $0 0"
+        exit
+    fi
 
-    export SOURCE_DIR="${source_dir}"
-    source "${source_top_dir}/dev/release/utils-prepare.sh"
+    local -r rc_number="$1"
+    local -r tag="apache-arrow-adbc-${RELEASE}-rc${rc_number}"
 
-    echo "Starting GitHub Actions workflow on ${REPOSITORY} for ${version} 
RC${rc_number}"
+    echo "Starting GitHub Actions workflow on ${REPOSITORY} for ${RELEASE} 
RC${rc_number}"
 
     gh workflow run \
        --repo "${REPOSITORY}" \
        --ref "${WORKFLOW_REF}" \
        verify.yml \
-       --raw-field version="${version}" \
+       --raw-field version="${RELEASE}" \
        --raw-field rc="${rc_number}"
 
     local run_id=""
@@ -56,7 +56,7 @@ main() {
     echo "Started GitHub Actions workflow with ID: ${run_id}"
     echo "You can wait for completion via: gh run watch --repo ${REPOSITORY} 
${run_id}"
 
-    set_resolved_issues "${version}"
+    set_resolved_issues "${RELEASE}"
 
     echo "The following draft email has been created to send to the"
     echo "[email protected] mailing list"
@@ -67,11 +67,19 @@ main() {
 
     cat <<MAIL
 To: [email protected]
-Subject: [VOTE] Release Apache Arrow ADBC ${version} - RC${rc_number}
+Subject: [VOTE] Release Apache Arrow ADBC ${RELEASE} - RC${rc_number}
 
 Hello,
 
-I would like to propose the following release candidate (RC${rc_number}) of 
Apache Arrow ADBC version ${version}. This is a release consisting of 
${RESOLVED_ISSUES} resolved GitHub issues [1].
+I would like to propose the following release candidate (RC${rc_number}) of 
Apache Arrow ADBC version ${RELEASE}. This is a release consisting of 
${RESOLVED_ISSUES} resolved GitHub issues [1].
+
+The subcomponents are versioned independently:
+
+- C/C++/GLib/Go/Python/Ruby: ${VERSION_NATIVE}
+- C#: ${VERSION_CSHARP}
+- Java: ${VERSION_JAVA}
+- R: ${VERSION_R}
+- Rust: ${VERSION_RUST}
 
 This release candidate is based on commit: ${commit} [2]
 
@@ -85,13 +93,13 @@ See also a verification result on GitHub Actions [11].
 
 The vote will be open for at least 72 hours.
 
-[ ] +1 Release this as Apache Arrow ADBC ${version}
+[ ] +1 Release this as Apache Arrow ADBC ${RELEASE}
 [ ] +0
-[ ] -1 Do not release this as Apache Arrow ADBC ${version} because...
+[ ] -1 Do not release this as Apache Arrow ADBC ${RELEASE} because...
 
 Note: to verify APT/YUM packages on macOS/AArch64, you must \`export 
DOCKER_DEFAULT_PLATFORM=linux/amd64\`. (Or skip this step by \`export 
TEST_APT=0 TEST_YUM=0\`.)
 
-[1]: 
https://github.com/apache/arrow-adbc/issues?q=is%3Aissue+milestone%3A%22ADBC+Libraries+${version}%22+is%3Aclosed
+[1]: 
https://github.com/apache/arrow-adbc/issues?q=is%3Aissue+milestone%3A%22ADBC+Libraries+${RELEASE}%22+is%3Aclosed
 [2]: https://github.com/apache/arrow-adbc/commit/${commit}
 [3]: https://dist.apache.org/repos/dist/dev/arrow/${tag}/
 [4]: https://apache.jfrog.io/artifactory/arrow/almalinux-rc/
diff --git a/dev/release/post-01-upload.sh b/dev/release/post-01-upload.sh
index e857278a0..1d58e6b50 100755
--- a/dev/release/post-01-upload.sh
+++ b/dev/release/post-01-upload.sh
@@ -18,30 +18,33 @@
 
 set -eu
 
+SOURCE_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+source "${SOURCE_DIR}/utils-common.sh"
+source "${SOURCE_DIR}/utils-prepare.sh"
+
 main() {
-    if [ "$#" -ne 2 ]; then
-        echo "Usage: $0 <version> <rc-num>"
+    if [ "$#" -ne 1 ]; then
+        echo "Usage: $0 <rc-num>"
         exit 1
     fi
-    local -r version="$1"
-    local -r rc_number="$2"
-    local -r tag="apache-arrow-adbc-${version}-rc${rc_number}"
+    local -r rc_number="$1"
+    local -r tag="apache-arrow-adbc-${RELEASE}-rc${rc_number}"
 
-    rc_id="apache-arrow-adbc-${version}-rc${rc_number}"
-    release_id="apache-arrow-adbc-${version}"
+    rc_id="apache-arrow-adbc-${RELEASE}-rc${rc_number}"
+    release_id="apache-arrow-adbc-${RELEASE}"
     echo "Copying dev/ to release/"
     svn \
         cp \
-        -m "Apache Arrow ADBC ${version}" \
+        -m "Apache Arrow ADBC ${RELEASE}" \
         https://dist.apache.org/repos/dist/dev/arrow/${rc_id} \
         https://dist.apache.org/repos/dist/release/arrow/${release_id}
 
     echo "Create final tag"
-    git tag -a "apache-arrow-adbc-${version}" -m "ADBC Libraries ${version}" 
"${tag}^{}"
+    git tag -a "apache-arrow-adbc-${RELEASE}" -m "ADBC Libraries ${RELEASE}" 
"${tag}^{}"
 
     echo "Success! The release is available here:"
     echo "  https://dist.apache.org/repos/dist/release/arrow/${release_id}";
-    echo "Please push the tag apache-arrow-adbc-${version}!"
+    echo "Please push the tag apache-arrow-adbc-${RELEASE}!"
 }
 
 main "$@"
diff --git a/dev/release/post-02-binary.sh b/dev/release/post-02-binary.sh
index 16a484aea..cdeff62ed 100755
--- a/dev/release/post-02-binary.sh
+++ b/dev/release/post-02-binary.sh
@@ -21,36 +21,27 @@ set -e
 set -u
 set -o pipefail
 
-main() {
-    local -r source_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
-    local -r source_top_dir="$( cd "${source_dir}/../../" && pwd )"
+SOURCE_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+source "${SOURCE_DIR}/utils-common.sh"
+source "${SOURCE_DIR}/utils-prepare.sh"
 
-    if [ "$#" -ne 2 ]; then
-        echo "Usage: $0 <version> <rc-num>"
+main() {
+    if [ "$#" -ne 1 ]; then
+        echo "Usage: $0 <rc-num>"
         exit 1
     fi
+    local -r rc_number="$1"
+    local -r tag="apache-arrow-adbc-${RELEASE}-rc${rc_number}"
 
-    local -r version="$1"
-    local -r rc_number="$2"
-    local -r tag="apache-arrow-adbc-${version}-rc${rc_number}"
-
-    : ${REPOSITORY:="apache/arrow-adbc"}
-
-    header "Publishing release ${version}"
+    header "Publishing release ${RELEASE}"
 
     gh release edit \
        --verify-tag \
        --repo "${REPOSITORY}" \
        "${tag}" \
-       --title="ADBC Libraries ${version}" \
+       --title="ADBC Libraries ${RELEASE}" \
        --prerelease=false \
-       --tag="apache-arrow-adbc-${version}"
-}
-
-header() {
-    echo "============================================================"
-    echo "${1}"
-    echo "============================================================"
+       --tag="apache-arrow-adbc-${RELEASE}"
 }
 
 main "$@"
diff --git a/dev/release/post-03-python.sh b/dev/release/post-03-python.sh
index 40e555992..cd13b5c64 100755
--- a/dev/release/post-03-python.sh
+++ b/dev/release/post-03-python.sh
@@ -21,24 +21,21 @@ set -e
 set -u
 set -o pipefail
 
-main() {
-    local -r source_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
-    local -r source_top_dir="$( cd "${source_dir}/../../" && pwd )"
+SOURCE_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+source "${SOURCE_DIR}/utils-common.sh"
+source "${SOURCE_DIR}/utils-prepare.sh"
 
-    if [ "$#" -ne 2 ]; then
-        echo "Usage: $0 <version> <rc-num>"
+main() {
+    if [ "$#" -ne 1 ]; then
+        echo "Usage: $0 <rc-num>"
         exit 1
     fi
-
-    local -r version="$1"
-    local -r rc_number="$2"
-    local -r tag="apache-arrow-adbc-${version}"
-
-    : ${REPOSITORY:="apache/arrow-adbc"}
+    local -r rc_number="$1"
+    local -r tag="apache-arrow-adbc-${RELEASE}-rc${rc_number}"
 
     local -r tmp=$(mktemp -d -t "arrow-post-python.XXXXX")
 
-    header "Downloading Python packages for ${version}"
+    header "Downloading Python packages for ${RELEASE}"
 
     gh release download \
        --repo "${REPOSITORY}" \
@@ -47,7 +44,7 @@ main() {
        --pattern "*.whl" \
        --pattern "adbc_*.tar.gz" # sdist
 
-    header "Uploading Python packages for ${version}"
+    header "Uploading Python packages for ${RELEASE}"
 
     TWINE_ARGS=""
     if [ "${TEST_PYPI:-0}" -gt 0 ]; then
@@ -62,10 +59,4 @@ main() {
     echo "Success!"
 }
 
-header() {
-    echo "============================================================"
-    echo "${1}"
-    echo "============================================================"
-}
-
 main "$@"
diff --git a/dev/release/post-04-go.sh b/dev/release/post-04-go.sh
index 0ecb99f23..e623fccca 100755
--- a/dev/release/post-04-go.sh
+++ b/dev/release/post-04-go.sh
@@ -16,19 +16,30 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-#
-set -ue
+
+set -e
+set -u
+set -o pipefail
 
 SOURCE_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+source "${SOURCE_DIR}/utils-common.sh"
+source "${SOURCE_DIR}/utils-prepare.sh"
+
+main() {
+    if [ "$#" -ne 0 ]; then
+        echo "Usage: $0"
+        exit 1
+    fi
+
+    header "Tagging Go release ${RELEASE}"
 
-if [ "$#" -ne 1 ]; then
-    echo "Usage: $0 <version>"
-    exit
-fi
+    version_tag="apache-arrow-adbc-${VERSION_NATIVE}"
+    go_arrow_tag="go/adbc/v${VERSION_NATIVE}"
 
-version=$1
-version_tag="apache-arrow-adbc-${version}"
-go_arrow_tag="go/adbc/v${version}"
+    git tag "${go_arrow_tag}" "${version_tag}"
+    echo "Created tag ${go_arrow_tag}"
+    echo "Please verify and push the tag:"
+    echo git push apache "${go_arrow_tag}"
+}
 
-git tag "${go_arrow_tag}" "${version_tag}"
-git push apache "${go_arrow_tag}"
+main "$@"
diff --git a/dev/release/post-05-linux.sh b/dev/release/post-05-linux.sh
index 837527dd6..2cc6a3a4f 100755
--- a/dev/release/post-05-linux.sh
+++ b/dev/release/post-05-linux.sh
@@ -21,35 +21,27 @@ set -e
 set -u
 set -o pipefail
 
-main() {
-    local -r source_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
-    local -r source_top_dir="$( cd "${source_dir}/../../" && pwd )"
+SOURCE_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+source "${SOURCE_DIR}/utils-common.sh"
+source "${SOURCE_DIR}/utils-prepare.sh"
 
-    if [ "$#" -ne 3 ]; then
-        echo "Usage: $0 <arrow-dir> <version> <rc-num>"
-        echo "Usage: $0 ../arrow 1.0.0 0"
+main() {
+    if [ "$#" -ne 2 ]; then
+        echo "Usage: $0 <arrow-dir> <rc-num>"
+        echo "Usage: $0 ../arrow 0"
         exit 1
     fi
 
     local -r arrow_dir="$(cd "$1" && pwd)"
-    local -r version="$2"
-    local -r rc_number="$3"
-
-    : ${REPOSITORY:="apache/arrow-adbc"}
+    local -r rc_number="$2"
 
-    header "Deploying APT/Yum repositories ${version}"
+    header "Deploying APT/Yum repositories ${RELEASE}"
 
     export DEPLOY_DEFAULT=0
     export DEPLOY_ALMALINUX=${DEPLOY_ALMALINUX:-1}
     export DEPLOY_DEBIAN=${DEPLOY_DEBIAN:-1}
     export DEPLOY_UBUNTU=${DEPLOY_UBUNTU:-1}
-    "${arrow_dir}/dev/release/post-02-binary.sh" "${version}" "${rc_number}"
-}
-
-header() {
-    echo "============================================================"
-    echo "${1}"
-    echo "============================================================"
+    "${arrow_dir}/dev/release/post-02-binary.sh" "${RELEASE}" "${rc_number}"
 }
 
 main "$@"
diff --git a/dev/release/post-06-ruby.sh b/dev/release/post-06-ruby.sh
index 56a558968..cb7c79ed4 100755
--- a/dev/release/post-06-ruby.sh
+++ b/dev/release/post-06-ruby.sh
@@ -21,24 +21,24 @@ set -e
 set -u
 set -o pipefail
 
+SOURCE_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+source "${SOURCE_DIR}/utils-common.sh"
+source "${SOURCE_DIR}/utils-prepare.sh"
+
 main() {
-    if [ "$#" -ne 1 ]; then
-        echo "Usage: $0 <version>"
-        echo "Usage: $0 1.0.0"
+    if [ "$#" -ne 0 ]; then
+        echo "Usage: $0"
         exit 1
     fi
 
-    local -r version="$1"
-
-    archive_name=apache-arrow-adbc-${version}
-
-    tar_gz=${archive_name}.tar.gz
+    local -r archive_name=apache-arrow-adbc-${RELEASE}
+    local -r tar_gz=${archive_name}.tar.gz
 
     rm -f ${tar_gz}
     curl \
       --remote-name \
       --fail \
-      https://downloads.apache.org/arrow/apache-arrow-adbc-${version}/${tar_gz}
+      https://downloads.apache.org/arrow/apache-arrow-adbc-${RELEASE}/${tar_gz}
     rm -rf ${archive_name}
     tar xf ${tar_gz}
 
@@ -53,7 +53,7 @@ main() {
     rm -f ${tar_gz}
 
     echo "Success! The released RubyGems are available here:"
-    echo "  https://rubygems.org/gems/red-adbc/versions/${version}";
+    echo "  https://rubygems.org/gems/red-adbc/versions/${VERSION_NATIVE}";
 }
 
 main "$@"
diff --git a/dev/release/post-07-csharp.sh b/dev/release/post-07-csharp.sh
index 11e66f384..3bc01eaab 100755
--- a/dev/release/post-07-csharp.sh
+++ b/dev/release/post-07-csharp.sh
@@ -24,24 +24,21 @@ set -u
 set -o pipefail
 
 main() {
-  if [ "$#" -ne 1 ]; then
-    echo "Usage: $0 <version>"
+  if [ "$#" -ne 0 ]; then
+    echo "Usage: $0"
     exit
   fi
 
-  local -r version="$1"
-  local -r tag="apache-arrow-adbc-${version}"
+  local -r tag="apache-arrow-adbc-${RELEASE}"
 
   if [ -z "${NUGET_API_KEY}" ]; then
     echo "NUGET_API_KEY is empty"
     exit 1
   fi
 
-  : ${REPOSITORY:="apache/arrow-adbc"}
-
   local -r tmp=$(mktemp -d -t "arrow-post-csharp.XXXXX")
 
-  header "Downloading C# packages for ${version}"
+  header "Downloading C# packages for ${VERSION_CSHARP}"
 
   gh release download \
      --repo "${REPOSITORY}" \
@@ -51,11 +48,11 @@ main() {
      --pattern "*.snupkg"
 
   local base_names=()
-  base_names+=(Apache.Arrow.Adbc.${version})
-  base_names+=(Apache.Arrow.Adbc.Client.${version})
-  base_names+=(Apache.Arrow.Adbc.Drivers.BigQuery.${version})
-  base_names+=(Apache.Arrow.Adbc.Drivers.FlightSql.${version})
-  base_names+=(Apache.Arrow.Adbc.Drivers.Interop.Snowflake.${version})
+  base_names+=(Apache.Arrow.Adbc.${VERSION_CSHARP})
+  base_names+=(Apache.Arrow.Adbc.Client.${VERSION_CSHARP})
+  base_names+=(Apache.Arrow.Adbc.Drivers.BigQuery.${VERSION_CSHARP})
+  base_names+=(Apache.Arrow.Adbc.Drivers.FlightSql.${VERSION_CSHARP})
+  base_names+=(Apache.Arrow.Adbc.Drivers.Interop.Snowflake.${VERSION_CSHARP})
   for base_name in "${base_names[@]}"; do
     dotnet nuget push \
       "${tmp}/${base_name}.nupkg" \
@@ -66,13 +63,7 @@ main() {
   rm -rf "${tmp}"
 
   echo "Success! The released NuGet package is available here:"
-  echo "  https://www.nuget.org/packages/Apache.Arrow.Adbc/${version}";
-}
-
-header() {
-    echo "============================================================"
-    echo "${1}"
-    echo "============================================================"
+  echo "  https://www.nuget.org/packages/Apache.Arrow.Adbc/${VERSION_CSHARP}";
 }
 
 main "$@"
diff --git a/dev/release/post-09-bump-versions.sh 
b/dev/release/post-09-bump-versions.sh
index 152b34e85..8eecaa3b6 100755
--- a/dev/release/post-09-bump-versions.sh
+++ b/dev/release/post-09-bump-versions.sh
@@ -20,39 +20,52 @@
 set -ue
 
 SOURCE_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+source "${SOURCE_DIR}/utils-common.sh"
+source "${SOURCE_DIR}/utils-prepare.sh"
 
-if [ "$#" -ne 3 ]; then
-  echo "Usage: $0 <arrow-dir> <version> <next_version>"
-  echo "Usage: $0 ../arrow 0.1.0 1.0.0"
-  exit 1
-fi
+main() {
+    if [ "$#" -ne 1 ]; then
+        echo "Usage: $0 <arrow-dir>"
+        echo "Usage: $0 ../arrow"
+        exit 1
+    fi
 
-. $SOURCE_DIR/utils-prepare.sh
+    local -r arrow_dir="$1"
 
-arrow_dir=$1
-version=$2
-next_version=$3
-next_version_snapshot="${next_version}-SNAPSHOT"
+    echo "Release: ${RELEASE}"
+    echo "Previous Release: ${PREVIOUS_RELEASE}"
 
-export ARROW_SOURCE="$(cd "${arrow_dir}" && pwd)"
+    local -r tag="apache-arrow-adbc-${RELEASE}"
+    if git rev-parse -q --verify "refs/tags/${tag}" >/dev/null; then
+        echo "The tag ${tag} already exists."
+        echo "Please update ${SOURCE_DIR}/versions.env."
+        exit 1
+    fi
 
-########################## Update Snapshot Version ##########################
+    read -p "Please confirm that ${SOURCE_DIR}/versions.env has been updated. "
 
-git fetch --all --prune --tags --force -j$(nproc)
-git switch main
-git rebase apache/main
+    export ARROW_SOURCE="$(cd "${arrow_dir}" && pwd)"
 
-echo "Updating versions for ${next_version_snapshot}"
-update_versions "${version}" "${next_version}" "snapshot"
-git commit -m "chore: update versions for ${next_version_snapshot}"
-echo "Bumped versions on branch."
+    ########################## Update Snapshot Version 
##########################
 
-############################# Update Changelog ##############################
+    git fetch --all --prune --tags --force -j$(nproc)
+    git switch main
+    git rebase apache/main
 
-git checkout apache-arrow-adbc-${version} -- CHANGELOG.md
-git commit -m "chore: update changelog for ${version}"
-echo "Updated changelog on branch."
+    echo "Updating versions for ${RELEASE}-SNAPSHOT"
+    update_versions "snapshot"
+    git commit -m "chore: update versions for ${RELEASE}-SNAPSHOT"
+    echo "Bumped versions on branch."
 
-echo "Review the commits just made."
-echo "Then, push changes to apache/arrow-adbc:main with:"
-echo git push apache main
+    ############################# Update Changelog 
##############################
+
+    git checkout apache-arrow-adbc-${PREVIOUS_RELEASE} -- CHANGELOG.md
+    git commit -m "chore: update changelog for ${PREVIOUS_RELEASE}"
+    echo "Updated changelog on branch."
+
+    echo "Review the commits just made."
+    echo "Then, push changes to apache/arrow-adbc:main with:"
+    echo git push apache main
+}
+
+main "$@"
diff --git a/dev/release/post-10-website.sh b/dev/release/post-10-website.sh
index 839090aee..0d0f7141f 100755
--- a/dev/release/post-10-website.sh
+++ b/dev/release/post-10-website.sh
@@ -18,35 +18,31 @@
 
 set -eu
 
+SOURCE_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+source "${SOURCE_DIR}/utils-common.sh"
+source "${SOURCE_DIR}/utils-prepare.sh"
+
 main() {
-    if [ "$#" -ne 3 ]; then
-        echo "Usage: $0 <arrow-site-checkout> <previous-version> <version>"
+    if [ "$#" -ne 1 ]; then
+        echo "Usage: $0 <arrow-site-checkout>"
         exit 1
     fi
     local -r arrow_site="$1"
-    local -r prev_version="$2"
-    local -r version="$3"
-
-    local -r source_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
-    local -r source_top_dir="$( cd "${source_dir}/../../" && pwd )"
-
-    export SOURCE_DIR="${source_dir}"
-    source "${source_top_dir}/dev/release/utils-prepare.sh"
 
     # Extract ADBC spec version from Doxygen macro in header.
-    local -r spec_version=$(grep '[\]version' "${source_top_dir}/adbc.h" | awk 
'{print $NF}')
+    local -r spec_version=$(grep '[\]version' "${SOURCE_TOP_DIR}/adbc.h" | awk 
'{print $NF}')
     local -r date=${POST_DATE:-$(date "+%Y-%m-%d")}
-    local -r filename="${arrow_site}/_posts/${date}-adbc-${version}-release.md"
-    local -r contributor_command="git shortlog --perl-regexp 
--author='^((?!dependabot\[bot\]).*)$' -sn 
apache-arrow-adbc-${prev_version}..apache-arrow-adbc-${version}"
+    local -r filename="${arrow_site}/_posts/${date}-adbc-${RELEASE}-release.md"
+    local -r contributor_command="git shortlog --perl-regexp 
--author='^((?!dependabot\[bot\]).*)$' -sn 
apache-arrow-adbc-${PREVIOUS_RELEASE}..apache-arrow-adbc-${RELEASE}"
     local -r contributor_list=$(eval "${contributor_command}")
     local -r contributors=$(echo "${contributor_list}" | wc -l)
 
-    set_resolved_issues "${version}"
+    set_resolved_issues "${RELEASE}"
 
     cat <<EOF | tee "${filename}"
 ---
 layout: post
-title: "Apache Arrow ADBC ${version} (Libraries) Release"
+title: "Apache Arrow ADBC ${RELEASE} (Libraries) Release"
 date: "${date} 00:00:00"
 author: pmc
 categories: [release]
@@ -70,14 +66,22 @@ limitations under the License.
 {% endcomment %}
 -->
 
-The Apache Arrow team is pleased to announce the ${version} release of
+The Apache Arrow team is pleased to announce the ${RELEASE} release of
 the Apache Arrow ADBC libraries. This covers includes [**${RESOLVED_ISSUES}
 resolved issues**][1] from [**${contributors} distinct contributors**][2].
 
 This is a release of the **libraries**, which are at version
-${version}.  The **API specification** is versioned separately and is
+${RELEASE}.  The **API specification** is versioned separately and is
 at version ${spec_version}.
 
+The subcomponents are versioned independently:
+
+- C/C++/GLib/Go/Python/Ruby: ${VERSION_NATIVE}
+- C#: ${VERSION_CSHARP}
+- Java: ${VERSION_JAVA}
+- R: ${VERSION_R}
+- Rust: ${VERSION_RUST}
+
 The release notes below are not exhaustive and only expose selected
 highlights of the release. Many other bugfixes and improvements have
 been made: we refer you to the [complete changelog][3].
diff --git a/dev/release/post-04-go.sh b/dev/release/utils-common.sh
old mode 100755
new mode 100644
similarity index 58%
copy from dev/release/post-04-go.sh
copy to dev/release/utils-common.sh
index 0ecb99f23..2cec70b66
--- a/dev/release/post-04-go.sh
+++ b/dev/release/utils-common.sh
@@ -1,5 +1,4 @@
 #!/usr/bin/env bash
-#
 # 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
@@ -16,19 +15,27 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-#
-set -ue
 
-SOURCE_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+: ${DRY_RUN:=0}
+: ${REPOSITORY:="apache/arrow-adbc"}
+: ${WORKFLOW_REF:="main"}
+
+SOURCE_TOP_DIR="$( cd "${SOURCE_DIR}/../../" && pwd )"
 
-if [ "$#" -ne 1 ]; then
-    echo "Usage: $0 <version>"
-    exit
+if [[ ! -f "${SOURCE_DIR}/.env" ]]; then
+    echo "You must create ${SOURCE_DIR}/.env"
+    echo "You can use ${SOURCE_DIR}/.env.example as a template"
 fi
 
-version=$1
-version_tag="apache-arrow-adbc-${version}"
-go_arrow_tag="go/adbc/v${version}"
+source "${SOURCE_DIR}/.env"
+
+header() {
+    echo "============================================================"
+    echo "${1}"
+    echo "============================================================"
+}
+
+header "Config"
 
-git tag "${go_arrow_tag}" "${version_tag}"
-git push apache "${go_arrow_tag}"
+echo "Repository: ${REPOSITORY}"
+echo "Source Directory: ${SOURCE_TOP_DIR}"
diff --git a/dev/release/utils-prepare.sh b/dev/release/utils-prepare.sh
index 3236ab1da..54b644142 100644
--- a/dev/release/utils-prepare.sh
+++ b/dev/release/utils-prepare.sh
@@ -16,32 +16,52 @@
 # under the License.
 
 ADBC_DIR="${SOURCE_DIR}/../.."
+source "${SOURCE_DIR}/versions.env"
 
 update_versions() {
-  local base_version=$1
-  local next_version=$2
-  local type=$3
+  local type=$1
 
+  local conda_version="${VERSION_NATIVE}"
+  local csharp_version="${VERSION_CSHARP}"
+  local linux_version="${RELEASE}"
+  local rust_version="${VERSION_CSHARP}"
   case ${type} in
     release)
-      local version=${base_version}
-      local conda_version=${base_version}
-      local docs_version=${base_version}
-      local py_version=${base_version}
-      local r_version=${base_version}
+      local c_version="${VERSION_NATIVE}"
+      local docs_version="${RELEASE}"
+      local glib_version="${VERSION_NATIVE}"
+      local java_version="${VERSION_JAVA}"
+      local py_version="${VERSION_NATIVE}"
+      local r_version="${VERSION_R}"
       ;;
     snapshot)
-      local version=${next_version}-SNAPSHOT
-      local conda_version=${next_version}
-      local docs_version="${next_version} (dev)"
-      local py_version="${next_version}dev"
-      local r_version="${base_version}.9000"
+      local c_version="${VERSION_NATIVE}-SNAPSHOT"
+      local docs_version="${RELEASE} (dev)"
+      local glib_version="${VERSION_NATIVE}-SNAPSHOT"
+      local java_version="${VERSION_JAVA}-SNAPSHOT"
+      local py_version="${VERSION_NATIVE}dev"
+      local r_version="${VERSION_R}.9000"
+      ;;
+    *)
+      echo "Unknown type: ${type}"
+      exit 1
       ;;
   esac
-  local major_version=${version%%.*}
+
+  header "Updating versions for release ${RELEASE}"
+  echo "C: ${c_version}"
+  echo "Conda: ${conda_version}"
+  echo "C#: ${csharp_version}"
+  echo "Docs: ${docs_version}"
+  echo "GLib/Ruby: ${glib_version}"
+  echo "Java: ${java_version}"
+  echo "Linux: ${linux_version}"
+  echo "Python: ${py_version}"
+  echo "R: ${r_version}"
+  echo "Rust: ${rust_version}"
 
   pushd "${ADBC_DIR}/c/"
-  sed -i.bak -E "s/set\(ADBC_VERSION \".+\"\)/set(ADBC_VERSION 
\"${version}\")/g" cmake_modules/AdbcVersion.cmake
+  sed -i.bak -E "s/set\(ADBC_VERSION \".+\"\)/set(ADBC_VERSION 
\"${c_version}\")/g" cmake_modules/AdbcVersion.cmake
   rm cmake_modules/AdbcVersion.cmake.bak
   git add cmake_modules/AdbcVersion.cmake
   popd
@@ -52,7 +72,7 @@ update_versions() {
   git add meta.yaml
   popd
 
-  sed -i.bak -E "s|<Version>.+</Version>|<Version>${version}</Version>|" 
"${ADBC_DIR}/csharp/Directory.Build.props"
+  sed -i.bak -E 
"s|<Version>.+</Version>|<Version>${csharp_version}</Version>|" 
"${ADBC_DIR}/csharp/Directory.Build.props"
   rm "${ADBC_DIR}/csharp/Directory.Build.props.bak"
   git add "${ADBC_DIR}/csharp/Directory.Build.props"
 
@@ -61,14 +81,14 @@ update_versions() {
   git add "${ADBC_DIR}/docs/source/conf.py"
 
   pushd "${ADBC_DIR}/java/"
-  mvn versions:set "-DnewVersion=${version}" '-DoldVersion=*'
+  mvn -B versions:set "-DnewVersion=${java_version}" '-DoldVersion=*'
   find . -type f -name pom.xml.versionsBackup -delete
-  sed -i.bak -E 
"s|<adbc\\.version>.+</adbc\\.version>|<adbc.version>${version}</adbc.version>|g"
 pom.xml
+  sed -i.bak -E 
"s|<adbc\\.version>.+</adbc\\.version>|<adbc.version>${java_version}</adbc.version>|g"
 pom.xml
   rm pom.xml.bak
   git add "pom.xml" "**/pom.xml"
   popd
 
-  sed -i.bak -E "s/version: '.+'/version: '${version}'/g" 
"${ADBC_DIR}/glib/meson.build"
+  sed -i.bak -E "s/version: '.+'/version: '${glib_version}'/g" 
"${ADBC_DIR}/glib/meson.build"
   rm "${ADBC_DIR}/glib/meson.build.bak"
   git add "${ADBC_DIR}/glib/meson.build"
 
@@ -76,7 +96,7 @@ update_versions() {
   rm "${ADBC_DIR}"/python/adbc_*/adbc_*/_static_version.py.bak
   git add "${ADBC_DIR}"/python/adbc_*/adbc_*/_static_version.py
 
-  sed -i.bak -E "s/VERSION = \".+\"/VERSION = \"${version}\"/g" 
"${ADBC_DIR}/ruby/lib/adbc/version.rb"
+  sed -i.bak -E "s/VERSION = \".+\"/VERSION = \"${glib_version}\"/g" 
"${ADBC_DIR}/ruby/lib/adbc/version.rb"
   rm "${ADBC_DIR}/ruby/lib/adbc/version.rb.bak"
   git add "${ADBC_DIR}/ruby/lib/adbc/version.rb"
 
@@ -86,20 +106,20 @@ update_versions() {
     git add "${desc_file}"
   done
 
-  sed -i.bak -E "s/^version = \".+\"/version = \"${version}\"/" 
"${ADBC_DIR}/rust/Cargo.toml"
+  sed -i.bak -E "s/^version = \".+\"/version = \"${rust_version}\"/" 
"${ADBC_DIR}/rust/Cargo.toml"
   rm "${ADBC_DIR}/rust/Cargo.toml.bak"
   git add "${ADBC_DIR}/rust/Cargo.toml"
 
   if [ ${type} = "release" ]; then
     pushd "${ADBC_DIR}/ci/linux-packages"
-    rake version:update VERSION=${version}
+    rake version:update VERSION=${linux_version}
     git add debian*/changelog yum/*.spec.in
     popd
   else
     so_version() {
       local -r version=$1
-      local -r major_version=$(echo $version | sed -E -e 
's/^([0-9]+)\.[0-9]+\.[0-9]+$/\1/')
-      local -r minor_version=$(echo $version | sed -E -e 
's/^[0-9]+\.([0-9]+)\.[0-9]+$/\1/')
+      local -r major_version=$(echo $c_version | sed -E -e 
's/^([0-9]+)\.[0-9]+\.[0-9]+$/\1/')
+      local -r minor_version=$(echo $c_version | sed -E -e 
's/^[0-9]+\.([0-9]+)\.[0-9]+$/\1/')
       printf "%0d%02d" ${major_version} ${minor_version}
     }
     local -r deb_lib_suffix=$(so_version ${base_version})
diff --git a/dev/release/post-04-go.sh b/dev/release/versions.env
old mode 100755
new mode 100644
similarity index 61%
copy from dev/release/post-04-go.sh
copy to dev/release/versions.env
index 0ecb99f23..fd90ee917
--- a/dev/release/post-04-go.sh
+++ b/dev/release/versions.env
@@ -1,5 +1,3 @@
-#!/usr/bin/env bash
-#
 # 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
@@ -16,19 +14,17 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-#
-set -ue
-
-SOURCE_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
-
-if [ "$#" -ne 1 ]; then
-    echo "Usage: $0 <version>"
-    exit
-fi
 
-version=$1
-version_tag="apache-arrow-adbc-${version}"
-go_arrow_tag="go/adbc/v${version}"
+# The release as a whole has a counter-based identifier (as in, 12 is the
+# 12th release of ADBC).  This is used to identify tags, branches, and so on.
+RELEASE="12"
+PREVIOUS_RELEASE="0.11.0"
 
-git tag "${go_arrow_tag}" "${version_tag}"
-git push apache "${go_arrow_tag}"
+# Individual components will have a SemVer.
+VERSION_CSHARP="0.12.0"
+VERSION_JAVA="0.12.0"
+# Because C++/GLib/Go/Python/Ruby are effectively tied at the hip, they share
+# a single version number. Also covers Conda/Linux packages.
+VERSION_NATIVE="1.0.0"
+VERSION_R="0.12.0"
+VERSION_RUST="0.12.0"

Reply via email to