Skip to content

Release Thin JAR

Release Thin JAR #10

Workflow file for this run

name: Release Thin JAR
on:
push:
tags:
- 'v*'
workflow_dispatch:
jobs:
publish-thin:
runs-on:
group: databricks-protected-runner-group
labels: linux-ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Java for publishing to Maven Central Repository
uses: actions/setup-java@v4
with:
java-version: 11
distribution: "adopt"
server-id: central
server-username: MAVEN_CENTRAL_USERNAME
server-password: MAVEN_CENTRAL_PASSWORD
gpg-private-key: ${{ secrets.GPG_PRIVATE_KEY }}
gpg-passphrase: GPG_PASSPHRASE
- name: Install Maven 3.9.8
run: |
set -euo pipefail
MAVEN_VERSION=3.9.8
echo "Installing Maven ${MAVEN_VERSION}..."
curl -fsSL "https://archive.apache.org/dist/maven/maven-3/${MAVEN_VERSION}/binaries/apache-maven-${MAVEN_VERSION}-bin.tar.gz" -o maven.tgz
sudo tar -C /opt -xzf maven.tgz
echo "M2_HOME=/opt/apache-maven-${MAVEN_VERSION}" >> "$GITHUB_ENV"
echo "/opt/apache-maven-${MAVEN_VERSION}/bin" >> "$GITHUB_PATH"
mvn -v | cat
- name: Configure GPG
run: |
echo "allow-loopback-pinentry" >> ~/.gnupg/gpg-agent.conf
echo "pinentry-mode loopback" >> ~/.gnupg/gpg.conf
gpg-connect-agent reloadagent /bye
- name: Build thin JAR
run: |
mvn -B -ntp -P release -DskipTests -Dgpg.skip=true clean package
- name: Verify thin jar exists
run: |
VERSION=$(grep -m1 '<version>' pom.xml | sed 's/.*<version>\(.*\)<\/version>.*/\1/')
test -f "target/databricks-jdbc-${VERSION}-thin.jar"
- name: Publish Thin JAR as Separate Artifact to Maven Central
run: |
VERSION=$(grep -m1 '<version>' pom.xml | sed 's/.*<version>\(.*\)<\/version>.*/\1/')
mvn -Prelease org.apache.maven.plugins:maven-gpg-plugin:3.2.7:sign-and-deploy-file \
-Dfile="target/databricks-jdbc-${VERSION}-thin.jar" \
-DpomFile="thin_public_pom.xml" \
-Dsources="target/databricks-jdbc-${VERSION}-sources.jar" \
-Djavadoc="target/databricks-jdbc-${VERSION}-javadoc.jar" \
-DrepositoryId=central \
-Durl=https://ossrh-staging-api.central.sonatype.com/service/local/staging/deploy/maven2/ \
-Dgpg.passphrase="${GPG_PASSPHRASE}"
env:
GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}
MAVEN_CENTRAL_USERNAME: ${{ secrets.MAVEN_CENTRAL_USERNAME }}
MAVEN_CENTRAL_PASSWORD: ${{ secrets.MAVEN_CENTRAL_PASSWORD }}
- name: Publish thin in Central (user-managed)
env:
MAVEN_CENTRAL_USERNAME: ${{ secrets.MAVEN_CENTRAL_USERNAME }}
MAVEN_CENTRAL_PASSWORD: ${{ secrets.MAVEN_CENTRAL_PASSWORD }}
run: |
VERSION=$(grep -m1 '<version>' pom.xml | sed 's/.*<version>\(.*\)<\/version>.*/\1/')
echo "Searching for open repo..."
# Poll up to ~60s for the specific repo that contains our thin component to avoid publishing the wrong repo
KEY=""
for i in $(seq 1 12); do
COMP=$(curl -s -u "$MAVEN_CENTRAL_USERNAME:$MAVEN_CENTRAL_PASSWORD" \
"https://ossrh-staging-api.central.sonatype.com/manual/search/components?namespace=com.databricks&name=databricks-jdbc-thin&version=${VERSION}")
KEY=$(echo "$COMP" | grep -o '"repository"\s*:\s*"[^"]*"' | head -1 | cut -d':' -f2 | tr -d '" ')
if [ -n "$KEY" ]; then break; fi
echo "Waiting for component to be indexed... ($i/12)"; sleep 5;
done
if [ -z "$KEY" ]; then echo "Could not find repository containing databricks-jdbc-thin:${VERSION}"; echo "$COMP"; exit 1; fi
echo "Publishing repo $KEY..."
curl -s -X POST -u "$MAVEN_CENTRAL_USERNAME:$MAVEN_CENTRAL_PASSWORD" \
"https://ossrh-staging-api.central.sonatype.com/manual/upload/repository/${KEY}?publishing_type=user_managed" | cat