Skip to content

Maven Release

Maven Release #105

Workflow file for this run

name: Maven Release
on:
workflow_dispatch:
inputs:
releaseVersion:
type: string
required: true
description: The POM release version of this release. Must be a semantic version of the form X.Y.Z. (For cutting legacy release, use format X.Y.Z-legacy)
nextDevelopmentVersion:
type: string
required: true
description: The next POM development version after the release is done. Must be of the form X.Y.${Z+1}-SNAPSHOT. (For cutting legacy release, use format X.Y.${Z+1}-legacy-SNAPSHOT)
dry-run:
type: boolean
required: true
description: Dry run, will not push branches or upload the artifacts.
jobs:
release:
runs-on: ubuntu-latest
env:
BAZELISK_SKIP_VERSION_CHECK: "1"
steps:
- name: Validate Input
run: |
echo "${{ github.ref_type }}" | perl -ne 'die unless m/^branch$/'
echo "${{ github.ref_name }}" | perl -ne 'die unless m/^release-\d+$/'
echo "${{ github.event.inputs.releaseVersion }}" | perl -ne 'die unless m/^\d+\.\d+\.\d+$/'
echo "${{ github.event.inputs.nextDevelopmentVersion }}" | perl -ne 'die unless m/^\d+\.\d+\.\d+-SNAPSHOT$/'
- name: Checkout
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
with:
token: ${{ secrets.PAT_TOKEN }}
- name: Check Actor
run: |
# Release actor should be in the OWNER list
cat OWNERS | grep ${{ github.actor }}
- name: Setup Java
uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with:
distribution: 'temurin'
java-version: 17.0.x
cache: maven
server-id: ossrh
server-username: OSSRH_USERNAME
server-password: OSSRH_TOKEN
gpg-private-key: ${{ secrets.GPG_PRIVATE_KEY }}
gpg-passphrase: GPG_PASSPHRASE
- name: Install Bazelisk
run: |
mkdir -p "$HOME/.local/bin"
curl -fsSL \
https://github.com/bazelbuild/bazelisk/releases/download/v1.24.1/bazelisk-linux-amd64 \
-o "$HOME/.local/bin/bazel"
chmod +x "$HOME/.local/bin/bazel"
echo "$HOME/.local/bin" >> "$GITHUB_PATH"
- name: Restore Bazel caches
uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5
with:
path: |
~/.cache/bazel-disk-cache
~/.cache/bazel/cache/repos/v1
key: bazel-${{ runner.os }}-release-${{ hashFiles('MODULE.bazel', '.bazelversion', 'maven_install.json') }}
restore-keys: |
bazel-${{ runner.os }}-release-
bazel-${{ runner.os }}-
- name: Bazel Build
run: bazel build --config=ci //...
- name: Bazel Test
run: bazel test --config=ci //...
- name: Prepare
run: |
export GPG_TTY=$(tty)
(echo 5; echo y; echo save) | gpg --command-fd 0 --no-tty --pinentry-mode loopback --passphrase ${{ secrets.GPG_PASSWORD }} --no-greeting --edit-key 'Kubernetes Client Publishers' trust
(echo 0; echo y; echo save) | gpg --command-fd 0 --no-tty --pinentry-mode loopback --passphrase ${{ secrets.GPG_PASSWORD }} --no-greeting --edit-key 'Kubernetes Client Publishers' expire
git config user.email "k8s-publishing-bot@users.noreply.github.com"
git config user.name "Kubernetes Publisher"
- name: Check Current Version
run: |
./mvnw -q \
-Dexec.executable=echo \
-Dexec.args='${project.version}' \
-Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn \
--non-recursive \
exec:exec | perl -ne 'die unless m/${{ github.event.inputs.releaseVersion }}-SNAPSHOT/'
- name: Release Prepare
run: |
git checkout -b 'automated-release-${{ github.event.inputs.releaseVersion }}'
./mvnw --batch-mode \
org.apache.maven.plugins:maven-release-plugin:prepare \
-Dtag=v${{ github.event.inputs.releaseVersion }} \
-DconnectionUrl=https://${{ github.token }}@github.com/${{ github.repository }}.git \
-DreleaseVersion=${{ github.event.inputs.releaseVersion }} \
-DdevelopmentVersion=${{ github.event.inputs.nextDevelopmentVersion }} \
-DpushChanges=false \
-Darguments=-DskipTests \
-Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn
- name: Release Perform
if: ${{ github.event.inputs.dry-run != 'true' }}
env:
OSSRH_USERNAME: ${{ secrets.SNAPSHOT_UPLOAD_USER }}
OSSRH_TOKEN: ${{ secrets.SNAPSHOT_UPLOAD_PASSWORD }}
GPG_PASSPHRASE: ${{ secrets.GPG_PASSWORD }}
run: |
# The tests are already executed in the prepare, skipping
./mvnw -s /home/runner/.m2/settings.xml -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn -DlocalCheckout=true -Darguments=-DskipTests org.apache.maven.plugins:maven-release-plugin:perform
curl -X POST \
-H "Authorization: Bearer $(echo ${{ secrets.SNAPSHOT_UPLOAD_USER }}:${{ secrets.SNAPSHOT_UPLOAD_PASSWORD }} | base64 -w0)" \
https://ossrh-staging-api.central.sonatype.com/manual/upload/defaultRepository/io.kubernetes -v
git push https://${{ github.token }}@github.com/${{ github.repository }}.git \
automated-release-${{ github.event.inputs.releaseVersion }}:automated-release-${{ github.event.inputs.releaseVersion }}
git push https://${{ github.token }}@github.com/${{ github.repository }}.git v${{ github.event.inputs.releaseVersion }}
- name: Pull Request
if: ${{ github.event.inputs.dry-run != 'true' }}
env:
GH_TOKEN: ${{ secrets.PAT_TOKEN }}
run: |
gh pr create \
--base ${{ github.ref_name }} \
--head automated-release-${{ github.event.inputs.releaseVersion }} \
--title "Automated Release: ${{ github.event.inputs.releaseVersion }}" \
--body ""
- name: Publish Release
if: ${{ github.event.inputs.dry-run != 'true' }}
env:
GH_TOKEN: ${{ secrets.PAT_TOKEN }}
run: |
gh release create v${{ github.event.inputs.releaseVersion }} \
--title "v${{ github.event.inputs.releaseVersion }}" \
--generate-notes