Skip to content

Build, Publish, and Release #9

Build, Publish, and Release

Build, Publish, and Release #9

name: Build, Publish, and Release
on:
workflow_dispatch:
inputs:
version-modifier:
description: "Version Modifier"
default: "minor"
type: choice
required: true
options:
- "patch"
- "minor"
- "major"
env:
GITHUB_TOKEN: ${{ secrets.PAT }}
jobs:
build-and-publish:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'zulu'
- name: Install gpg secret key
run: |
export GPG_TTY=$(tty)
echo -n "${{ secrets.OSSRH_GPG_SECRET_KEY }}" | base64 --decode | gpg --batch --import
gpg --list-secret-keys --keyid-format LONG
echo -n "${{ secrets.OSSRH_GPG_SECRET_KEY }}" | base64 --decode > release.gpg
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
with:
cache-read-only: ${{ github.ref != 'refs/heads/main' }}
cache-cleanup: on-success
gradle-home-cache-includes: |
caches
notifications
jdks
wrapper
- name: Gradle Build
run: >-
./gradlew build
-Psemver.modifier=${{ github.event.inputs.version-modifier }}
--stacktrace
--parallel
--build-cache
- name: Set Version Outputs
id: version-outputs
run: |
sem_version=$(grep '^version=' build/semver/semver.properties | cut -d'=' -f2)
sem_version_tag=$(grep '^versionTag=' build/semver/semver.properties | cut -d'=' -f2)
echo "sem-version=$sem_version" >> $GITHUB_OUTPUT
echo "sem-version-tag=$sem_version_tag" >> $GITHUB_OUTPUT
# Publish to gradle plugin portal only if stable version
# Create github release only if stable version
if [[ "$sem_version" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "publishCommand=publishPlugins" >> $GITHUB_OUTPUT
echo "githubReleaseCommand=githubRelease" >> $GITHUB_OUTPUT
else
echo "publishCommand=publishAllPublicationsToFigureNexusRepository" >> $GITHUB_OUTPUT
echo "githubReleaseCommand=" >> $GITHUB_OUTPUT
fi
echo "### Semantic Version" >> $GITHUB_STEP_SUMMARY
echo "| Field | Value |" >> $GITHUB_STEP_SUMMARY
echo "| --- | --- |" >> $GITHUB_STEP_SUMMARY
echo "| version | ${sem_version} |" >> $GITHUB_STEP_SUMMARY
echo "| tag | ${sem_version_tag} |" >> $GITHUB_STEP_SUMMARY
- name: Gradle Publish
run: >-
./gradlew ${{ steps.version-outputs.outputs.publishCommand }}
-Psemver.overrideVersion=${{ steps.version-outputs.outputs.sem-version }}
-Psigning.keyId=${{ secrets.OSSRH_GPG_SECRET_KEY_ID }}
-Psigning.password=${{ secrets.OSSRH_GPG_SECRET_KEY_PASSWORD }}
-Psigning.secretKeyRingFile=release.gpg
-Pgradle.publish.key=${{ secrets.OSS_GRADLE_PUBLISH_KEY }}
-Pgradle.publish.secret=${{ secrets.OSS_GRADLE_PUBLISH_SECRET }}
--stacktrace
--parallel
--build-cache
- name: Gradle Release
run: >-
./gradlew ${{ steps.version-outputs.outputs.githubReleaseCommand }}
-Psemver.overrideVersion=${{ steps.version-outputs.outputs.sem-verion }}
--stacktrace
--parallel
--build-cache