Please #13
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: Build & Release | |
| on: | |
| push: | |
| branches: [ main ] | |
| tags: | |
| - 'v*' | |
| workflow_dispatch: | |
| permissions: | |
| contents: write | |
| jobs: | |
| build: | |
| runs-on: ubuntu-latest | |
| name: Mod Building | |
| outputs: | |
| version: ${{ steps.version.outputs.version }} | |
| filename: ${{ steps.build.outputs.filename }} | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Setup Java | |
| uses: actions/setup-java@v4 | |
| with: | |
| distribution: 'temurin' | |
| java-version: '17' | |
| cache: gradle | |
| - name: Grant execute permission for gradlew | |
| run: chmod +x gradlew | |
| - name: Build project | |
| id: build | |
| run: | | |
| ./gradlew build | |
| JAR_FILE=$(ls build/libs/*.jar | grep -v sources | head -1) | |
| echo "filename=$(basename $JAR_FILE)" >> $GITHUB_OUTPUT | |
| - name: Get version from gradle.properties | |
| id: version | |
| run: | | |
| VERSION=$(grep "^mod_version=" gradle.properties | cut -d'=' -f2) | |
| echo "version=$VERSION" >> $GITHUB_OUTPUT | |
| - name: Upload build artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: mod-build | |
| path: build/libs/ | |
| release: | |
| needs: build | |
| runs-on: ubuntu-latest | |
| name: Create Release | |
| if: startsWith(github.ref, 'refs/tags/v') | |
| steps: | |
| - name: Checkout (fetch tags) | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Determine tag and annotated message | |
| id: taginfo | |
| run: | | |
| TAG=${GITHUB_REF##*/} | |
| echo "tag=$TAG" >> $GITHUB_OUTPUT | |
| # Extract the annotated tag message using git show | |
| BODY=$(git show -s --format=%b refs/tags/$TAG 2>/dev/null || echo "") | |
| # If empty, try the subject line | |
| if [ -z "$BODY" ]; then | |
| BODY=$(git show -s --format=%s refs/tags/$TAG 2>/dev/null || echo "") | |
| fi | |
| # Fallback: get full message (subject + body) | |
| if [ -z "$BODY" ]; then | |
| BODY=$(git show -s --format=%B refs/tags/$TAG 2>/dev/null || echo "") | |
| fi | |
| echo "body<<EOF" >> $GITHUB_OUTPUT | |
| echo "$BODY" >> $GITHUB_OUTPUT | |
| echo "EOF" >> $GITHUB_OUTPUT | |
| - name: Download artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: mod-build | |
| path: ./artifacts | |
| - name: Create GitHub Release | |
| id: create_release | |
| run: | | |
| RESPONSE=$(curl -X POST \ | |
| -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ | |
| -H "Accept: application/vnd.github.v3+json" \ | |
| https://api.github.com/repos/${{ github.repository }}/releases \ | |
| -d "{\"tag_name\":\"${{ steps.taginfo.outputs.tag }}\",\"name\":\"${{ steps.taginfo.outputs.tag }}\",\"body\":$(echo '${{ steps.taginfo.outputs.body }}' | jq -Rs .),\"draft\":false,\"prerelease\":false}") | |
| UPLOAD_URL=$(echo $RESPONSE | jq -r '.upload_url' | sed 's/{?name,label}//') | |
| echo "upload_url=$UPLOAD_URL" >> $GITHUB_OUTPUT | |
| - name: Upload release asset | |
| run: | | |
| JAR_FILE=$(ls artifacts/*.jar | grep -v sources | head -1) | |
| curl -X POST \ | |
| -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ | |
| -H "Content-Type: application/octet-stream" \ | |
| --data-binary @"$JAR_FILE" \ | |
| "${{ steps.create_release.outputs.upload_url }}?name=$(basename $JAR_FILE)" |