name: Release per-commit on: workflow_run: workflows: ["Cargo Build, Test, and Linting"] types: - completed env: RUST_BACKTRACE: 1 SHELL: /bin/bash jobs: create-draft-release: if: success() && github.event.workflow_run.event == 'push' && github.event.workflow_run.head_branch == 'master' name: Create Draft GH Release runs-on: ubuntu-latest outputs: release-id: ${{ steps.create-release.outputs.RELEASE_ID }} steps: - id: create-release run: | RELEASE_TAG="per-commit-${{ github.sha }}" RELEASE_TITLE="Build ${{ github.sha }}" RELEASE_URL=$(gh release create "${RELEASE_TAG}" \ --draft \ --title "${RELEASE_TITLE}" \ --notes 'Per-commit build based on Pumpkin-MC/Pumpkin@${{ github.sha }}' \ --repo ${NIGHTLY_REPO}) TEMP_TAG=$(basename "$RELEASE_URL") RELEASE_ID=$( \ gh api -H "Accept: application/vnd.github+json" \ -H "X-GitHub-Api-Version: 2022-11-28" \ "/repos/${NIGHTLY_REPO}/releases/tags/${TEMP_TAG}" \ | jq '.id' \ ) echo "RELEASE_ID=${RELEASE_ID}" >> ${GITHUB_OUTPUT} env: GITHUB_TOKEN: ${{ secrets.COMMIT_REPO_TOKEN }} NIGHTLY_REPO: ${{ github.repository_owner }}/pumpkin-commit-builds upload-artifacts: if: always() && (github.repository == 'Pumpkin-MC/Pumpkin' || github.event_name == 'workflow_dispatch') name: Download & Upload Builds runs-on: ubuntu-latest needs: - create-draft-release steps: - name: Download all build artifacts uses: actions/github-script@v6 with: script: | // This script finds and downloads all artifacts from the triggering workflow run const artifacts = await github.rest.actions.listWorkflowRunArtifacts({ owner: context.repo.owner, repo: context.repo.repo, run_id: ${{ github.event.workflow_run.id }}, }); for (const artifact of artifacts.data.artifacts) { const download = await github.rest.actions.downloadArtifact({ owner: context.repo.owner, repo: context.repo.repo, artifact_id: artifact.id, archive_format: 'zip', }); fs.writeFileSync(`${artifact.name}.zip`, Buffer.from(download.data)); // Unzip the downloaded file // This is a simple example, you'd need to add more robust unzipping logic. } - name: Upload Linux executable to release run: | gh release upload ${{ needs.create-draft-release.outputs.release-id }} ./pumpkin-ubuntu-latest/pumpkin --repo ${NIGHTLY_REPO} env: GITHUB_TOKEN: ${{ secrets.COMMIT_REPO_TOKEN }} NIGHTLY_REPO: ${{ github.repository_owner }}/pumpkin-commit-builds - name: Upload Windows executable to release run: | gh release upload ${{ needs.create-draft-release.outputs.release-id }} ./pumpkin-windows-latest/pumpkin.exe --repo ${NIGHTLY_REPO} env: GITHUB_TOKEN: ${{ secrets.COMMIT_REPO_TOKEN }} NIGHTLY_REPO: ${{ github.repository_owner }}/pumpkin-commit-builds - name: Upload macOS executable to release run: | gh release upload ${{ needs.create-draft-release.outputs.release-id }} ./pumpkin-macos-latest/pumpkin --repo ${NIGHTLY_REPO} env: GITHUB_TOKEN: ${{ secrets.COMMIT_REPO_TOKEN }} NIGHTLY_REPO: ${{ github.repository_owner }}/pumpkin-commit-builds publish-per-commit-release: if: always() && (github.repository == 'Pumpkin-MC/Pumpkin' || github.event_name == 'workflow_dispatch') name: Publish GH Release runs-on: ubuntu-latest needs: - create-draft-release - upload-artifacts steps: - name: Publish as latest run: | gh api \ --method PATCH \ -H "Accept: application/vnd.github+json" \ -H "X-GitHub-Api-Version: 2022-11-28" \ /repos/${NIGHTLY_REPO}/releases/${RELEASE_ID} \ -F draft=false -F prerelease=true env: GITHUB_TOKEN: ${{ secrets.COMMIT_REPO_TOKEN }} NIGHTLY_REPO: ${{ github.repository_owner }}/pumpkin-commit-builds RELEASE_ID: ${{ needs.create-draft-release.outputs.release-id }}