script to deploy to maven central

This commit is contained in:
2025-02-20 01:07:56 +00:00
parent 4887fa198b
commit a48fd041d1

74
scripts/maven-central-deploy.sh Executable file
View File

@@ -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}"