Update CI to 25 #10
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: clockwork-jvm Release | |
| on: | |
| push: | |
| tags: | |
| - 'clockwork-jvm/v*' | |
| defaults: | |
| run: | |
| working-directory: clockwork-jvm | |
| jobs: | |
| release: | |
| name: Release to Maven Central | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Set up GraalVM JDK 25 | |
| uses: graalvm/setup-graalvm@v1 | |
| with: | |
| java-version: '25' | |
| distribution: 'graalvm' | |
| github-token: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Cache Maven local repository | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/.m2/repository | |
| key: ${{ runner.os }}-maven-${{ hashFiles('clockwork-jvm/pom.xml', 'clockwork-jvm/clockwork-jvm-core/pom.xml', 'clockwork-jvm/clockwork-jvm-renderer/pom.xml', 'clockwork-jvm/clockwork-jvm-plugins/pom.xml') }} | |
| restore-keys: ${{ runner.os }}-maven- | |
| - name: Validate release secrets | |
| run: | | |
| required=( | |
| MAVEN_CENTRAL_USERNAME | |
| MAVEN_CENTRAL_PASSWORD | |
| GPG_PRIVATE_KEY | |
| GPG_PASSPHRASE | |
| GPG_KEY_ID | |
| ) | |
| for name in "${required[@]}"; do | |
| if [ -z "${!name}" ]; then | |
| echo "ERROR: Missing required secret: $name" | |
| exit 1 | |
| fi | |
| done | |
| env: | |
| MAVEN_CENTRAL_USERNAME: ${{ secrets.MAVEN_CENTRAL_USERNAME }} | |
| MAVEN_CENTRAL_PASSWORD: ${{ secrets.MAVEN_CENTRAL_PASSWORD }} | |
| GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }} | |
| GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} | |
| GPG_KEY_ID: ${{ secrets.GPG_KEY_ID }} | |
| - name: Configure Maven settings (Central Portal) | |
| uses: s4u/maven-settings-action@v3.0.0 | |
| with: | |
| servers: | | |
| [{ | |
| "id": "central", | |
| "username": "${{ secrets.MAVEN_CENTRAL_USERNAME }}", | |
| "password": "${{ secrets.MAVEN_CENTRAL_PASSWORD }}" | |
| }] | |
| - name: Configure GPG for headless signing | |
| run: | | |
| mkdir -p ~/.gnupg | |
| chmod 700 ~/.gnupg | |
| echo "allow-loopback-pinentry" > ~/.gnupg/gpg-agent.conf | |
| echo "pinentry-mode loopback" > ~/.gnupg/gpg.conf | |
| gpgconf --kill gpg-agent || true | |
| - name: Import GPG signing key | |
| run: echo "${{ secrets.GPG_PRIVATE_KEY }}" | gpg --batch --import | |
| - name: Extract version from tag | |
| id: version | |
| run: | | |
| TAG="${{ github.ref_name }}" | |
| VERSION="${TAG#clockwork-jvm/v}" | |
| echo "version=$VERSION" >> "$GITHUB_OUTPUT" | |
| - name: Verify pom.xml version matches tag | |
| run: | | |
| POM_VERSION=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout | tail -n 1 | tr -d '\r') | |
| TAG_VERSION="${{ steps.version.outputs.version }}" | |
| if [ "$POM_VERSION" != "$TAG_VERSION" ]; then | |
| echo "ERROR: pom.xml version ($POM_VERSION) does not match tag ($TAG_VERSION)" | |
| exit 1 | |
| fi | |
| - name: Build, sign, and publish to Maven Central | |
| run: | | |
| mvn deploy \ | |
| -P release \ | |
| -DskipTests \ | |
| -DskipDependencyCheck \ | |
| -Dgpg.keyname="${{ secrets.GPG_KEY_ID }}" | |
| env: | |
| MAVEN_GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} | |
| - name: Generate changelog | |
| id: changelog | |
| run: | | |
| PREV_TAG=$(git tag --list 'clockwork-jvm/v*' --sort=-version:refname | grep -v "^${{ github.ref_name }}$" | head -1) | |
| if [ -z "$PREV_TAG" ]; then | |
| RANGE="HEAD" | |
| else | |
| RANGE="${PREV_TAG}..HEAD" | |
| fi | |
| NOTES=$(git log "$RANGE" \ | |
| --pretty=format:"- %s (%h)" \ | |
| -- clockwork-jvm/ \ | |
| | head -100) | |
| echo "notes<<CHANGELOG_EOF" >> "$GITHUB_OUTPUT" | |
| echo "$NOTES" >> "$GITHUB_OUTPUT" | |
| echo "CHANGELOG_EOF" >> "$GITHUB_OUTPUT" | |
| - name: Collect jars for release assets | |
| run: | | |
| mkdir -p /tmp/release-assets | |
| find . -path '*/target/clockwork-jvm-*.jar' | xargs -I{} cp {} /tmp/release-assets/ 2>/dev/null || true | |
| - name: Create GitHub Release (draft) | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| tag_name: ${{ github.ref_name }} | |
| name: clockwork-jvm v${{ steps.version.outputs.version }} | |
| draft: true | |
| body: | | |
| ## clockwork-jvm v${{ steps.version.outputs.version }} | |
| ### Maven dependencies | |
| ```xml | |
| <dependency> | |
| <groupId>com.quietterminal</groupId> | |
| <artifactId>clockwork-jvm-core</artifactId> | |
| <version>${{ steps.version.outputs.version }}</version> | |
| </dependency> | |
| <!-- Optional: LWJGL renderer --> | |
| <dependency> | |
| <groupId>com.quietterminal</groupId> | |
| <artifactId>clockwork-jvm-renderer</artifactId> | |
| <version>${{ steps.version.outputs.version }}</version> | |
| </dependency> | |
| <!-- Optional: physics and neon plugin wrappers --> | |
| <dependency> | |
| <groupId>com.quietterminal</groupId> | |
| <artifactId>clockwork-jvm-plugins</artifactId> | |
| <version>${{ steps.version.outputs.version }}</version> | |
| </dependency> | |
| ``` | |
| ### Changes | |
| ${{ steps.changelog.outputs.notes }} | |
| --- | |
| Published to Maven Central: | |
| [clockwork-jvm-core](https://central.sonatype.com/artifact/com.quietterminal/clockwork-jvm-core) | | |
| [clockwork-jvm-renderer](https://central.sonatype.com/artifact/com.quietterminal/clockwork-jvm-renderer) | | |
| [clockwork-jvm-plugins](https://central.sonatype.com/artifact/com.quietterminal/clockwork-jvm-plugins) | |
| files: /tmp/release-assets/* | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |