This is an automated email from the ASF dual-hosted git repository.
Jefffrey pushed a commit to branch 58_maintenance
in repository https://gitbox.apache.org/repos/asf/arrow-rs.git
The following commit(s) were added to refs/heads/58_maintenance by this push:
new 627f0c2701 [58_maintenance] pull in updated release instructions from
main (#11843)
627f0c2701 is described below
commit 627f0c270195a5b5fea44387ad609d987ecc1683
Author: Jeffrey Vo <[email protected]>
AuthorDate: Fri Oct 23 09:43:16 2026 +0900
[58_maintenance] pull in updated release instructions from main (#11843)
Just so we're consistent with our release process for these backports
---
dev/release/README.md | 96 +++++++-------------
dev/release/create-tarball.sh | 65 ++++++++------
dev/release/label_issues.py | 153 --------------------------------
dev/release/rat_exclude_files.txt | 3 +
dev/release/update_change_log.sh | 76 ----------------
dev/release/verify-release-candidate.sh | 24 +++++
6 files changed, 96 insertions(+), 321 deletions(-)
diff --git a/dev/release/README.md b/dev/release/README.md
index c89968b3ee..be2a1f80d6 100644
--- a/dev/release/README.md
+++ b/dev/release/README.md
@@ -28,7 +28,7 @@ This file documents the release process for the "Rust Arrow
Crates": `arrow`, `a
The Rust Arrow Crates are interconnected (e.g. `parquet` has an optional
dependency on `arrow`) so we increment and release all of them together.
If any code has been merged to main that has a breaking API change, as defined
-in [Rust RFC 1105] he major version number is incremented (e.g. `9.0.2` to
`10.0.2`).
+in [Rust RFC 1105] the major version number is incremented (e.g. `9.0.2` to
`10.0.0`).
Otherwise the new minor version incremented (e.g. `9.0.2` to `9.1.0`).
[rust rfc 1105]:
https://github.com/rust-lang/rfcs/blob/master/text/1105-api-evolution.md
@@ -45,56 +45,50 @@ crates.io, the Rust ecosystem's package manager.
We create a `CHANGELOG.md` so our users know what has been changed between
releases.
-The CHANGELOG is created automatically using
-[update_change_log.sh](https://github.com/apache/arrow-rs/blob/main/dev/release/update_change_log.sh)
+## Prepare CHANGELOG and version
-This script creates a changelog using github issues and the
-labels associated with them.
-
-## Prepare CHANGELOG and version:
+- Ensure [`git-cliff`](https://git-cliff.org/docs/installation/) is installed
Now prepare a PR to update `CHANGELOG.md` and versions on `main` to reflect
the planned release.
-Do this in the root of this repository. For example
[#2323](https://github.com/apache/arrow-rs/pull/2323)
+First copy the contents of `CHANGELOG.md` into `CHANGELOG-old.md`.
+
+Then do this in the root of this repository. For example
[#2323](https://github.com/apache/arrow-rs/pull/2323)
```bash
git checkout main
git pull
git checkout -b <RELEASE_BRANCH>
-# Update versions. Make sure to run it before the next step since we do not
want CHANGELOG-old.md affected.
-sed -i '' -e 's/14.0.0/39.0.0/g' `find . -name 'Cargo.toml' -or -name '*.md' |
grep -v CHANGELOG.md | grep -v README.md`
+# Update versions.
+sed -i '' -e 's/14.0.0/39.0.0/g' `find . -name 'Cargo.toml' -or -name '*.md' |
grep -v CHANGELOG.md | grep -v CHANGELOG-old.md | grep -v README.md`
+cargo check # update Cargo.lock with new versions
git commit -a -m 'Update version'
-# ensure your github token is available
-export ARROW_GITHUB_API_TOKEN=<TOKEN>
+# Assuming remote name is apache; if named differently ensure this is changed,
+# since we need the tags from the GitHub repository
+git fetch apache --tags
-# manually edit ./dev/release/update_change_log.sh to reflect the release
version
-# create the changelog
-./dev/release/update_change_log.sh
-# commit the initial changes
-git commit -a -m 'Create changelog'
+# ensure your github token is available
+export GITHUB_TOKEN=<TOKEN>
-# run automated script to copy labels to issues based on referenced PRs
-# (NOTE 1: this must be done by a committer / other who has
-# write access to the repository)
-#
-# NOTE 2: this must be done after creating the initial CHANGELOG file
-python dev/release/label_issues.py
+# e.g. TAG=60.0.0; this is just used to format the CHANGELOG, so tag doesn't
+# need to exist yet, and don't put an RC tag either
+# (we are excluding our above version bump commit from the changelog)
+git-cliff --tag <TAG> --unreleased --output CHANGELOG.md --skip-commit $(git
rev-parse HEAD)
-# review change log / edit issues and labels if needed, rerun, repeat as
necessary
-# note you need to revert changes to CHANGELOG-old.md if you want to rerun the
script
-./dev/release/update_change_log.sh
+# review change log, adjust labels on PR's as required
+# can rerun above git-cliff command if needed
-# Commit the changes
-git commit -a -m 'Update changelog'
+# commit the changelog
+git commit -a -m 'Create changelog'
git push
```
Note that when reviewing the change log, rather than editing the
-`CHANGELOG.md`, it is preferred to update the issues and their labels
-(e.g. add `invalid` label to exclude them from release notes)
+`CHANGELOG.md`, it is preferred to update the PRs and their labels
+(e.g. add `development-process` label to exclude them from release notes)
Merge this PR to `main` prior to the next step.
@@ -109,7 +103,7 @@ distribution servers.
Pick numbers in sequential order, with `1` for `rc1`, `2` for `rc2`, etc.
-### Create git tag for the release:
+### Create git tag for the release
While the official release artifact is a signed tarball, we also tag the
commit it was created for convenience and code archaeology.
@@ -141,39 +135,12 @@ The `create-tarball.sh` script
apache distribution svn server
2. provide you an email template to
- send to [email protected] for release voting.
+ send to <[email protected]> for release voting.
### Vote on Release Candidate tarball
-Send an email, based on the output from the script to [email protected].
The email should look like
-
-```
-To: [email protected]
-Subject: [VOTE][RUST] Release Apache Arrow
-
-Hi,
-
-I would like to propose a release of Apache Arrow Rust
-Implementation, version 4.1.0.
-
-This release candidate is based on commit:
a5dd428f57e62db20a945e8b1895de91405958c4 [1]
-
-The proposed release tarball and signatures are hosted at [2].
-The changelog is located at [3].
-
-Please download, verify checksums and signatures, run the unit tests,
-and vote on the release.
-
-The vote will be open for at least 72 hours.
-
-[ ] +1 Release this as Apache Arrow Rust
-[ ] +0
-[ ] -1 Do not release this as Apache Arrow Rust because...
-
-[1]:
https://github.com/apache/arrow-rs/tree/a5dd428f57e62db20a945e8b1895de91405958c4
-[2]: https://dist.apache.org/repos/dist/dev/arrow/apache-arrow-rs-4.1.0
-[3]:
https://github.com/apache/arrow-rs/blob/a5dd428f57e62db20a945e8b1895de91405958c4/CHANGELOG.md
-```
+Send an email, based on the output from the script to <[email protected]>.
+See an [example of how the email should
look](https://lists.apache.org/thread/2vpxdt6n7kzo72sxpr7q8yyby4495gnk).
For the release to become "official" it needs at least three Apache Arrow PMC
members to vote +1 on it.
@@ -189,7 +156,7 @@ The `dev/release/verify-release-candidate.sh` script in
this repository can assi
If the release is not approved, fix whatever the problem is and try again with
the next RC number
-### If the release is approved,
+### If the release is approved
Then, create a new release on GitHub using the tag `<version>` (e.g. `4.1.0`).
@@ -200,7 +167,7 @@ git tag <version> <version>-<rc>
git push apache <version>
```
-Move tarball to the release location in SVN, e.g.
https://dist.apache.org/repos/dist/release/arrow/arrow-rs-4.1.0/, using the
`release-tarball.sh` script:
+Move tarball to the release location in SVN, e.g.
<https://dist.apache.org/repos/dist/release/arrow/arrow-rs-4.1.0/>, using the
`release-tarball.sh` script:
```shell
./dev/release/release-tarball.sh 4.1.0 2
@@ -212,7 +179,7 @@ Congratulations! The release is now official!
The [`release.yml`] workflow automatically creates a github release for the
tag.
Check that the release is created and contains the correct changelog here:
-https://github.com/apache/arrow-rs/releases
+<https://github.com/apache/arrow-rs/releases>
[`release.yml`]:
https://github.com/apache/arrow-rs/blob/main/.github/workflows/release.yml#L1-L0
@@ -249,7 +216,6 @@ Rust Arrow Crates:
(cd arrow-ipc && cargo publish)
(cd arrow-csv && cargo publish)
(cd arrow-json && cargo publish)
-(cd arrow-avro && cargo publish)
(cd arrow-arith && cargo publish)
(cd arrow-string && cargo publish)
(cd arrow-row && cargo publish)
diff --git a/dev/release/create-tarball.sh b/dev/release/create-tarball.sh
index b75313b6f0..4c3a4f89bd 100755
--- a/dev/release/create-tarball.sh
+++ b/dev/release/create-tarball.sh
@@ -65,8 +65,9 @@ else
tar=tar
fi
-if ! git -C "${SOURCE_TOP_DIR}" rev-list --max-count=1 ${tag}; then
+if ! commit_sha=$(git -C "${SOURCE_TOP_DIR}" rev-list --max-count=1 "${tag}");
then
echo "Cannot continue: unknown git tag: $tag"
+ exit 1
fi
@@ -78,6 +79,33 @@
url="https://dist.apache.org/repos/dist/dev/arrow/${release}-rc${rc}"
echo "Attempting to create ${tarball} from tag ${tag}"
+# Write out the submodule commits referenced so that release verification
+# can later ensure it uses the same versions of test data.
+tmpdir=$(mktemp -d)
+trap 'rm -r "${tmpdir}"' EXIT
+git -C "${SOURCE_TOP_DIR}" ls-tree -r ${tag} \
+ | awk '$2 == "commit" { print $4, $3 }' > ${tmpdir}/.gitmodules-commits
+
+# create <tarball> containing the files in git at $tag
+# the files in the tarball are prefixed with {release}
+# (e.g. apache-arrow-rs-4.0.1)
+mkdir -p ${distdir}
+(cd "${SOURCE_TOP_DIR}" && \
+ git archive --prefix ${release}/ \
+ --add-file ${tmpdir}/.gitmodules-commits ${tag} \
+ | gzip > ${tarball})
+
+echo "Running rat license checker on ${tarball}"
+${SOURCE_DIR}/run-rat.sh ${tarball}
+
+echo "Signing tarball and creating checksums"
+gpg --armor --output ${tarball}.asc --detach-sig ${tarball}
+# create signing with relative path of tarball
+# so that they can be verified with a command such as
+# shasum --check apache-arrow-rs-4.1.0-rc2.tar.gz.sha512
+(cd ${distdir} && shasum -a 256 ${tarname}) > ${tarball}.sha256
+(cd ${distdir} && shasum -a 512 ${tarname}) > ${tarball}.sha512
+sha256=$(cut -d ' ' -f 1 "${tarball}.sha256")
echo "Draft email for [email protected] mailing list"
echo ""
@@ -88,14 +116,17 @@ Subject: [VOTE][RUST] Release Apache Arrow Rust ${version}
RC${rc}
Hi,
-I would like to propose a release of Apache Arrow Rust Implementation, version
${tag}.
+I would like to propose a release of Apache Arrow Rust Implementation, version
${version}.
-This release candidate is based on commit: ${tag} [1]
+This release candidate is based on commit: ${commit_sha} [1].
+The SHA256 of the release candidate is: ${sha256}
The proposed release tarball and signatures are hosted at [2].
The changelog is located at [3].
+The release tracking issue is: [5]
+
Please download, verify checksums and signatures, run the unit tests,
and vote on the release. There is a script [4] that automates some of
the verification.
@@ -106,35 +137,15 @@ The vote will be open for at least 72 hours.
[ ] +0
[ ] -1 Do not release this as Apache Arrow Rust ${version} because...
-[1]: https://github.com/apache/arrow-rs/tree/${tag}
+[1]: https://github.com/apache/arrow-rs/tree/${commit_sha}
[2]: ${url}
-[3]: https://github.com/apache/arrow-rs/blob/${tag}/CHANGELOG.md
+[3]: https://github.com/apache/arrow-rs/blob/${commit_sha}/CHANGELOG.md
[4]:
https://github.com/apache/arrow-rs/blob/master/dev/release/verify-release-candidate.sh
+[5]: RELEASE_ISSUE
MAIL
echo "---------------------------------------------------------"
-
-
-# create <tarball> containing the files in git at $tag
-# the files in the tarball are prefixed with {release}
-# (e.g. apache-arrow-rs-4.0.1)
-mkdir -p ${distdir}
-(cd "${SOURCE_TOP_DIR}" && \
- git archive ${tag} --prefix ${release}/ \
- | gzip > ${tarball})
-
-echo "Running rat license checker on ${tarball}"
-${SOURCE_DIR}/run-rat.sh ${tarball}
-
-echo "Signing tarball and creating checksums"
-gpg --armor --output ${tarball}.asc --detach-sig ${tarball}
-# create signing with relative path of tarball
-# so that they can be verified with a command such as
-# shasum --check apache-arrow-rs-4.1.0-rc2.tar.gz.sha512
-(cd ${distdir} && shasum -a 256 ${tarname}) > ${tarball}.sha256
-(cd ${distdir} && shasum -a 512 ${tarname}) > ${tarball}.sha512
-
echo "Uploading to apache dist/dev to ${url}"
svn co --depth=empty https://dist.apache.org/repos/dist/dev/arrow
${SOURCE_TOP_DIR}/dev/dist
svn add ${distdir}
-svn ci -m "Apache Arrow Rust ${version} ${rc}" ${distdir}
\ No newline at end of file
+svn ci -m "Apache Arrow Rust ${version} ${rc}" ${distdir}
diff --git a/dev/release/label_issues.py b/dev/release/label_issues.py
deleted file mode 100755
index b004b7fa7f..0000000000
--- a/dev/release/label_issues.py
+++ /dev/null
@@ -1,153 +0,0 @@
-#!/usr/bin/env python
-
-##############################################################################
-# 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.
-##############################################################################
-
-# Python script to add labels to github issues from the PRs that closed them
-#
-# Required setup:
-# $ pip install PyGithub
-#
-# ARROW_GITHUB_API_TOKEN needs to be set to your github token
-from github import Github
-import os
-import re
-
-
-
-# get all cross referenced issues from the named issue
-# (aka linked PRs)
-# issue = arrow_repo.get_issue(issue_number)
-def get_cross_referenced_issues(issue):
- all_issues = set()
- for timeline_item in issue.get_timeline():
- if timeline_item.event == 'cross-referenced' and
timeline_item.source.type == 'issue':
- all_issues.add(timeline_item.source.issue)
-
- # convert to list
- return [i for i in all_issues]
-
-
-# labels not to transfer
-BLACKLIST_LABELS = {'development-process', 'api-change'}
-
-# Adds labels to the specified issue with the labels from linked pull requests
-def relabel_issue(arrow_repo, issue_number):
- #print(issue_number, 'fetching issue')
- issue = arrow_repo.get_issue(issue_number)
- print('considering issue', issue.html_url)
- linked_issues = get_cross_referenced_issues(issue)
- #print(' ', 'cross referenced issues:', linked_issues)
-
- # Figure out what labels need to be added, if any
- existing_labels = set()
- for label in issue.labels:
- existing_labels.add(label.name)
-
- # find all labels to add
- for linked_issue in linked_issues:
- if linked_issue.pull_request is None:
- print(' ', 'not pull request, skipping', linked_issue.html_url)
- continue
-
- if linked_issue.repository.name != 'arrow-rs':
- print(' ', 'not in arrow-rs, skipping', linked_issue.html_url)
- continue
-
- print(' ', 'finding labels for linked pr', linked_issue.html_url)
- linked_labels = set()
- for label in linked_issue.labels:
- linked_labels.add(label.name)
- #print(' ', 'existing labels:', existing_labels)
-
- labels_to_add = linked_labels.difference(existing_labels)
-
- # remove any blacklist labels, if any
- for l in BLACKLIST_LABELS:
- labels_to_add.discard(l)
-
- if len(labels_to_add) > 0:
- print(' ', 'adding labels: ', labels_to_add, 'to',
issue.number)
- for label in labels_to_add:
- issue.add_to_labels(label)
- print(' ', 'added', label)
- existing_labels.add(label)
-
- # leave a note about what updated these labels
- issue.create_comment('`label_issue.py` automatically added
labels {} from #{}'.format(labels_to_add, linked_issue.number))
-
-
-# what section headings in the CHANGELOG.md file contain closed issues that
may need relabeling
-ISSUE_SECTION_NAMES = ['Closed issues:', 'Fixed bugs:', 'Implemented
enhancements:']
-
-# find all possible issues / bugs by scraping CHANGELOG.md
-#
-# TODO: Find all tickets merged since this tag
-# The compare api can find all commits since that tag
-# I could not find a good way in the github API to find the PRs connected to a
commit
-#since_tag = '22.0.0'
-
-def find_issues_from_changelog():
- script_dir = os.path.dirname(os.path.realpath(__file__))
- path = os.path.join(script_dir, '..', '..', 'CHANGELOG.md')
-
- issues = set()
-
- # Flag that
- in_issue_section = False
-
- with open(path, 'r') as f:
- for line in f:
- #print('line: ', line)
- line = line.strip()
- if line.startswith('**'):
- section_name = line.replace('**', '')
- if section_name in ISSUE_SECTION_NAMES:
- #print(' ', 'is issue section', section_name)
- in_issue_section = True
- else:
- #print(' ', 'is not issue section', section_name)
- in_issue_section = False
-
- if in_issue_section:
- match = re.search('#([\d]+)', line)
- if match is not None:
- #print(' ', 'reference', match.group(1))
- issues.add(match.group(1))
-
- # Convert to list of number
- return sorted([int(i) for i in issues])
-
-
-if __name__ == '__main__':
- print('Attempting to label github issues from their corresponding PRs')
-
- issues = find_issues_from_changelog()
- print('Issues found in CHANGELOG: ', issues)
-
- github_token = os.environ.get("ARROW_GITHUB_API_TOKEN")
-
- print('logging into GITHUB...')
- github = Github(github_token)
-
- print('getting github repo...')
- arrow_repo = github.get_repo('apache/arrow-rs')
-
- for issue in issues:
- relabel_issue(arrow_repo, issue)
diff --git a/dev/release/rat_exclude_files.txt
b/dev/release/rat_exclude_files.txt
index d08a0ea8c7..05223bcb19 100644
--- a/dev/release/rat_exclude_files.txt
+++ b/dev/release/rat_exclude_files.txt
@@ -11,6 +11,9 @@ parquet_derive/test/dependency/*
.gitattributes
**.gitignore
.gitmodules
+.gitmodules-commits
+AGENTS.md
+CLAUDE.md
Cargo.lock
filtered_rat.txt
rat.txt
diff --git a/dev/release/update_change_log.sh b/dev/release/update_change_log.sh
deleted file mode 100755
index 5580c01a98..0000000000
--- a/dev/release/update_change_log.sh
+++ /dev/null
@@ -1,76 +0,0 @@
-#!/bin/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.
-#
-
-# invokes the changelog generator from
-# https://github.com/github-changelog-generator/github-changelog-generator
-#
-# With the config located in
-# arrow-rs/.github_changelog_generator
-#
-# Usage:
-# ARROW_GITHUB_API_TOKEN=<TOKEN> ./update_change_log.sh
-
-set -e
-
-SINCE_TAG="58.3.0"
-FUTURE_RELEASE="58.4.0"
-
-SOURCE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
-SOURCE_TOP_DIR="$(cd "${SOURCE_DIR}/../../" && pwd)"
-
-OUTPUT_PATH="${SOURCE_TOP_DIR}/CHANGELOG.md"
-
-# use exclude-tags-regex to filter out tags used for object_store
-# crates and only only look at tags that DO NOT begin with `object_store_`
-pushd "${SOURCE_TOP_DIR}"
-docker run -it --rm -e CHANGELOG_GITHUB_TOKEN="$ARROW_GITHUB_API_TOKEN" -v
"$(pwd)":/usr/local/src/your-app
githubchangeloggenerator/github-changelog-generator \
- --user apache \
- --project arrow-rs \
- --cache-file=.githubchangeloggenerator.cache \
- --cache-log=.githubchangeloggenerator.cache.log \
- --http-cache \
- --max-issues=300 \
- --exclude-tags-regex "^object_store_\d+\.\d+\.\d+$|-rc\d$" \
- --since-tag ${SINCE_TAG} \
- --future-release ${FUTURE_RELEASE}
-
-sed -i.bak "s/\\\n/\n\n/" "${OUTPUT_PATH}"
-
-# Put license header back on
-echo '<!---
- 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.
--->
-' | cat - "${OUTPUT_PATH}" > "${OUTPUT_PATH}".tmp
-mv "${OUTPUT_PATH}".tmp "${OUTPUT_PATH}"
diff --git a/dev/release/verify-release-candidate.sh
b/dev/release/verify-release-candidate.sh
index d8b888effe..902218675e 100755
--- a/dev/release/verify-release-candidate.sh
+++ b/dev/release/verify-release-candidate.sh
@@ -95,6 +95,17 @@ setup_tempdir() {
fi
}
+# Print the commit for the submodule at path $1 recorded in .gitmodules-commits
+submodule_commit() {
+ local commit
+ commit=$(awk -v path="$1" '$1 == path { print $2 }' .gitmodules-commits)
+ if [ -z "${commit}" ]; then
+ echo "No commit for submodule $1 found in .gitmodules-commits" >&2
+ return 1
+ fi
+ echo "${commit}"
+}
+
test_source_distribution() {
# install rust toolchain in a similar fashion like test-miniconda
export RUSTUP_HOME=$PWD/test-rustup
@@ -117,6 +128,19 @@ test_source_distribution() {
export ARROW_TEST_DATA=$PWD/arrow-testing-data/data
export PARQUET_TEST_DATA=$PWD/parquet-testing-data/data
+ if [ -f .gitmodules-commits ]; then
+ # Use the testing repository commits referenced by the release
+ local arrow_testing_commit parquet_testing_commit
+ arrow_testing_commit=$(submodule_commit testing)
+ parquet_testing_commit=$(submodule_commit parquet-testing)
+ # Fetch the commits explicitly, as they may not be reachable from any
+ # branch (e.g. a submodule pinned to a pull request's head commit)
+ git -C arrow-testing-data fetch origin "${arrow_testing_commit}"
+ git -C arrow-testing-data checkout "${arrow_testing_commit}"
+ git -C parquet-testing-data fetch origin "${parquet_testing_commit}"
+ git -C parquet-testing-data checkout "${parquet_testing_commit}"
+ fi
+
cargo test --all
# verify that the leaf crates can be published to crates.io