#!/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}"