Skip to content

Add snapshot publishing script #39

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Apr 11, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions deploy.sh
Original file line number Diff line number Diff line change
Expand Up @@ -45,13 +45,13 @@ else
-Dgradle.cache.remote.enabled=false -Dgradle.cache.local.enabled=false \
-Ddevelocity.cache.remote.enabled=false -Ddevelocity.cache.local.enabled=false \
$ADDITIONAL_OPTIONS
fi

if [ -f "./jreleaser.yml" ]; then
# JReleaser-based build
source "$SCRIPTS_DIR/jreleaser-setup.sh"
# Execute a JReleaser command such as 'full-release'
./jreleaser/bin/jreleaser full-release -Djreleaser.project.version="$RELEASE_VERSION"
fi
if [ -f "./jreleaser.yml" ]; then
# JReleaser-based build
source "$SCRIPTS_DIR/jreleaser-setup.sh"
# Execute a JReleaser command such as 'full-release'
$SCRIPTS_DIR/jreleaser/bin/jreleaser full-release -Djreleaser.project.version="$RELEASE_VERSION"
fi

popd
15 changes: 9 additions & 6 deletions jreleaser-setup.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,18 @@
# SCRIPTS_DIR="$(readlink -f ${BASH_SOURCE[0]} | xargs dirname)"
# source "$SCRIPTS_DIR/jreleaser-setup.sh"

if [ -d "jreleaser" ]; then
echo "JReleaser was already set up."
./jreleaser/bin/jreleaser --version
SCRIPTS_DIR="$(readlink -f ${BASH_SOURCE[0]} | xargs dirname)"

if [ -d "${SCRIPTS_DIR}/jreleaser/bin/jreleaser" ]; then
echo "JReleaser was already set up. Skipping installation"
$SCRIPTS_DIR/jreleaser/bin/jreleaser --version
return
fi

echo "About to install JReleaser."
wget https://github.com/jreleaser/jreleaser/releases/download/v1.17.0/jreleaser-1.17.0.zip -qO jreleaser.zip
unzip jreleaser.zip
mv jreleaser-1.17.0 jreleaser
unzip -qq jreleaser.zip
mv jreleaser-1.17.0/* $SCRIPTS_DIR/jreleaser
rm jreleaser.zip

./jreleaser/bin/jreleaser --version
$SCRIPTS_DIR/jreleaser/bin/jreleaser --version
3 changes: 3 additions & 0 deletions jreleaser/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# The folder into which we install jreleaser into
*
!.gitignore
64 changes: 63 additions & 1 deletion publish.sh
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,68 @@ if [ -z "$DEVELOPMENT_VERSION" ]; then
exit 1
fi

#--------------------------------------------
# Environment variables

if [ -z "$RELEASE_GPG_PRIVATE_KEY_PATH" ]; then
echo "ERROR: environment variable RELEASE_GPG_PRIVATE_KEY_PATH is not set"
exit 1
fi

#--------------------------------------------
# GPG

function gpg_import() {
local privateKeyPath="$1"
shift
local keyId
keyId=$(gpg "${@}" --batch --import "$privateKeyPath" 2>&1 | tee >(cat 1>&2) | grep 'key.*: secret key imported' | sed -E 's/.*key ([^:]+):.*/\1/')
# output the fingerprint of the imported key
gpg "${@}" --list-secret-keys --with-colon "$keyId" | sed -E '2!d;s/.*:([^:]+):$/\1/'
}

function gpg_delete() {
local fingerprint="$1"
shift
gpg "${@}" --batch --yes --delete-secret-keys "$fingerprint"
}

#--------------------------------------------
# Cleanup on exit

function cleanup() {
if [ -n "$IMPORTED_KEY" ]; then
echo "Deleting imported GPG private key..."
gpg_delete "$IMPORTED_KEY" || true
fi
if [ -d "$RELEASE_GPG_HOMEDIR" ]; then
echo "Cleaning up GPG homedir..."
rm -rf "$RELEASE_GPG_HOMEDIR" || true
echo "Clearing GPG agent..."
gpg-connect-agent reloadagent /bye || true
fi
}

trap "cleanup" EXIT

#--------------------------------------------
# Actual script

# keep the RELEASE_GPG_HOMEDIR just for the sake of the old release jobs,
# if those relied on this env variable:
export RELEASE_GPG_HOMEDIR="$SCRIPTS_DIR/.gpg"
#we probably can remove the following env variable once all releases are using JReleaser:
export GNUPGHOME="$RELEASE_GPG_HOMEDIR"
# this env variable is used by JReleaser to find the keys to sing things:
export JRELEASER_GPG_HOMEDIR="$RELEASE_GPG_HOMEDIR"

mkdir -p -m 700 "$RELEASE_GPG_HOMEDIR"
IMPORTED_KEY="$(gpg_import "$RELEASE_GPG_PRIVATE_KEY_PATH")"
if [ -z "$IMPORTED_KEY" ]; then
echo "Failed to import GPG key"
exit 1
fi

RELEASE_VERSION_FAMILY=$(echo "$RELEASE_VERSION" | sed -E 's/^([0-9]+\.[0-9]+).*/\1/')

