From a48fd041d151dab1ffcdd86dcaa9d0767a421be7 Mon Sep 17 00:00:00 2001 From: Stephen Byrne Date: Thu, 20 Feb 2025 01:07:56 +0000 Subject: [PATCH] script to deploy to maven central --- scripts/maven-central-deploy.sh | 74 +++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100755 scripts/maven-central-deploy.sh diff --git a/scripts/maven-central-deploy.sh b/scripts/maven-central-deploy.sh new file mode 100755 index 0000000..c980c8e --- /dev/null +++ b/scripts/maven-central-deploy.sh @@ -0,0 +1,74 @@ +#!/usr/bin/env bash + +# This script deploys the built library to Maven Central. +# $GPG_KEY_ID must be set to a key ID +# $TOKEN_USERNAME and $TOKEN_PASSWORD must be set to your Maven Central token credentials + +if [ -z $GPG_KEY_ID ]; then + echo "\$GPG_KEY_ID not set" >&2 + exit 1 +fi +if [ -z $TOKEN_USERNAME ]; then + echo "\$TOKEN_USERNAME not set" >&2 + exit 1 +fi +if [ -z $TOKEN_PASSWORD ]; then + echo "\$TOKEN_PASSWORD not set" >&2 + exit 1 +fi + +POM=build/publications/maven/pom-default.xml + +set -e + +if [ ! -e "${POM}" ]; then + echo "No file: '${POM}'." >&2 + echo "Maybe run 'gradle -Pversion=0.0.1 build generatePomFileForMavenPublication'?" >&2 + exit 1 +fi + +GROUP_ID=$(xmlstarlet sel -t -m '//_:project' -v '_:groupId' build/publications/maven/pom-default.xml) +ARTIFACT_ID=$(xmlstarlet sel -t -m '//_:project' -v '_:artifactId' build/publications/maven/pom-default.xml) +VERSION=$(xmlstarlet sel -t -m '//_:project' -v '_:version' build/publications/maven/pom-default.xml) + +NAME="${GROUP_ID}:${ARTIFACT_ID}:${VERSION}" + +echo "Deploy ${NAME}..." + +# build the zip directory +ZIP_DIR="build/publications/maven/central-bundle" +rm -rf "${ZIP_DIR}" +SUB_DIR="${GROUP_ID//./\/}/${ARTIFACT_ID//.\//}/${VERSION}" +TARGET_DIR="${ZIP_DIR}/${SUB_DIR}" +mkdir -p "${TARGET_DIR}" + +cp $POM "${TARGET_DIR}/${ARTIFACT_ID}-${VERSION}.pom" +cp "build/libs/${ARTIFACT_ID}-${VERSION}.jar" "${TARGET_DIR}" +cp "build/libs/${ARTIFACT_ID}-${VERSION}-javadoc.jar" "${TARGET_DIR}" +cp "build/libs/${ARTIFACT_ID}-${VERSION}-sources.jar" "${TARGET_DIR}" + +# sign and digest +pushd $TARGET_DIR +for file in *.jar *.pom; do + gpg --default-key $GPG_KEY_ID --armor --detach-sign "${file}" + sha1sum "${file}" |awk '{print $1}' > "${file}.sha1" + md5sum "${file}" |awk '{print $1}' > "${file}.md5" +done +popd + +# build the zip file +ZIP="build/publications/maven/central-bundle.zip" +rm -f "${ZIP}" +pushd $ZIP_DIR +zip -r ../$(basename ${ZIP}) . +popd + +# deploy +AUTH_HEADER="Authorization: Bearer $(echo "${TOKEN_USERNAME}:${TOKEN_PASSWORD}"|base64)" +DEPLOYMENT_ID=$(curl --request POST \ + --verbose \ + --header "${AUTH_HEADER}" \ + --form bundle=@${ZIP} \ + "https://central.sonatype.com/api/v1/publisher/upload?publishingType=AUTOMATIC&name=${NAME}") + +echo "Deployment ID: ${DEPLOYMENT_ID}" \ No newline at end of file