From 7057f98d23d573f07f458ccf697f6887481660f4 Mon Sep 17 00:00:00 2001 From: Vasco Lavos Date: Tue, 30 Jan 2024 20:46:13 +0000 Subject: [PATCH] Prepare release pipeline --- .github/workflows/gradle.yml | 63 +++++++++++++++++++++ scripts/upload_releases.sh | 106 +++++++++++++++++++++++++++++++++++ 2 files changed, 169 insertions(+) create mode 100644 .github/workflows/gradle.yml create mode 100644 scripts/upload_releases.sh diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml new file mode 100644 index 0000000..f025d2d --- /dev/null +++ b/.github/workflows/gradle.yml @@ -0,0 +1,63 @@ +name: Java CI + +on: [push, pull_request] + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Set up JDK + uses: actions/setup-java@v2 + with: + distribution: 'temurin' + java-version: '17' + - name: Validate gradlew integrity + uses: gradle/wrapper-validation-action@v1 + - name: Cache + uses: actions/cache@v2 + with: + path: | + ~/.gradle/caches + key: ${{ runner.os }}-gradle-${{ hashFiles('**/build.gradle', '**/gradle-wrapper.properties') }} + - name: Build with Gradle + run: ./gradlew pmdMain build + - name: PMD report + uses: jwgmeligmeyling/pmd-github-action@v1 + if: failure() + with: + path: '**/reports/pmd/main.xml' + - name: Stop Gradle + run: | + ./gradlew --stop + - name: Calculate artifact names + id: calculate_artifact_names + run: | + VERSION=$(awk -F '=' '/^version/ { print $2; }' build.properties) + BUILD=$(awk -F '=' '/build_number/ { print $2; }' build.properties) + echo "forge=build/libs/Zeta-${VERSION}-${BUILD}.jar" >> "$GITHUB_OUTPUT" + - name: Sign jars + env: + SIGNING_KEY: ${{ secrets.VIOLET_MOON_SIGNING_KEY }} + if: ${{ env.SIGNING_KEY != '' }} + run: | + echo "${SIGNING_KEY}" | gpg --import - + gpg --local-user "Violet Moon Signing Key" --armor \ + --detach-sign ${{ steps.calculate_artifact_names.outputs.forge }} + - name: Archive Forge Artifacts + uses: actions/upload-artifact@v2 + with: + name: Forge + path: | + ${{ steps.calculate_artifact_names.outputs.forge }} + ${{ steps.calculate_artifact_names.outputs.forge }}.asc + - name: Upload Releases + if: startsWith(github.ref, 'refs/tags/release-') + env: + GH_TOKEN: ${{ github.token }} + GIT_REF: ${{ github.ref }} + FORGE_JAR: ${{ steps.calculate_artifact_names.outputs.forge }} + CURSEFORGE_TOKEN: ${{ secrets.VAZKII_CURSEFORGE_TOKEN }} + MODRINTH_TOKEN: ${{ secrets.VAZKII_MODRINTH_TOKEN }} + run: | + scripts/upload_releases.sh diff --git a/scripts/upload_releases.sh b/scripts/upload_releases.sh new file mode 100644 index 0000000..c3e5b94 --- /dev/null +++ b/scripts/upload_releases.sh @@ -0,0 +1,106 @@ +#!/usr/bin/env bash +set -euo pipefail + +# Remove 'refs/tags/' from front +TAGNAME="${GIT_REF/#refs\/tags\/}" + +# Remove 'release-' from front +VERSION="${TAGNAME/#release-}" +MC_VERSION=$(echo "${VERSION}" | cut -d '-' -f 1) + +function release_github() { + echo >&2 'Creating GitHub Release' + local GH_RELEASE_RESPONSE + GH_RELEASE_RESPONSE="$(gh api \ + --method POST \ + -H "Accept: application/vnd.github+json" \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + /repos/VazkiiMods/Zeta/releases \ + -f tag_name="${TAGNAME}")" + GH_RELEASE_PAGE=$(echo "$GH_RELEASE_RESPONSE" | jq -r .html_url) + + echo >&2 'Uploading Forge Jar and Signature to GitHub' + gh release upload "${TAGNAME}" "${FORGE_JAR}#Forge Jar" + gh release upload "${TAGNAME}" "${FORGE_JAR}.asc#Forge Signature" +} + +function release_modrinth() { + echo >&2 'Uploading Forge Jar to Modrinth' + local MODRINTH_FORGE_SPEC + MODRINTH_FORGE_SPEC=$(cat <&2 'Uploading Forge Jar to CurseForge' + local CURSEFORGE_FORGE_SPEC + CURSEFORGE_FORGE_SPEC=$(cat <