Skip to content

Automated Release

Automated Release #145

Workflow file for this run

name: Automated Release
on:
schedule:
- cron: 25 3 * * WED
workflow_dispatch:
env:
JAVA_VERSION: 17
JAVA_PACKAGE: jdk
JAVA_ARCH: x64
JAVA_DISTRO: temurin
GRAAL_VERSION: latest
jobs:
prepare:
name: Prepare Release
runs-on: ubuntu-latest
outputs:
commit_count: ${{ steps.commits.outputs.count }}
release_version: ${{ steps.release.outputs.version }}
previous_version: ${{ steps.previous.outputs.version }}
steps:
- id: checkout
name: Clone Git Repository
uses: actions/checkout@v3
with:
fetch-depth: 0
- id: commits
name: Count Commits
run: echo "count=$(git rev-list --count HEAD --since='last week')" >> $GITHUB_OUTPUT
- id: release
name: Create Release Version
if: steps.commits.outputs.count > 0
run: echo "version=$(date +'%Y.%-m.%-d')" >> $GITHUB_OUTPUT
- id: previous
name: Get Last Release
if: steps.commits.outputs.count > 0
run: echo "version=$(git describe --abbrev=0 --tags)" >> $GITHUB_OUTPUT
- id: timestamp
name: Build Timestamp
if: steps.commits.outputs.count > 0
run: echo "iso8601=$(date --utc --iso-8601=seconds)" >> $GITHUB_OUTPUT
maven:
name: Build Maven Tooling
needs: prepare
runs-on: ubuntu-latest
steps:
- id: checkout
name: Clone Git Repository
if: needs.prepare.outputs.commit_count > 0
uses: actions/checkout@v3
- id: java
name: Setup Java
if: needs.prepare.outputs.commit_count > 0
uses: actions/setup-java@v3
with:
java-version: ${{ env.JAVA_VERSION }}
java-package: ${{ env.JAVA_PACKAGE }}
architecture: ${{ env.JAVA_ARCH }}
distribution: ${{ env.JAVA_DISTRO }}
server-id: ossrh
server-username: MAVEN_CENTRAL_USERNAME
server-password: MAVEN_CENTRAL_TOKEN
- id: cache
name: Cache Maven Repository
if: needs.prepare.outputs.commit_count > 0
uses: actions/cache@v3
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}-maven-
- id: gpg
name: GPG Key
if: needs.prepare.outputs.commit_count > 0
uses: timheuer/base64-to-file@v1.2
with:
fileName: signing.key.asc
fileDir: ${{ github.workspace}}
encodedString: ${{ secrets.GPG_SECRET_KEY_BASE64 }}
- name: Set release version
if: needs.prepare.outputs.commit_count > 0
run: mvn --batch-mode versions:set --define newVersion=${{ needs.prepare.outputs.release_version }} --define generateBackupPoms=false
- id: deploy-maven-tooling
name: Deploy Maven Tooling
if: needs.prepare.outputs.commit_count > 0
run: MAVEN_OPTS="--add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.text=ALL-UNNAMED --add-opens=java.desktop/java.awt.font=ALL-UNNAMED" mvn --batch-mode --activate-profiles release --projects yosql-tooling/yosql-tooling-maven --also-make install deploy --define pgp.secretkey=keyfile:signing.key.asc --define pgp.passphrase=literal:${{ secrets.GPG_SECRET_KEY_PASSWORD }}
env:
MAVEN_CENTRAL_USERNAME: ${{ secrets.MAVEN_CENTRAL_USERNAME }}
MAVEN_CENTRAL_TOKEN: ${{ secrets.MAVEN_CENTRAL_TOKEN }}
gradle:
name: Build Gradle Tooling
needs: prepare
runs-on: ubuntu-latest
steps:
- id: checkout
name: Clone Git Repository
if: needs.prepare.outputs.commit_count > 0
uses: actions/checkout@v3
- id: java
name: Setup Java
if: needs.prepare.outputs.commit_count > 0
uses: actions/setup-java@v3
with:
java-version: ${{ env.JAVA_VERSION }}
java-package: ${{ env.JAVA_PACKAGE }}
architecture: ${{ env.JAVA_ARCH }}
distribution: ${{ env.JAVA_DISTRO }}
- id: cache
name: Cache Maven Repository
if: needs.prepare.outputs.commit_count > 0
uses: actions/cache@v3
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}-maven-
- name: Set release version
if: needs.prepare.outputs.commit_count > 0
run: mvn --batch-mode versions:set --define newVersion=${{ needs.prepare.outputs.release_version }} --define generateBackupPoms=false
- id: install-maven-tooling
name: Install Maven Tooling
if: needs.prepare.outputs.commit_count > 0
run: mvn --batch-mode install
- id: build-gradle
name: Build Gradle Tooling
if: needs.prepare.outputs.commit_count > 0
run: cd ./yosql-examples/yosql-examples-gradle/ && ./gradlew build -Pversion=${{ needs.prepare.outputs.release_version }}
- id: deploy-gradle
name: Deploy Gradle Tooling
if: needs.prepare.outputs.commit_count > 0
run: cd ./yosql-tooling/yosql-tooling-gradle/ && ./gradlew publishPlugins -Pversion=${{ needs.prepare.outputs.release_version }} -Pgradle.publish.key=${{ secrets.GRADLE_PUBLISH_KEY }} -Pgradle.publish.secret=${{ secrets.GRADLE_PUBLISH_SECRET }}
ant:
name: Build Ant Tooling
needs: prepare
runs-on: ubuntu-latest
steps:
- id: checkout
name: Clone Git Repository
if: needs.prepare.outputs.commit_count > 0
uses: actions/checkout@v3
- id: java
name: Setup Java
if: needs.prepare.outputs.commit_count > 0
uses: actions/setup-java@v3
with:
java-version: ${{ env.JAVA_VERSION }}
java-package: ${{ env.JAVA_PACKAGE }}
architecture: ${{ env.JAVA_ARCH }}
distribution: ${{ env.JAVA_DISTRO }}
- id: cache
name: Cache Maven Repository
if: needs.prepare.outputs.commit_count > 0
uses: actions/cache@v3
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}-maven-
- id: gpg
name: GPG Key
if: needs.prepare.outputs.commit_count > 0
uses: timheuer/base64-to-file@v1.2
with:
fileName: signing.key.asc
fileDir: ${{ github.workspace}}
encodedString: ${{ secrets.GPG_SECRET_KEY_BASE64 }}
- name: Set release version
if: needs.prepare.outputs.commit_count > 0
run: mvn --batch-mode versions:set --define newVersion=${{ needs.prepare.outputs.release_version }} --define generateBackupPoms=false
- id: build-ant-tooling
name: Build Ant Tooling
if: needs.prepare.outputs.commit_count > 0
run: mvn --batch-mode --activate-profiles release --projects yosql-tooling/yosql-tooling-ant --also-make install --define pgp.secretkey=keyfile:signing.key.asc --define pgp.passphrase=literal:${{ secrets.GPG_SECRET_KEY_PASSWORD }}
- id: upload-ant-tooling
name: Upload Ant Tooling Artifact
if: needs.prepare.outputs.commit_count > 0
uses: actions/upload-artifact@v3
with:
name: yosql-tooling-ant
path: ./yosql-tooling/yosql-tooling-ant/target/yosql-tooling-ant-*-dist*
cli:
name: Build CLI Tooling on ${{ matrix.os }}
needs: prepare
runs-on: ${{ matrix.os }}
strategy:
matrix:
os:
- ubuntu-latest
- macos-latest
- windows-latest
steps:
- id: checkout
name: Clone Git Repository
if: needs.prepare.outputs.commit_count > 0
uses: actions/checkout@v3
- id: graal
name: Setup GraalVM
if: needs.prepare.outputs.commit_count > 0
uses: graalvm/setup-graalvm@v1
with:
version: ${{ env.GRAAL_VERSION }}
java-version: ${{ env.JAVA_VERSION }}
components: native-image
github-token: ${{ secrets.GITHUB_TOKEN }}
- id: cache
name: Cache Maven Repository
if: needs.prepare.outputs.commit_count > 0
uses: actions/cache@v3
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}-maven-
- id: gpg
name: GPG Key
if: needs.prepare.outputs.commit_count > 0
uses: timheuer/base64-to-file@v1.2
with:
fileName: signing.key.asc
fileDir: ${{ github.workspace}}
encodedString: ${{ secrets.GPG_SECRET_KEY_BASE64 }}
- name: Set release version
if: needs.prepare.outputs.commit_count > 0
run: mvn --batch-mode --define newVersion=${{ needs.prepare.outputs.release_version }} --define generateBackupPoms=false versions:set
- id: build-cli-tooling
name: Build CLI Tooling
if: needs.prepare.outputs.commit_count > 0
run: mvn --batch-mode --activate-profiles release --projects yosql-tooling/yosql-tooling-cli --also-make install --define skipNativeBuild=false --define pgp.secretkey=keyfile:signing.key.asc --define pgp.passphrase=literal:${{ secrets.GPG_SECRET_KEY_PASSWORD }}
- id: upload-jvm-cli-tooling
name: Upload JVM CLI Tooling
if: needs.prepare.outputs.commit_count > 0 && runner.os == 'Linux'
uses: actions/upload-artifact@v3
with:
name: yosql-tooling-cli-jvm
path: ./yosql-tooling/yosql-tooling-cli/target/yosql-tooling-cli-*-jvm*
- id: upload-linux-cli-tooling
name: Upload Linux CLI Tooling
if: needs.prepare.outputs.commit_count > 0 && runner.os == 'Linux'
uses: actions/upload-artifact@v3
with:
name: yosql-tooling-cli-linux
path: ./yosql-tooling/yosql-tooling-cli/target/yosql-tooling-cli-*-linux*
- id: upload-mac-cli-tooling
name: Upload Mac OSX CLI Tooling
if: needs.prepare.outputs.commit_count > 0 && runner.os == 'macOS'
uses: actions/upload-artifact@v3
with:
name: yosql-tooling-cli-mac
path: ./yosql-tooling/yosql-tooling-cli/target/yosql-tooling-cli-*-mac*
- id: upload-windows-cli-tooling
name: Upload Windows CLI Tooling
if: needs.prepare.outputs.commit_count > 0 && runner.os == 'Windows'
uses: actions/upload-artifact@v3
with:
name: yosql-tooling-cli-windows
path: ./yosql-tooling/yosql-tooling-cli/target/yosql-tooling-cli-*-windows*
release:
name: GitHub Release
needs: [prepare, maven, gradle, ant, cli]
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- id: checkout
name: Clone Git Repository
if: needs.prepare.outputs.commit_count > 0
uses: actions/checkout@v3
with:
fetch-depth: 0
- id: download
name: Download Artifacts
if: needs.prepare.outputs.commit_count > 0
uses: actions/download-artifact@v3
with:
path: artifacts
- id: create_release
name: Create Release
if: needs.prepare.outputs.commit_count > 0
uses: softprops/action-gh-release@v1
with:
tag_name: ${{ needs.prepare.outputs.release_version }}
token: ${{ secrets.GITHUB_TOKEN }}
draft: false
prerelease: false
generate_release_notes: true
files: |
artifacts/yosql-tooling-ant/yosql-tooling-ant-${{ needs.prepare.outputs.release_version }}-dist.zip
artifacts/yosql-tooling-ant/yosql-tooling-ant-${{ needs.prepare.outputs.release_version }}-dist.zip.asc
artifacts/yosql-tooling-ant/yosql-tooling-ant-${{ needs.prepare.outputs.release_version }}-dist.zip.sha512
artifacts/yosql-tooling-cli-jvm/yosql-tooling-cli-${{ needs.prepare.outputs.release_version }}-jvm.zip
artifacts/yosql-tooling-cli-jvm/yosql-tooling-cli-${{ needs.prepare.outputs.release_version }}-jvm.zip.asc
artifacts/yosql-tooling-cli-jvm/yosql-tooling-cli-${{ needs.prepare.outputs.release_version }}-jvm.zip.sha512
artifacts/yosql-tooling-cli-linux/yosql-tooling-cli-${{ needs.prepare.outputs.release_version }}-linux.zip
artifacts/yosql-tooling-cli-linux/yosql-tooling-cli-${{ needs.prepare.outputs.release_version }}-linux.zip.asc
artifacts/yosql-tooling-cli-linux/yosql-tooling-cli-${{ needs.prepare.outputs.release_version }}-linux.zip.sha512
artifacts/yosql-tooling-cli-mac/yosql-tooling-cli-${{ needs.prepare.outputs.release_version }}-mac.zip
artifacts/yosql-tooling-cli-mac/yosql-tooling-cli-${{ needs.prepare.outputs.release_version }}-mac.zip.asc
artifacts/yosql-tooling-cli-mac/yosql-tooling-cli-${{ needs.prepare.outputs.release_version }}-mac.zip.sha512
artifacts/yosql-tooling-cli-linux/yosql-tooling-cli-${{ needs.prepare.outputs.release_version }}-windows.zip
artifacts/yosql-tooling-cli-linux/yosql-tooling-cli-${{ needs.prepare.outputs.release_version }}-windows.zip.asc
artifacts/yosql-tooling-cli-linux/yosql-tooling-cli-${{ needs.prepare.outputs.release_version }}-windows.zip.sha512