name: create_release on: repository_dispatch: types: [release_proposal_submit] jobs: create_release: runs-on: ubuntu-latest steps: - id: parse_pr name: Parse pull request shell: bash run: | pr=$(curl -Ss "${{ github.event.client_payload.pull }}") pr_body=$(jq --raw-output '.body' <<< $pr) if [ "$pr_body" == "" ]; then echo "::error ::pull request body is empty." exit 1 fi prev_build_number=$(curl -Ss 'https://raw.githubusercontent.com/yushijinhun/authlib-injector.yushi.moe/master/artifacts.json' | jq -r '.artifacts|max_by(.build_number).build_number') echo "prev_build_number=$prev_build_number" build_number=$(grep -Pom1 '@@release_proposal\.build_number=\K.*(?=@@)' <<< $pr_body) || { echo "no build number specified, using auto-increment build number." build_number=$(( $prev_build_number + 1 )) } if (( $build_number <= $prev_build_number )); then echo "::error ::specified build number is too small ($build_number)." exit 1 fi echo "::set-output name=build_number::$build_number" version_number=$(grep -Pom1 '@@release_proposal\.version_number=\K.*(?=@@)' <<< $pr_body) || { echo "::error ::release_proposal.version_number is not set." exit 1 } echo "::set-output name=version_number::$version_number" release_notes=$(grep -oz '.*' <<< $pr_body) || { release_notes=$pr_body } echo "::set-output name=release_notes::$(jq --null-input -c '.text=$text' --arg text "$release_notes")" echo "::set-output name=commit::$(jq --raw-output '.merge_commit_sha' <<< $pr)" echo "::set-output name=pr::$(jq --raw-output '.number' <<< $pr)" - id: create_release name: Create release uses: fleskesvor/create-release@feature/support-target-commitish env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: tag_name: v${{ steps.parse_pr.outputs.version_number }} commitish: ${{ steps.parse_pr.outputs.commit }} release_name: v${{ steps.parse_pr.outputs.version_number }} draft: true body: | ${{ fromJSON(steps.parse_pr.outputs.release_notes).text }} Linked pull request: [#${{ steps.parse_pr.outputs.pr }}](https://github.com/${{ github.repository }}/pull/${{ steps.parse_pr.outputs.pr }}) Build number: ${{ steps.parse_pr.outputs.build_number }} - name: Checkout uses: actions/checkout@v3 with: ref: ${{ steps.parse_pr.outputs.commit }} - name: Setup JDK uses: actions/setup-java@v3 with: distribution: temurin java-version: 17 cache: gradle - id: build name: Build shell: bash run: | export AI_BUILD_NUMBER=${{ steps.parse_pr.outputs.build_number }} export AI_VERSION_NUMBER=${{ steps.parse_pr.outputs.version_number }} ./gradlew ./gradlew test asset_path=$(echo build/libs/*.jar) echo "Build output is at $asset_path" echo "::set-output name=asset_path::$asset_path" echo "::set-output name=asset_name::$(basename "$asset_path")" - name: Upload assets to GitHub Releases uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} asset_path: ${{ steps.build.outputs.asset_path }} asset_name: ${{ steps.build.outputs.asset_name }} asset_content_type: "application/java-archive"