+1
Attaching an updated validation script; maybe we should have a central repo
w/the scripts to validate our various releases...
On Fri, Oct 10, 2025, at 3:12 PM, Francisco Guerrero wrote:
> +1 thanks for driving this release!
>
> On 2025/10/10 18:46:45 Yifan Cai wrote:
> > +1 (nb)
> >
> > Thanks for providing the validate script. I was able to run the script
> > after some minor modifications.
> >
> > - Yifan
> >
> > On Thu, Oct 9, 2025 at 3:09 PM Doug Rohrer <[email protected]> wrote:
> >
> > > Ok - let's try this again:
> > >
> > > Candidate SHA:
> > >
> > > https://github.com/apache/cassandra-in-jvm-dtest-api/commit/775bfd5283ec77960713e3de2abeb4d068199ef7
> > >
> > > Tagged 0.0.18
> > >
> > > Artifacts:
> > >
> > > https://repository.apache.org/content/repositories/orgapachecassandra-1420/org/apache/cassandra/dtest-api/0.0.18
> > >
> > > Key signature (this is my RSA key, in KEYS file):
> > > 9A648E3DEDA36EECCCC374C4277B602ED2C52277
> > >
> > > See changes/info below.
> > >
> > > Attached is a script that will pull down all of the artifacts, verify the
> > > GPG signatures, and validate the md5/sha1 files match.
> > > NOTE: it'll create a `tmp` directory wherever you run it, so I'd recommend
> > > running it in an empty directory somewhere, or just use the text and run
> > > the commands manually wherever).
> > >
> > >
> > > Script based very loosely on
> > > https://github.com/apache/cassandra-builds/pull/32/files - but since
> > > we're not building RPMs/Debian packages it's just to do the validation.
> > >
> > >
> > > New vote will be open for 72 hours. Everyone who has tested the build lis
> > > invited to vote. Votes by PMC members are considered binding. A vote
> > > passes
> > > if there are at least three binding +1s.
> > >
> > >
> > > Thanks,
> > >
> > > Doug
> > >
> > > On Oct 9, 2025, at 5:52 PM, Doug Rohrer <[email protected]> wrote:
> > >
> > > Hey folks,
> > >
> > > In an effort to document/automate validiting the release, I noticed that
> > > GPG picked a more recent key for me, which is an ECC key, not RSA, which
> > > it
> > > seems will break things if we have it in the KEYS file, so I'm going to
> > > close this proposed release/vote, re-release it with my RSA key, and
> > > re-call for the vote along with a handy script to pull down the artifacts
> > > and check the sha1/md5/gpg signatures you can run.
> > >
> > > Thanks,
> > >
> > > Doug
> > >
> > > On Oct 7, 2025, at 5:56 PM, Doug Rohrer <[email protected]> wrote:
> > >
> > > Hey folks,
> > >
> > > I'd like to propose a new release of the dtest-api that includes some
> > > updates to make it easier for Cassandra maintainers to deal with some of
> > > the jmx support classes, and for external consumers of the dtest api to
> > > use
> > > the jmx client without having to jump through some somewhat ugly hoops.
> > >
> > > Repository:
> > > https://gitbox.apache.org/repos/asf?p=cassandra-in-jvm-dtest-api.git
> > >
> > > Candidate SHA:
> > >
> > > https://github.com/apache/cassandra-in-jvm-dtest-api/commit/421fe11b8fd862d82f89607c1ae2807657ba6578
> > > Tagged with 0.0.18
> > >
> > > Artifacts:
> > >
> > > https://repository.apache.org/content/repositories/orgapachecassandra-1419/org/apache/cassandra/dtest-api/0.0.18/
> > >
> > > Key signature: 2C94EBA59C0BA7E0EDAAE142BF79EF32B05FB5CA
> > >
> > > Changes since last release:
> > >
> > > * CASSANDRA-20884 - Move JMX classes to the in-jvm-dtest API project
> > >
> > > I have patches available for 4.0, 4.1, 5.0, and trunk Cassandra branches
> > > to take advantage of these changes as well, which can be updated to use
> > > this release and committed once the vote passes.
> > >
> > > The vote will be open for 72 hours. Everyone who has tested the build lis
> > > invited to vote. Votes by PMC members are considered binding. A vote
> > > passes
> > > if there are at least three binding +1s.
> > >
> > > See https://issues.apache.org/jira/browse/CASSANDRA-20884 for branches of
> > > Cassandra for testing the dtest-api change (which currently use a snapshot
> > > build of this).
> > >
> > > Thanks,
> > >
> > > Doug Rohrer
> > >
> > >
> > >
> > >
> >
>
#!/bin/bash
show_help() {
cat << EOF
Usage: $(basename "$0") <release-type> <version> [staging-repo-id]
Validates Apache Cassandra dtest-api release artifacts by verifying GPG
signatures,
SHA1 and MD5 checksums.
ARGUMENTS:
release-type Type of release to validate (required)
Valid values: 'staged' or 'released'
version Release version number to validate (required)
Example: 0.0.18
staging-repo-id Maven staging repository ID (required only for 'staged')
This is the numeric ID found in the staging repo URL from
the vote email (e.g., 1419)
Extract from URL: In
https://repository.apache.org/content/repositories/orgapachecassandra-1420/...
the staging repo ID is 1420
Must NOT be provided when release-type is 'released'
PREREQUISITES:
- wget (for downloading artifacts)
- gpg (for signature verification)
- sha1sum (for checksum verification)
EXAMPLES:
# Validate a staged release with staging repo ID 1419
$(basename "$0") staged 0.0.18 1419
# Validate a released version
$(basename "$0") released 0.0.18
NOTES:
- Artifacts are downloaded to ./tmp/<version>/
- For 'staged': Downloads from repository.apache.org staging area
- For 'released': Downloads from repository.apache.org releases area
- Script verifies GPG signatures and checksums for all .pom and .jar files
EOF
exit 1;
}
# Show help if requested
if [ "$1" == "-h" ] || [ "$1" == "--help" ]; then
show_help
exit 0
fi
###################
# prerequisites
# set -x
command -v wget >/dev/null 2>&1 || { echo >&2 "wget needs to be installed";
exit 1; }
command -v gpg >/dev/null 2>&1 || { echo >&2 "gpg needs to be installed"; exit
1; }
command -v sha1sum >/dev/null 2>&1 || { echo >&2 "sha1sum needs to be
installed"; exit 1; }
( [ "staged" == "$1" ] || [ "released" == "$1" ] ) || { echo >&2 "ERROR: first
argument must be 'staged' or 'released'"; show_help; }
( [ $# -ge 2 ] ) || { echo >&2 "ERROR: minimum two arguments must be provided";
show_help; }
if [ -z "$3" ] ; then
[ "released" == "$1" ] || { echo >&2 "ERROR: staging-repo-id (third
argument) is required when release-type is 'staged'"; show_help; }
maven_repo_url="https://repository.apache.org/content/repositories/releases/org/apache/cassandra/dtest-api/$2"
else
[ "staged" == "$1" ] || { echo >&2 "ERROR: staging-repo-id (third argument)
must NOT be provided when release-type is 'released'"; show_help; }
maven_repo_url="https://repository.apache.org/content/repositories/orgapachecassandra-$3/org/apache/cassandra/dtest-api/$2"
fi
(curl --output /dev/null --silent --head --fail "${maven_repo_url}") || { echo
>&2 "Not found: ${maven_repo_url}"; exit 1; }
###################
mkdir -p ./tmp/$2
cd ./tmp/$2
if [ ! -f KEYS ]; then
echo "No KEYS file found in current directory."
read -p "Would you like to download the Cassandra KEYS file? (y/n): " -n 1
-r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
echo "Downloading KEYS"
wget -q https://downloads.apache.org/cassandra/KEYS
gpg --import KEYS
else
echo "Skipping KEYS import. GPG verification may fail without the
proper keys."
fi
else
gpg --import KEYS
fi
echo "Downloading ${maven_repo_url}"
wget -Nvnd -e robots=off --recursive --no-parent ${maven_repo_url} > wget.log
2>&1 || { echo "ERROR: wget failed to download artifacts. Log:"; cat wget.log;
exit 1; }
echo
echo "====== CHECK RESULTS ======"
echo
(compgen -G "*.asc" >/dev/null) || { echo >&2 "No *.asc files found in $(pwd)";
exit 1; }
for f in *.asc ; do gpg --verify $f ; done
(compgen -G "*.pom" >/dev/null) || { echo >&2 "No *.pom files found in $(pwd)";
exit 1; }
(compgen -G "*.jar" >/dev/null) || { echo >&2 "No *.jar files found in $(pwd)";
exit 1; }
for f in *.pom *.jar ; do echo -n "sha1: " ; echo "$(cat $f.sha1) $f" |
sha1sum -c - ; echo -n "md5: " ; echo "$(cat $f.md5) $f" | md5sum -c - ; done
echo "Done."