This is an automated email from the ASF dual-hosted git repository.
sgilmore pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow.git
The following commit(s) were added to refs/heads/main by this push:
new 6ec2f222ff GH-41102: [Packaging][Release] Create unique git tags for
release candidates (e.g. apache-arrow-{MAJOR}.{MINOR}.{PATCH}-rc{RC_NUM})
(#41131)
6ec2f222ff is described below
commit 6ec2f222ff7a6ad9dcb3b5b7edc38c414259aee2
Author: Sarah Gilmore <[email protected]>
AuthorDate: Thu Jun 13 09:06:29 2024 -0400
GH-41102: [Packaging][Release] Create unique git tags for release
candidates (e.g. apache-arrow-{MAJOR}.{MINOR}.{PATCH}-rc{RC_NUM}) (#41131)
### Rationale for this change
As per @ kou's
[suggestion](https://github.com/apache/arrow/pull/40956#discussion_r1556447060)
in #40956, we should create unique git tags (e.g.
`apache-arrow-{MAJOR}.{MINOR}.{VERSION}-rc{RC_NUM}`) instead re-using the same
git tag (`apache-arrow-{MAJOR}.{MINOR}.{VERSION}`) for each release candidate.
The official release candidate tag (`apache-arrow-{MAJOR}.{MINOR}.{VERSION}`)
should be created **only** after a release candidate is voted on and accepted.
This "official" release tag s [...]
The new release workflow could look like the following:
> 1. Create a apache-arrow-X.Y.Z-rc0 tag for X.Y.Z RC0
> 2. (Found a problem for X.Y.Z RC0)
> 3. Create a apache-arrow-X.Y.Z-rc1 tag for X.Y.Z RC1
> 4. Vote
> 5. Passed
> 6. Create a apache-arrow-X.Y.Z tag from apache-arrow-X.Y.Z-rc1 ike
apache/arrow-adbc and apache/arrow-flight-sql-postgresql do
See @ kou's
[comment](https://github.com/apache/arrow/pull/40956#discussion_r1556447060)
for more details.
### What changes are included in this PR?
1. Updated `dev/release/01-prepare.sh` to create release-candidate-specific
git tags (e.g. `apache-arrow-{MAJOR}.{MINOR}.{PATCH}-rc{RC_NUM}`).
2. Updated scripts in `dev/release` to use the new git tag name.
3. Added GitHub Workflow file `publish_release_candidate.yml`. This
workflow is triggered when a release candidate git tag is pushed and creates a
Prerelease GitHub Release.
4. Added logic to `dev/release/02-post-binary.sh` to create and push the
release git tag (i.e. `apache-arrow-{MAJOR}.{MINOR}.{PATCH}`).
5. Added GitHub Workflow `publish_release.yml`. This workflow is triggered
when the release tag is pushed and creates a GitHub Release for the approved
release (i.e. the voted upon release).
6. Added `dev/release/post-16-delete-release-candidates.sh` to delete the
release candidate git tags and their associated GitHub Releases.
7. Updated `docs/developers/release.rst` with the new steps.
### Are these changes tested?
1. We were not able to verify the changes made to the scripts in
`dev/release`. Any suggestions on how we can verify these scripts would be much
appreciated :)
2. We did test the new GitHub Workflows (`publish_release_candidate.yml`
and `publish_release.yml`) work as intended by pushing git tags to
[`mathworks/arrow`](https://github.com/mathworks/arrow).
### Are there any user-facing changes?
No.
### Open Questions
1. We noticed that
[apache/arrow-flight-sql-postgresql](https://github.com/apache/arrow-flight-sql-postgresql/releases)
does **not** delete the release candidate Prereleases from their GitHub
Releases area. Should we be doing the same? Or would it be preferable to just
delete the the release candidates **without** deleting the release candidate
tags.
2. We're not that familiar with ruby, so we're not sure if the changes we
made to `dev/release/02-source-test.rb` make sense.
### Future Directions
1. Continue working on #40956
2. Add logic to auto-sign release artifacts in GitHub Actions Workflows.
* GitHub Issue: #41102
Lead-authored-by: Sarah Gilmore <[email protected]>
Co-authored-by: Sarah Gilmore <[email protected]>
Co-authored-by: Sutou Kouhei <[email protected]>
Signed-off-by: Sarah Gilmore <[email protected]>
---
.github/workflows/release.yml | 74 ++++++++++++++++
.github/workflows/release_candidate.yml | 70 +++++++++++++++
dev/release/01-prepare.sh | 12 +--
dev/release/02-source-test.rb | 7 +-
dev/release/02-source.sh | 59 +++++--------
dev/release/03-binary-submit.sh | 2 +-
dev/release/07-matlab-upload.sh | 89 +++++++++++++++++++
.../{07-binary-verify.sh => 08-binary-verify.sh} | 0
.../{07-binary-verify.sh => post-01-tag.sh} | 20 ++---
.../{post-01-upload.sh => post-02-upload.sh} | 0
.../{post-02-binary.sh => post-03-binary.sh} | 0
.../{post-03-website.sh => post-04-website.sh} | 0
...10-go.sh => post-05-update-gh-release-notes.sh} | 26 ++++--
dev/release/{post-04-ruby.sh => post-06-ruby.sh} | 0
dev/release/{post-05-js.sh => post-07-js.sh} | 0
.../{post-06-csharp.sh => post-08-csharp.sh} | 0
...rtifacts.sh => post-09-remove-old-artifacts.sh} | 0
dev/release/{post-08-docs.sh => post-10-docs.sh} | 0
.../{post-09-python.sh => post-11-python.sh} | 0
...sions-test.rb => post-12-bump-versions-test.rb} | 4 +-
...1-bump-versions.sh => post-12-bump-versions.sh} | 0
dev/release/{post-10-go.sh => post-13-go.sh} | 0
dev/release/{post-12-msys2.sh => post-14-msys2.sh} | 0
.../{post-13-homebrew.sh => post-15-homebrew.sh} | 0
dev/release/{post-14-vcpkg.sh => post-16-vcpkg.sh} | 0
dev/release/{post-15-conan.sh => post-17-conan.sh} | 0
dev/release/utils-create-release-tarball.sh | 62 ++++++++++++++
...binary-verify.sh => utils-watch-gh-workflow.sh} | 34 ++++----
docs/source/developers/release.rst | 99 ++++++++++++++--------
matlab/tools/packageMatlabInterface.m | 15 ++--
30 files changed, 444 insertions(+), 129 deletions(-)
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
new file mode 100644
index 0000000000..8d54979502
--- /dev/null
+++ b/.github/workflows/release.yml
@@ -0,0 +1,74 @@
+# 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.
+
+name: Release
+
+on:
+ push:
+ tags:
+ # Trigger workflow when a tag whose name matches the pattern
+ # pattern "apache-arrow-{MAJOR}.{MINOR}.{PATCH}" is pushed.
+ - "apache-arrow-[0-9]+.[0-9]+.[0-9]+"
+
+permissions:
+ contents: write
+
+env:
+ GH_TOKEN: ${{ github.token }}
+
+jobs:
+ publish:
+ name: Publish
+ runs-on: ubuntu-latest
+ timeout-minutes: 5
+ steps:
+ - name: Get Tag Name of Latest Release Candidate
+ run: |
+ rc_tag=$(gh release list --repo apache/arrow | \
+ cut -f3 | \
+ grep -F "${GITHUB_REF_NAME}-rc" | \
+ head -n1)
+ echo "Latest Release Candidate Tag: ${rc_tag}"
+ echo "RELEASE_CANDIDATE_TAG_NAME=${rc_tag}" >> ${GITHUB_ENV}
+ - name: Store Version and Release Candidate Number
+ run: |
+ version_with_rc=${RELEASE_CANDIDATE_TAG_NAME#apache-arrow-}
+ version=${version_with_rc%-rc*}
+ rc_num=${version_with_rc#${version}-rc}
+ echo "VERSION_WITH_RC=${version_with_rc}" >> ${GITHUB_ENV}
+ echo "VERSION=${version}" >> ${GITHUB_ENV}
+ echo "RC_NUM=${rc_num}" >> ${GITHUB_ENV}
+ - name: Download Release Candidate Artifacts
+ run: |
+ mkdir release_candidate_artifacts
+ gh release download ${RELEASE_CANDIDATE_TAG_NAME} --repo
apache/arrow --dir release_candidate_artifacts
+ - name: Create Release Title
+ run: |
+ title="Apache Arrow ${VERSION}"
+ echo "RELEASE_TITLE=${title}" >> ${GITHUB_ENV}
+ # Set the release notes to "TODO" temporarily. After the release notes
page
+ # (https://arrow.apache.org/release/{VERSION}.html) is published, use
+ # gh release edit to update the release notes to refer to the newly
+ # pushed web page. See dev/post/post-05-update-gh-release-notes.sh
+ - name: Create GitHub Release
+ run: |
+ gh release create ${GITHUB_REF_NAME} \
+ --repo apache/arrow \
+ --verify-tag \
+ --title "${RELEASE_TITLE}" \
+ --notes "TODO" \
+ release_candidate_artifacts/*
\ No newline at end of file
diff --git a/.github/workflows/release_candidate.yml
b/.github/workflows/release_candidate.yml
new file mode 100644
index 0000000000..ec732f0eb3
--- /dev/null
+++ b/.github/workflows/release_candidate.yml
@@ -0,0 +1,70 @@
+# 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.
+
+name: Release
+
+on:
+ push:
+ tags:
+ # Trigger workflow when a tag whose name matches the pattern
+ # "apache-arrow-{MAJOR}.{MINOR}.{PATCH}-rc{RC_NUM}" is pushed.
+ - "apache-arrow-[0-9]+.[0-9]+.[0-9]+-rc[0-9]+"
+
+permissions:
+ contents: write
+
+env:
+ GH_TOKEN: ${{ github.token }}
+
+jobs:
+ publish:
+ name: Publish
+ runs-on: ubuntu-latest
+ timeout-minutes: 5
+ steps:
+ - name: Checkout Arrow
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+ - name: Store Version and Release Candidate Number
+ run: |
+ version_with_rc=${GITHUB_REF_NAME#apache-arrow-}
+ version=${version_with_rc%-rc*}
+ rc_num=${version_with_rc#${version}-rc}
+ echo "VERSION_WITH_RC=${version_with_rc}" >> ${GITHUB_ENV}
+ echo "VERSION=${version}" >> ${GITHUB_ENV}
+ echo "RC_NUM=${rc_num}" >> ${GITHUB_ENV}
+ - name: Create Release Candidate Title
+ run: |
+ title="Apache Arrow ${VERSION} RC${RC_NUM}"
+ echo "RELEASE_CANDIDATE_TITLE=${title}" >> ${GITHUB_ENV}
+ - name: Create Release Candidate Notes
+ run: |
+ release_notes="Release Candidate: ${VERSION} RC${RC_NUM}"
+ echo "RELEASE_CANDIDATE_NOTES=${release_notes}" >> ${GITHUB_ENV}
+ - name: Create Release tarball
+ run: |
+ cd dev/release/ && ./utils-create-release-tarball.sh ${VERSION}
${RC_NUM}
+ echo "RELEASE_TARBALL=apache-arrow-${VERSION}.tar.gz" >>
${GITHUB_ENV}
+ - name: Create GitHub Release
+ run: |
+ gh release create ${GITHUB_REF_NAME} \
+ --verify-tag \
+ --prerelease \
+ --title "${RELEASE_CANDIDATE_TITLE}" \
+ --notes "Release Notes: ${RELEASE_CANDIDATE_NOTES}" \
+ dev/release/${RELEASE_TARBALL}
diff --git a/dev/release/01-prepare.sh b/dev/release/01-prepare.sh
index e4c62e6323..779348f036 100755
--- a/dev/release/01-prepare.sh
+++ b/dev/release/01-prepare.sh
@@ -33,7 +33,7 @@ next_version=$2
next_version_snapshot="${next_version}-SNAPSHOT"
rc_number=$3
-release_tag="apache-arrow-${version}"
+release_candidate_tag="apache-arrow-${version}-rc${rc_number}"
release_branch="release-${version}"
release_candidate_branch="release-${version}-rc${rc_number}"
@@ -46,9 +46,9 @@ release_candidate_branch="release-${version}-rc${rc_number}"
: ${PREPARE_TAG:=${PREPARE_DEFAULT}}
if [ ${PREPARE_TAG} -gt 0 ]; then
- if [ $(git tag -l "${release_tag}") ]; then
- echo "Delete existing git tag $release_tag"
- git tag -d "${release_tag}"
+ if [ $(git tag -l "${release_candidate_tag}") ]; then
+ echo "Delete existing git tag $release_candidate_tag"
+ git tag -d "${release_candidate_tag}"
fi
fi
@@ -88,7 +88,7 @@ if [ ${PREPARE_LINUX_PACKAGES} -gt 0 ]; then
fi
if [ ${PREPARE_VERSION_PRE_TAG} -gt 0 ]; then
- echo "Prepare release ${version} on tag ${release_tag} then reset to version
${next_version_snapshot}"
+ echo "Prepare release ${version} on tag ${release_candidate_tag} then reset
to version ${next_version_snapshot}"
update_versions "${version}" "${next_version}" "release"
git commit -m "MINOR: [Release] Update versions for ${version}"
@@ -97,5 +97,5 @@ fi
############################## Tag the Release ##############################
if [ ${PREPARE_TAG} -gt 0 ]; then
- git tag -a "${release_tag}" -m "[Release] Apache Arrow Release ${version}"
+ git tag -a "${release_candidate_tag}" -m "[Release] Apache Arrow Release
${version} RC${rc_number}"
fi
diff --git a/dev/release/02-source-test.rb b/dev/release/02-source-test.rb
index 149a2b27ac..eab95c798f 100644
--- a/dev/release/02-source-test.rb
+++ b/dev/release/02-source-test.rb
@@ -22,8 +22,10 @@ class SourceTest < Test::Unit::TestCase
def setup
@current_commit = git_current_commit
detect_versions
- @tag_name = "apache-arrow-#{@release_version}"
+ @tag_name = "apache-arrow-#{@release_version}-rc0"
+ @archive_name = "apache-arrow-#{@release_version}.tar.gz"
@script = File.expand_path("dev/release/02-source.sh")
+ @tarball_script =
File.expand_path("dev/release/utils-create-release-tarball.sh")
Dir.mktmpdir do |dir|
Dir.chdir(dir) do
@@ -40,8 +42,9 @@ class SourceTest < Test::Unit::TestCase
targets.each do |target|
env["SOURCE_#{target}"] = "1"
end
+ sh(env, @tarball_script, @release_version, "0")
output = sh(env, @script, @release_version, "0")
- sh("tar", "xf", "#{@tag_name}.tar.gz")
+ sh("tar", "xf", @archive_name)
output
end
diff --git a/dev/release/02-source.sh b/dev/release/02-source.sh
index 1bd3c0e19e..b3eae21221 100755
--- a/dev/release/02-source.sh
+++ b/dev/release/02-source.sh
@@ -21,6 +21,7 @@
set -eu
: ${SOURCE_DEFAULT:=1}
+: ${SOURCE_DOWNLOAD:=${SOURCE_DEFAULT}}
: ${SOURCE_RAT:=${SOURCE_DEFAULT}}
: ${SOURCE_UPLOAD:=${SOURCE_DEFAULT}}
: ${SOURCE_PR:=${SOURCE_DEFAULT}}
@@ -37,11 +38,10 @@ fi
version=$1
rc=$2
-tag=apache-arrow-${version}
+tag=apache-arrow-${version}-rc${rc}
maint_branch=maint-${version}
rc_branch="release-${version}-rc${rc}"
-tagrc=${tag}-rc${rc}
-rc_url="https://dist.apache.org/repos/dist/dev/arrow/${tagrc}"
+rc_url="https://dist.apache.org/repos/dist/dev/arrow/${tag}"
echo "Preparing source for tag ${tag}"
@@ -56,35 +56,19 @@ fi
echo "Using commit $release_hash"
-tarball=${tag}.tar.gz
-
-rm -rf ${tag}
-# be conservative and use the release hash, even though git produces the same
-# archive (identical hashes) using the scm tag
-(cd "${SOURCE_TOP_DIR}" && \
- git archive ${release_hash} --prefix ${tag}/) | \
- tar xf -
-
-# Resolve all hard and symbolic links.
-# If we change this, we must change ArrowSources.archive in
-# dev/archery/archery/utils/source.py too.
-rm -rf ${tag}.tmp
-mv ${tag} ${tag}.tmp
-cp -R -L ${tag}.tmp ${tag}
-rm -rf ${tag}.tmp
-
-# Create a dummy .git/ directory to download the source files from GitHub with
Source Link in C#.
-dummy_git=${tag}/csharp/dummy.git
-mkdir ${dummy_git}
-pushd ${dummy_git}
-echo ${release_hash} > HEAD
-echo '[remote "origin"] url = https://github.com/apache/arrow.git' >> config
-mkdir objects refs
-popd
-
-# Create new tarball from modified source directory
-tar czf ${tarball} ${tag}
-rm -rf ${tag}
+tarball=apache-arrow-${version}.tar.gz
+
+if [ ${SOURCE_DOWNLOAD} -gt 0 ]; then
+ # Wait for the release candidate workflow to finish before attempting
+ # to download the tarball from the GitHub Release.
+ . $SOURCE_DIR/utils-watch-gh-workflow.sh ${tag} "release_candidate.yml"
+ rm -f ${tarball}
+ gh release download \
+ ${tag} \
+ --repo apache/arrow \
+ --dir . \
+ --pattern "${tarball}"
+fi
if [ ${SOURCE_RAT} -gt 0 ]; then
"${SOURCE_DIR}/run-rat.sh" ${tarball}
@@ -105,18 +89,21 @@ if [ ${SOURCE_UPLOAD} -gt 0 ]; then
${sha256_generate} $tarball > ${tarball}.sha256
${sha512_generate} $tarball > ${tarball}.sha512
+ # Upload signed tarballs to GitHub Release
+ gh release upload ${tag} ${tarball}.sha256 ${tarball}.sha512
+
# check out the arrow RC folder
svn co --depth=empty https://dist.apache.org/repos/dist/dev/arrow tmp
# add the release candidate for the tag
- mkdir -p tmp/${tagrc}
+ mkdir -p tmp/${tag}
# copy the rc tarball into the tmp dir
- cp ${tarball}* tmp/${tagrc}
+ cp ${tarball}* tmp/${tag}
# commit to svn
- svn add tmp/${tagrc}
- svn ci -m "Apache Arrow ${version} RC${rc}" tmp/${tagrc}
+ svn add tmp/${tag}
+ svn ci -m "Apache Arrow ${version} RC${rc}" tmp/${tag}
# clean up
rm -rf tmp
diff --git a/dev/release/03-binary-submit.sh b/dev/release/03-binary-submit.sh
index d65b4e97c5..0dc63aa708 100755
--- a/dev/release/03-binary-submit.sh
+++ b/dev/release/03-binary-submit.sh
@@ -28,7 +28,7 @@ version=$1
rc=$2
version_with_rc="${version}-rc${rc}"
crossbow_job_prefix="release-${version_with_rc}"
-release_tag="apache-arrow-${version}"
+release_tag="apache-arrow-${version}-rc${rc}"
rc_branch="release-${version_with_rc}"
: ${ARROW_REPOSITORY:="apache/arrow"}
diff --git a/dev/release/07-matlab-upload.sh b/dev/release/07-matlab-upload.sh
new file mode 100755
index 0000000000..803ceadb35
--- /dev/null
+++ b/dev/release/07-matlab-upload.sh
@@ -0,0 +1,89 @@
+# 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.
+
+set -e
+set -u
+set -o pipefail
+
+SOURCE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
+
+if [ $# -ne 2 ]; then
+ echo "Usage: $0 <version> <rc-num>"
+ exit
+fi
+
+version=$1
+rc=$2
+
+: ${UPLOAD_DEFAULT=1}
+: ${UPLOAD_FORCE_SIGN=${UPLOAD_DEFAULT}}
+
+if [ ${UPLOAD_FORCE_SIGN} -gt 0 ]; then
+ pushd "${SOURCE_DIR}"
+ if [ ! -f .env ]; then
+ echo "You must create $(pwd)/.env"
+ echo "You can use $(pwd)/.env.example as template"
+ exit 1
+ fi
+ . .env
+ popd
+fi
+
+version_with_rc="${version}-rc${rc}"
+crossbow_job_prefix="release-${version_with_rc}"
+crossbow_package_dir="${SOURCE_DIR}/../../packages"
+
+: ${CROSSBOW_JOB_NUMBER:="0"}
+: ${CROSSBOW_JOB_ID:="${crossbow_job_prefix}-${CROSSBOW_JOB_NUMBER}"}
+: ${ARROW_ARTIFACTS_DIR:="${crossbow_package_dir}/${CROSSBOW_JOB_ID}/matlab"}
+
+if [ ! -e "${ARROW_ARTIFACTS_DIR}" ]; then
+ echo "${ARROW_ARTIFACTS_DIR} does not exist"
+ exit 1
+fi
+
+if [ ! -d "${ARROW_ARTIFACTS_DIR}" ]; then
+ echo "${ARROW_ARTIFACTS_DIR} is not a directory"
+ exit 1
+fi
+
+pushd "${ARROW_ARTIFACTS_DIR}"
+
+if [ ${UPLOAD_FORCE_SIGN} -gt 0 ]; then
+ # Upload the MATLAB MLTBX Release Candidate to the GitHub Releases
+ # area of the Apache Arrow GitHub project.
+ mltbx_file="matlab-arrow-${version}.mltbx"
+ mltbx_signature_gpg_ascii_armor="${mltbx_file}.asc"
+ mltbx_checksum_sha512="${mltbx_file}.sha512"
+
+ rm -rf ${mltbx_signature_gpg_ascii_armor}
+ rm -rf ${mltbx_checksum_sha512}
+
+ # Sign the MLTBX file and create a detached (--deatch-sign) ASCII armor
(--armor) GPG signature file.
+ gpg --detach-sign --local-user "${GPG_KEY_ID}" --armor ${mltbx_file}
+
+ # Compute the SHA512 checksum of the MLTBX file.
+ shasum --algorithm 512 ${mltbx_file} > ${mltbx_checksum_sha512}
+fi
+
+tag="apache-arrow-${version_with_rc}"
+gh release upload ${tag} \
+ --clobber \
+ --repo apache/arrow \
+ *
+
+popd
diff --git a/dev/release/07-binary-verify.sh b/dev/release/08-binary-verify.sh
similarity index 100%
copy from dev/release/07-binary-verify.sh
copy to dev/release/08-binary-verify.sh
diff --git a/dev/release/07-binary-verify.sh b/dev/release/post-01-tag.sh
similarity index 73%
copy from dev/release/07-binary-verify.sh
copy to dev/release/post-01-tag.sh
index 152e097944..df0f6756c0 100755
--- a/dev/release/07-binary-verify.sh
+++ b/dev/release/post-01-tag.sh
@@ -18,7 +18,6 @@
# under the License.
set -e
-set -u
set -o pipefail
if [ "$#" -ne 2 ]; then
@@ -26,17 +25,8 @@ if [ "$#" -ne 2 ]; then
exit
fi
-version=$1
-rc=$2
-
-rc_branch="release-${version}-rc${rc}"
-
-archery crossbow \
- verify-release-candidate \
- --head-branch=${rc_branch} \
- --pr-title="WIP: [Release] Verify ${rc_branch}" \
- --rc=${rc} \
- --remote=https://github.com/apache/arrow \
- --verify-binaries \
- --verify-wheels \
- --version=${version}
+# Create the release tag and trigger the Publish Release workflow.
+release_candidate_tag=apache-arrow-${version}-rc${num}
+release_tag=apache-arrow-${version}
+git tag -a ${release_tag} ${release_candidate_tag}^{} -m "[Release] Apache
Arrow Release ${version}"
+git push apache ${release_tag}
diff --git a/dev/release/post-01-upload.sh b/dev/release/post-02-upload.sh
similarity index 100%
rename from dev/release/post-01-upload.sh
rename to dev/release/post-02-upload.sh
diff --git a/dev/release/post-02-binary.sh b/dev/release/post-03-binary.sh
similarity index 100%
rename from dev/release/post-02-binary.sh
rename to dev/release/post-03-binary.sh
diff --git a/dev/release/post-03-website.sh b/dev/release/post-04-website.sh
similarity index 100%
rename from dev/release/post-03-website.sh
rename to dev/release/post-04-website.sh
diff --git a/dev/release/post-10-go.sh
b/dev/release/post-05-update-gh-release-notes.sh
similarity index 63%
copy from dev/release/post-10-go.sh
copy to dev/release/post-05-update-gh-release-notes.sh
index 7c60348379..e321c98721 100755
--- a/dev/release/post-10-go.sh
+++ b/dev/release/post-05-update-gh-release-notes.sh
@@ -16,19 +16,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 )"
+set -e
+set -o pipefail
if [ "$#" -ne 1 ]; then
echo "Usage: $0 <version>"
- exit
+ exit 1
fi
-version=$1
-version_tag="apache-arrow-${version}"
-go_arrow_tag="go/v${version}"
-git tag "${go_arrow_tag}" "${version_tag}"
-git push apache "${go_arrow_tag}"
+VERSION=$1
+REPOSITORY="apache/arrow"
+TAG="apache-arrow-${VERSION}"
+WORKFLOW="release.yml"
+SOURCE_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+
+# Wait for the GitHub Workflow that creates the GitHub Release
+# to finish before updating the release notes.
+. $SOURCE_DIR/utils-watch-gh-workflow.sh ${TAG} ${WORKFLOW}
+
+# Update the Release Notes section
+RELEASE_NOTES_URL="https://arrow.apache.org/release/${VERSION}.html"
+RELEASE_NOTES="Release Notes URL: ${RELEASE_NOTES_URL}"
+gh release edit ${TAG} --repo ${REPOSITORY} --notes "${RELEASE_NOTES}"
--verify-tag
diff --git a/dev/release/post-04-ruby.sh b/dev/release/post-06-ruby.sh
similarity index 100%
rename from dev/release/post-04-ruby.sh
rename to dev/release/post-06-ruby.sh
diff --git a/dev/release/post-05-js.sh b/dev/release/post-07-js.sh
similarity index 100%
rename from dev/release/post-05-js.sh
rename to dev/release/post-07-js.sh
diff --git a/dev/release/post-06-csharp.sh b/dev/release/post-08-csharp.sh
similarity index 100%
rename from dev/release/post-06-csharp.sh
rename to dev/release/post-08-csharp.sh
diff --git a/dev/release/post-07-remove-old-artifacts.sh
b/dev/release/post-09-remove-old-artifacts.sh
similarity index 100%
rename from dev/release/post-07-remove-old-artifacts.sh
rename to dev/release/post-09-remove-old-artifacts.sh
diff --git a/dev/release/post-08-docs.sh b/dev/release/post-10-docs.sh
similarity index 100%
rename from dev/release/post-08-docs.sh
rename to dev/release/post-10-docs.sh
diff --git a/dev/release/post-09-python.sh b/dev/release/post-11-python.sh
similarity index 100%
rename from dev/release/post-09-python.sh
rename to dev/release/post-11-python.sh
diff --git a/dev/release/post-11-bump-versions-test.rb
b/dev/release/post-12-bump-versions-test.rb
similarity index 99%
rename from dev/release/post-11-bump-versions-test.rb
rename to dev/release/post-12-bump-versions-test.rb
index 8ad404ef33..2bd1458746 100644
--- a/dev/release/post-11-bump-versions-test.rb
+++ b/dev/release/post-12-bump-versions-test.rb
@@ -63,12 +63,12 @@ class PostBumpVersionsTest < Test::Unit::TestCase
previous_version_components[2].succ!
end
sh(env,
- "dev/release/post-11-bump-versions.sh",
+ "dev/release/post-12-bump-versions.sh",
previous_version_components.join("."),
@release_version)
else
sh(env,
- "dev/release/post-11-bump-versions.sh",
+ "dev/release/post-12-bump-versions.sh",
@release_version,
@next_version)
end
diff --git a/dev/release/post-11-bump-versions.sh
b/dev/release/post-12-bump-versions.sh
similarity index 100%
rename from dev/release/post-11-bump-versions.sh
rename to dev/release/post-12-bump-versions.sh
diff --git a/dev/release/post-10-go.sh b/dev/release/post-13-go.sh
similarity index 100%
rename from dev/release/post-10-go.sh
rename to dev/release/post-13-go.sh
diff --git a/dev/release/post-12-msys2.sh b/dev/release/post-14-msys2.sh
similarity index 100%
rename from dev/release/post-12-msys2.sh
rename to dev/release/post-14-msys2.sh
diff --git a/dev/release/post-13-homebrew.sh b/dev/release/post-15-homebrew.sh
similarity index 100%
rename from dev/release/post-13-homebrew.sh
rename to dev/release/post-15-homebrew.sh
diff --git a/dev/release/post-14-vcpkg.sh b/dev/release/post-16-vcpkg.sh
similarity index 100%
rename from dev/release/post-14-vcpkg.sh
rename to dev/release/post-16-vcpkg.sh
diff --git a/dev/release/post-15-conan.sh b/dev/release/post-17-conan.sh
similarity index 100%
rename from dev/release/post-15-conan.sh
rename to dev/release/post-17-conan.sh
diff --git a/dev/release/utils-create-release-tarball.sh
b/dev/release/utils-create-release-tarball.sh
new file mode 100755
index 0000000000..1a0ba83639
--- /dev/null
+++ b/dev/release/utils-create-release-tarball.sh
@@ -0,0 +1,62 @@
+#!/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
+# 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.
+#
+
+SOURCE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
+SOURCE_TOP_DIR="$(cd "${SOURCE_DIR}/../../" && pwd)"
+
+if [ "$#" -ne 2 ]; then
+ echo "Usage: $0 <version> <rc-num>"
+ exit
+fi
+
+version=$1
+rc=$2
+
+tag=apache-arrow-${version}-rc${rc}
+tarball=apache-arrow-${version}.tar.gz
+
+: ${release_hash:=$(git rev-list --max-count=1 ${tag})}
+
+rm -rf ${tag}
+
+# be conservative and use the release hash, even though git produces the same
+# archive (identical hashes) using the scm tag
+(cd "${SOURCE_TOP_DIR}" && \
+ git archive ${release_hash} --prefix ${tag}/) | \
+ tar xf -
+
+# Resolve symbolic and hard links
+rm -rf ${tag}.tmp
+mv ${tag} ${tag}.tmp
+cp -R -L ${tag}.tmp ${tag}
+rm -rf ${tag}.tmp
+
+# Create a dummy .git/ directory to download the source files from GitHub with
Source Link in C#.
+dummy_git=${tag}/csharp/dummy.git
+mkdir ${dummy_git}
+pushd ${dummy_git}
+echo ${release_hash} > HEAD
+echo '[remote "origin"] url = https://github.com/apache/arrow.git' >> config
+mkdir objects refs
+popd
+
+# Create new tarball from modified source directory
+tar czf ${tarball} ${tag}
+rm -rf ${tag}
diff --git a/dev/release/07-binary-verify.sh
b/dev/release/utils-watch-gh-workflow.sh
similarity index 57%
rename from dev/release/07-binary-verify.sh
rename to dev/release/utils-watch-gh-workflow.sh
index 152e097944..c0bab40df0 100755
--- a/dev/release/07-binary-verify.sh
+++ b/dev/release/utils-watch-gh-workflow.sh
@@ -18,25 +18,29 @@
# under the License.
set -e
-set -u
set -o pipefail
if [ "$#" -ne 2 ]; then
- echo "Usage: $0 <version> <rc-num>"
- exit
+ echo "Usage: $0 <tag> <workflow>"
+ exit 1
fi
-version=$1
-rc=$2
+TAG=$1
+WORKFLOW=$2
+REPOSITORY="apache/arrow"
-rc_branch="release-${version}-rc${rc}"
+echo "Looking for GitHub Actions workflow on ${REPOSITORY}:${TAG}"
+RUN_ID=""
+while [[ -z "${RUN_ID}" ]]
+do
+ echo "Waiting for run to start..."
+ RUN_ID=$(gh run list \
+ --repo "${REPOSITORY}" \
+ --workflow="${WORKFLOW}" \
+ --json 'databaseId,event,headBranch,status' \
+ --jq ".[] | select(.event == \"push\" and .headBranch ==
\"${TAG}\") | .databaseId")
+ sleep 1
+ done
-archery crossbow \
- verify-release-candidate \
- --head-branch=${rc_branch} \
- --pr-title="WIP: [Release] Verify ${rc_branch}" \
- --rc=${rc} \
- --remote=https://github.com/apache/arrow \
- --verify-binaries \
- --verify-wheels \
- --version=${version}
+echo "Found GitHub Actions workflow with ID: ${RUN_ID}"
+gh run watch --repo "${REPOSITORY}" --exit-status ${RUN_ID}
\ No newline at end of file
diff --git a/docs/source/developers/release.rst
b/docs/source/developers/release.rst
index d903cc71bd..fae48e4d8e 100644
--- a/docs/source/developers/release.rst
+++ b/docs/source/developers/release.rst
@@ -189,8 +189,8 @@ Create the Release Candidate branch from the updated
maintenance branch
# so for the first RC this would be: dev/release/01-prepare.sh 4.0.0 5.0.0 0
dev/release/01-prepare.sh <version> <next-version> <rc-number>
- # Push the release tag (for RC1 or later the --force flag is required)
- git push -u apache apache-arrow-<version>
+ # Push the release candidate tag
+ git push -u apache apache-arrow-<version>rc<rc-number>
# Push the release candidate branch in order to trigger verification jobs
later
git push -u apache release-<version>-rc<rc-number>
@@ -200,6 +200,8 @@ Build source and binaries and submit them
.. code-block::
# Build the source release tarball and create Pull Request with
verification tasks
+ #
+ # NOTE: You need to have GitHub CLI installed to run this script.
dev/release/02-source.sh <version> <rc-number>
# Submit binary tasks using crossbow, the command will output the crossbow
build id
@@ -225,8 +227,13 @@ Build source and binaries and submit them
# https://repository.apache.org/#stagingRepositories
dev/release/06-java-upload.sh <version> <rc-number>
+ # Sign and upload MATLAB artifacts to the GitHub Releases area.
+ #
+ # Note that you need to have GitHub CLI installed to run this script.
+ dev/release/07-matlab-upload.sh <version> <rc-number>
+
# Start verifications for binaries and wheels
- dev/release/07-binary-verify.sh <version> <rc-number>
+ dev/release/08-binary-verify.sh <version> <rc-number>
Verify the Release
------------------
@@ -257,9 +264,11 @@ Be sure to go through on the following checklist:
#. Start the new version on JIRA for the related CPP PARQUET version
#. Merge changes on release branch to maintenance branch for patch releases
#. Add the new release to the Apache Reporter System
+#. Push release tag
#. Upload source
#. Upload binaries
#. Update website
+#. Update GitHub Release Notes
#. Update Homebrew packages
#. Update MSYS2 package
#. Upload RubyGems
@@ -325,6 +334,18 @@ Be sure to go through on the following checklist:
Add relevant release data for Arrow to `Apache reporter
<https://reporter.apache.org/addrelease.html?arrow>`_.
+.. dropdown:: Push release tag and create GitHub Release
+ :animate: fade-in-slide-down
+ :class-title: sd-fs-5
+ :class-container: sd-shadow-md
+
+ A committer must push the release tag to GitHub:
+
+ .. code-block:: Bash
+
+ # dev/release/post-01-tag.sh 0.1.0 0
+ dev/release/post-01-tag.sh <version> <rc>
+
.. dropdown:: Upload source release artifacts to Subversion
:animate: fade-in-slide-down
:class-title: sd-fs-5
@@ -334,20 +355,20 @@ Be sure to go through on the following checklist:
.. code-block:: Bash
- # dev/release/post-01-upload.sh 0.1.0 0
- dev/release/post-01-upload.sh <version> <rc>
+ # dev/release/post-02-upload.sh 0.1.0 0
+ dev/release/post-02-upload.sh <version> <rc>
.. dropdown:: Upload binary release artifacts to Artifactory
:animate: fade-in-slide-down
:class-title: sd-fs-5
:class-container: sd-shadow-md
- A committer must upload the binary release artifacts to Artifactory:
+ A committer must upload the binary release artifacts to Artifactory and
create the GitHub Release:
.. code-block:: Bash
- # dev/release/post-02-binary.sh 0.1.0 0
- dev/release/post-02-binary.sh <version> <rc number>
+ # dev/release/post-03-binary.sh 0.1.0 0
+ dev/release/post-03-binary.sh <version> <rc number>
.. dropdown:: Update website
:animate: fade-in-slide-down
@@ -369,11 +390,23 @@ Be sure to go through on the following checklist:
## Generate a release note for the new version, update the
## latest release information automatically.
- # dev/release/post-03-website.sh 9.0.0 10.0.0
- dev/release/post-03-website.sh OLD_X.OLD_Y.OLD_Z X.Y.Z
+ # dev/release/post-04-website.sh 9.0.0 10.0.0
+ dev/release/post-04-website.sh OLD_X.OLD_Y.OLD_Z X.Y.Z
This script pushes a ``release-note-X.Y.Z`` branch to your
``apache/arrow-site`` fork. You need to open a pull request from the
``release-note-X.Y.Z`` branch on your Web browser.
+.. dropdown:: Update Release Notes in apache/arrow GitHub Release
+ :animate: fade-in-slide-down
+ :class-title: sd-fs-5
+ :class-container: sd-shadow-md
+
+ A committer must run the following script:
+
+ .. code-block:: Bash
+
+ # dev/release/post-05-update-gh-release-notes.sh 17.0.0
+ dev/release/post-05-update-gh-release-notes.sh apache-arrow-X.Y.Z
+
.. dropdown:: Update Homebrew packages
:animate: fade-in-slide-down
:class-title: sd-fs-5
@@ -395,8 +428,8 @@ Be sure to go through on the following checklist:
git remote add <YOUR_GITHUB_ID>
[email protected]:<YOUR_GITHUB_ID>/homebrew-core.git
cd -
- # dev/release/post-13-homebrew.sh 10.0.0 kou
- dev/release/post-13-homebrew.sh X.Y.Z <YOUR_GITHUB_ID>
+ # dev/release/post-15-homebrew.sh 10.0.0 kou
+ dev/release/post-15-homebrew.sh X.Y.Z <YOUR_GITHUB_ID>
This script pushes a ``apache-arrow-X.Y.Z`` branch to your
``Homebrew/homebrew-core`` fork. You need to create a pull request from the
``apache-arrow-X.Y.Z`` branch with ``apache-arrow, apache-arrow-glib: X.Y.Z``
title on your Web browser.
@@ -421,8 +454,8 @@ Be sure to go through on the following checklist:
git remote add upstream https://github.com/msys2/MINGW-packages.git
cd -
- # dev/release/post-12-msys2.sh 10.0.0 ../MINGW-packages
- dev/release/post-12-msys2.sh X.Y.Z <YOUR_MINGW_PACKAGES_FORK>
+ # dev/release/post-14-msys2.sh 10.0.0 ../MINGW-packages
+ dev/release/post-14-msys2.sh X.Y.Z <YOUR_MINGW_PACKAGES_FORK>
This script pushes a ``arrow-X.Y.Z`` branch to your
``msys2/MINGW-packages`` fork. You need to create a pull request from the
``arrow-X.Y.Z`` branch with ``arrow: Update to X.Y.Z`` title on your Web
browser.
@@ -446,8 +479,8 @@ Be sure to go through on the following checklist:
.. code-block:: Bash
- # dev/release/post-04-ruby.sh 10.0.0
- dev/release/post-04-ruby.sh X.Y.Z
+ # dev/release/post-06-ruby.sh 10.0.0
+ dev/release/post-06-ruby.sh X.Y.Z
.. dropdown:: Update JavaScript packages
:animate: fade-in-slide-down
@@ -465,8 +498,8 @@ Be sure to go through on the following checklist:
# Login to npmjs.com (You need to do this only for the first time)
npm login --registry=https://registry.yarnpkg.com/
- # dev/release/post-05-js.sh 10.0.0
- dev/release/post-05-js.sh X.Y.Z
+ # dev/release/post-07-js.sh 10.0.0
+ dev/release/post-07-js.sh X.Y.Z
.. dropdown:: Update C# packages
:animate: fade-in-slide-down
@@ -481,8 +514,8 @@ Be sure to go through on the following checklist:
.. code-block:: Bash
- # NUGET_API_KEY=YOUR_NUGET_API_KEY dev/release/post-06-csharp.sh 10.0.0
- NUGET_API_KEY=<your NuGet API key> dev/release/post-06-csharp.sh X.Y.Z
+ # NUGET_API_KEY=YOUR_NUGET_API_KEY dev/release/post-08-csharp.sh 10.0.0
+ NUGET_API_KEY=<your NuGet API key> dev/release/post-08-csharp.sh X.Y.Z
.. dropdown:: Upload wheels/sdist to PyPI
:animate: fade-in-slide-down
@@ -495,8 +528,8 @@ Be sure to go through on the following checklist:
.. code-block:: Bash
- # dev/release/post-09-python.sh 10.0.0
- dev/release/post-09-python.sh <version>
+ # dev/release/post-11-python.sh 10.0.0
+ dev/release/post-11-python.sh <version>
.. dropdown:: Publish Maven packages
:animate: fade-in-slide-down
@@ -568,8 +601,8 @@ Be sure to go through on the following checklist:
git remote add upstream https://github.com/microsoft/vcpkg.git
cd -
- # dev/release/post-14-vcpkg.sh 10.0.0 ../vcpkg
- dev/release/post-14-vcpkg.sh X.Y.Z <YOUR_VCPKG_FORK>
+ # dev/release/post-16-vcpkg.sh 10.0.0 ../vcpkg
+ dev/release/post-16-vcpkg.sh X.Y.Z <YOUR_VCPKG_FORK>
This script pushes a ``arrow-X.Y.Z`` branch to your ``microsoft/vcpkg``
fork. You need to create a pull request from the ``arrow-X.Y.Z`` branch with
``[arrow] Update to X.Y.Z`` title on your Web browser.
@@ -594,8 +627,8 @@ Be sure to go through on the following checklist:
git remote add upstream
https://github.com/conan-io/conan-center-index.git
cd -
- # dev/release/post-15-conan.sh 10.0.1 ../conan-center-index
- dev/release/post-15-conan.sh X.Y.Z <YOUR_CONAN_CENTER_INDEX_FORK>
+ # dev/release/post-17-conan.sh 10.0.1 ../conan-center-index
+ dev/release/post-17-conan.sh X.Y.Z <YOUR_CONAN_CENTER_INDEX_FORK>
This script pushes a ``arrow-X.Y.Z`` branch to your
``conan-io/conan-center-index`` fork. You need to create a pull request from
the ``arrow-X.Y.Z`` branch on your Web browser.
@@ -609,8 +642,8 @@ Be sure to go through on the following checklist:
# You can run the script with BUMP_TAG=0 and BUMP_PUSH=0
# this will avoid default pushing to main and pushing the tag
# but you will require to push manually after reviewing the commits.
- # dev/release/post-11-bump-versions.sh 10.0.0 11.0.0
- dev/release/post-11-bump-versions.sh X.Y.Z NEXT_X.NEXT_Y.NEXT_Z
+ # dev/release/post-12-bump-versions.sh 10.0.0 11.0.0
+ dev/release/post-12-bump-versions.sh X.Y.Z NEXT_X.NEXT_Y.NEXT_Z
.. dropdown:: Update tags for Go modules
:animate: fade-in-slide-down
@@ -619,8 +652,8 @@ Be sure to go through on the following checklist:
.. code-block:: Bash
- # dev/release/post-10-go.sh 10.0.0
- dev/release/post-10-go.sh X.Y.Z
+ # dev/release/post-13-go.sh 10.0.0
+ dev/release/post-13-go.sh X.Y.Z
.. dropdown:: Update docs
:animate: fade-in-slide-down
@@ -640,8 +673,8 @@ Be sure to go through on the following checklist:
git remote add apache [email protected]:apache/arrow-site.git
cd -
- # dev/release/post-08-docs.sh 10.0.0 9.0.0
- dev/release/post-08-docs.sh X.Y.Z PREVIOUS_X.PREVIOUS_Y.PREVIOUS_Z
+ # dev/release/post-10-docs.sh 10.0.0 9.0.0
+ dev/release/post-10-docs.sh X.Y.Z PREVIOUS_X.PREVIOUS_Y.PREVIOUS_Z
This script pushes a ``release-docs-X.Y.Z`` branch to your ``arrow-site``
fork. You need to create a Pull Request and use the ``asf-site`` branch as base
for it.
@@ -686,4 +719,4 @@ Be sure to go through on the following checklist:
.. code-block:: Bash
- dev/release/post-07-remove-old-artifacts.sh
+ dev/release/post-09-remove-old-artifacts.sh
diff --git a/matlab/tools/packageMatlabInterface.m
b/matlab/tools/packageMatlabInterface.m
index 3d97000261..5c82763b25 100644
--- a/matlab/tools/packageMatlabInterface.m
+++ b/matlab/tools/packageMatlabInterface.m
@@ -29,15 +29,10 @@ disp("Toolbox Folder: " + toolboxFolder);
disp("Output Folder: " + outputFolder);
disp("Toolbox Version Raw: " + toolboxVersionRaw);
-
-% Note: This string processing heuristic may not be robust to future
-% changes in the Arrow versioning scheme.
-dotIdx = strfind(toolboxVersionRaw, ".");
-numDots = numel(dotIdx);
-if numDots >= 3
- toolboxVersion = extractBefore(toolboxVersionRaw, dotIdx(3));
-else
- toolboxVersion = toolboxVersionRaw;
+versionPattern = regexpPattern("^[0-9]+\.[0-9]+\.[0-9]+");
+toolboxVersion = extract(toolboxVersionRaw, versionPattern);
+if isempty(toolboxVersion)
+ error("Unable to extract MAJOR.MINOR.PATCH version string from " +
toolboxVersionRaw);
end
disp("Toolbox Version:" + toolboxVersion);
@@ -68,7 +63,7 @@ currentRelease = matlabRelease.Release;
opts.MinimumMatlabRelease = currentRelease;
opts.MaximumMatlabRelease = currentRelease;
-opts.OutputFile = fullfile(outputFolder, compose("matlab-arrow-%s.mltbx",
toolboxVersionRaw));
+opts.OutputFile = fullfile(outputFolder, compose("matlab-arrow-%s.mltbx",
toolboxVersion));
disp("Output File: " + opts.OutputFile);
matlab.addons.toolbox.packageToolbox(opts);