name: Release on: push: tags: - 'v*' permissions: contents: write actions: read jobs: build: runs-on: ubuntu-latest strategy: matrix: goarch: [amd64, arm64] steps: - name: Checkout code uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 with: submodules: true - name: Setup Go uses: actions/setup-go@40f1582b2485089dde7abd97c1529aa768e1baff with: go-version: '1.22' - name: Setup Node.js uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 with: node-version: '20' - name: Build Vue frontend run: | cd app/frontend npm install npm run build - name: Build Go binary env: GOOS: linux GOARCH: ${{ matrix.goarch }} run: | cd app go build -o ../wgrplane-linux-${{ matrix.goarch }} . - name: Upload binary artifact uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 with: name: wgrplane-linux-${{ matrix.goarch }} path: wgrplane-linux-${{ matrix.goarch }} generate-latest-json: needs: build runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 with: submodules: true - name: Download all artifacts uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 with: path: artifacts - name: Generate latest.json run: | VERSION="${{ gitea.ref_name }}" if [ -z "$VERSION" ]; then VERSION="$(git rev-parse --short HEAD)" fi RELEASE_DATE="$(date -u +'%Y-%m-%dT%H:%M:%SZ')" # Get changelog: commits since last tag, or last 10 commits CHANGELOG="$(git log --oneline --no-merges $(git describe --tags --abbrev=0 2>/dev/null || echo 'HEAD~10')..HEAD 2>/dev/null || git log --oneline --no-merges -10)" # Generate latest.json cat > latest.json << EOF { "version": "$VERSION", "release_date": "$RELEASE_DATE", "changelog": $(echo "$CHANGELOG" | jq -R -s '.'), "download_urls": { "amd64": "${{ gitea.server_url }}/${{ gitea.repository }}/actions/runs/${{ gitea.run_id }}/artifacts/$(curl -s -H 'Authorization: Bearer ${{ secrets.TOKEN }}' '${{ gitea.server_url }}/api/v1/repos/${{ gitea.repository }}/actions/runs/${{ gitea.run_id }}/artifacts' | jq -r '.data[] | select(.name == \"wgrplane-linux-amd64\") | .id')", "arm64": "${{ gitea.server_url }}/${{ gitea.repository }}/actions/runs/${{ gitea.run_id }}/artifacts/$(curl -s -H 'Authorization: Bearer ${{ secrets.TOKEN }}' '${{ gitea.server_url }}/api/v1/repos/${{ gitea.repository }}/actions/runs/${{ gitea.run_id }}/artifacts' | jq -r '.data[] | select(.name == \"wgrplane-linux-arm64\") | .id')" } } EOF - name: Checkout main branch run: | git fetch origin main git checkout main - name: Commit and push latest.json run: | git config user.name "Gitea Actions" git config user.email "actions@gitea.com" # Removed credentials-in-URL to comply with security guidelines git add latest.json git commit -m "Update latest.json for release ${{ gitea.ref_name }} [skip ci]" || echo "No changes to commit" git push origin main - name: Upload latest.json artifact uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 with: name: latest.json path: latest.json