if [ "$PROJECT" == "orm" ] || [ "$PROJECT" == "reactive" ] || [ "$PROJECT" == "models" ]; then
Expand All @@ -89,7 +151,7 @@ if [ "$PROJECT" == "orm" ] || [ "$PROJECT" == "reactive" ] || [ "$PROJECT" == "m
# JReleaser-based build
source "$SCRIPTS_DIR/jreleaser-setup.sh"
# Execute a JReleaser command such as 'full-release'
./jreleaser/bin/jreleaser full-release -Djreleaser.project.version="$RELEASE_VERSION"
$SCRIPTS_DIR/jreleaser/bin/jreleaser full-release -Djreleaser.project.version="$RELEASE_VERSION"
else
EXTRA_ARGS+=" closeAndReleaseSonatypeStagingRepository"
fi
Expand Down
64 changes: 0 additions & 64 deletions release.sh
Original file line number Diff line number Diff line change
Expand Up @@ -126,70 +126,6 @@ fi
RELEASE_VERSION_BASIS=$(echo "$RELEASE_VERSION" | sed -E 's/^([0-9]+\.[0-9]+\.[0-9]+).*/\1/')
NEXT_VERSION_BASIS=$(echo "$DEVELOPMENT_VERSION" | sed -E 's/^([0-9]+\.[0-9]+\.[0-9]+).*/\1/')

#--------------------------------------------
# Environment variables

if [ -z "$RELEASE_GPG_HOMEDIR" ]; then
echo "ERROR: environment variable RELEASE_GPG_HOMEDIR is not set"
exit 1
fi
if [ -z "$RELEASE_GPG_PRIVATE_KEY_PATH" ]; then
echo "ERROR: environment variable RELEASE_GPG_PRIVATE_KEY_PATH is not set"
exit 1
fi

#--------------------------------------------
# GPG

function gpg_import() {
local privateKeyPath="$1"
shift
local keyId
keyId=$(gpg "${@}" --batch --import "$privateKeyPath" 2>&1 | tee >(cat 1>&2) | grep 'key.*: secret key imported' | sed -E 's/.*key ([^:]+):.*/\1/')
# output the fingerprint of the imported key
gpg "${@}" --list-secret-keys --with-colon "$keyId" | sed -E '2!d;s/.*:([^:]+):$/\1/'
}

function gpg_delete() {
local fingerprint="$1"
shift
gpg "${@}" --batch --yes --delete-secret-keys "$fingerprint"
}

#--------------------------------------------
# Cleanup on exit

function cleanup() {
if [ -n "$IMPORTED_KEY" ]; then
echo "Deleting imported GPG private key..."
gpg_delete "$IMPORTED_KEY" || true
fi
if [ -d "$RELEASE_GPG_HOMEDIR" ]; then
echo "Cleaning up GPG homedir..."
rm -rf "$RELEASE_GPG_HOMEDIR" || true
echo "Clearing GPG agent..."
gpg-connect-agent reloadagent /bye || true
fi
}

trap "cleanup" EXIT

#--------------------------------------------
# Actual script

if [ -e "$RELEASE_GPG_HOMEDIR" ]; then
echo "ERROR: temporary gpg homedir '$RELEASE_GPG_HOMEDIR' must not exist"
exit 1
fi
mkdir -p -m 700 "$RELEASE_GPG_HOMEDIR"
export GNUPGHOME="$RELEASE_GPG_HOMEDIR"
export JRELEASER_GPG_HOMEDIR="$RELEASE_GPG_HOMEDIR"
IMPORTED_KEY="$(gpg_import "$RELEASE_GPG_PRIVATE_KEY_PATH")"
if [ -z "$IMPORTED_KEY" ]; then
echo "Failed to import GPG key"
exit 1
fi

if [ "$PUSH_CHANGES" != "true" ]; then
ADDITIONAL_OPTIONS="-d"
fi
Expand Down
37 changes: 37 additions & 0 deletions snapshot-deploy.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
#!/usr/bin/env -S bash -e

WORKSPACE="${WORKSPACE:-'.'}"
SCRIPTS_DIR="$(readlink -f ${BASH_SOURCE[0]} | xargs dirname)"

PROJECT="$1"
VERSION="$2"

if [ -z "$PROJECT" ]; then
echo "ERROR: Project not supplied"
exit 1
fi

if [ -z "$VERSION" ]; then
echo "ERROR: Version not supplied"
exit 1
fi

if ! [[ $VERSION =~ ^.+-SNAPSHOT$ ]]; then
echo "ERROR: Supplied Version (${VERSION}) is not a SNAPSHOT"
exit 1
fi

source "$SCRIPTS_DIR/jreleaser-setup.sh"

if [ "$PROJECT" == "search" ] || [ "$PROJECT" == "validator" ] || [ "$PROJECT" == "tools" ] || [[ $PROJECT =~ ^infra-.+ ]]; then
./mvnw -Pci-build -DskipTests clean deploy
elif [ "$PROJECT" == "orm" ] || [ "$PROJECT" == "reactive" ] || [ "$PROJECT" == "models" ]; then
./gradlew clean publish -x test --no-scan --no-daemon --no-build-cache --stacktrace
else
echo "ERROR: Unknown project name $PROJECT"
usage
exit 1
fi

# Execute a JReleaser command such as 'full-release'
$SCRIPTS_DIR/jreleaser/bin/jreleaser full-release -Djreleaser.project.version="$VERSION"