diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 80674596..973d1cf1 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,23 +1,64 @@ -name: Build and upload release assets +name: Build and publish draft release assets + +run-name: Release ${{ inputs.tag }} • publish=${{ inputs.publish_release }} on: - release: - types: [published] + workflow_dispatch: + inputs: + tag: + description: Existing draft release tag (for example, v0.9.2) + required: true + type: string + publish_release: + description: Publish the draft release after all assets are uploaded + required: true + default: true + type: boolean permissions: contents: write concurrency: - group: release-${{ github.event.release.tag_name }} + group: release-${{ github.event.inputs.tag }} cancel-in-progress: false env: APP_NAME: cs2-simulator - TAG: ${{ github.event.release.tag_name }} + TAG: ${{ github.event.inputs.tag }} jobs: + prepare-release: + runs-on: ubuntu-latest + + outputs: + release_id: ${{ steps.resolve.outputs.release_id }} + + steps: + - name: Resolve draft release + id: resolve + env: + GH_TOKEN: ${{ github.token }} + run: | + release_json="$(gh api "repos/${GITHUB_REPOSITORY}/releases?per_page=100" --jq ".[] | select(.tag_name == \"${TAG}\")")" + release_id="$(echo "$release_json" | jq -r '.id')" + is_draft="$(echo "$release_json" | jq -r '.draft')" + + if [ -z "$release_id" ] || [ "$release_id" = "null" ]; then + echo "Release for tag ${TAG} was not found." + exit 1 + fi + + if [ "$is_draft" != "true" ]; then + echo "Release ${TAG} exists, but it is not a draft." + exit 1 + fi + + echo "release_id=$release_id" >> "$GITHUB_OUTPUT" + echo "Validated draft release ${TAG} (id=${release_id})." + build-android: runs-on: ubuntu-latest + needs: prepare-release steps: - name: Checkout @@ -63,10 +104,13 @@ jobs: - name: Upload Android asset to release uses: softprops/action-gh-release@v2 with: + tag_name: ${{ env.TAG }} + draft: true files: dist/${{ env.APP_NAME }}-${{ env.TAG }}-android.apk build-linux: runs-on: ubuntu-latest + needs: prepare-release steps: - name: Checkout @@ -110,10 +154,13 @@ jobs: - name: Upload Linux asset to release uses: softprops/action-gh-release@v2 with: + tag_name: ${{ env.TAG }} + draft: true files: dist/${{ env.APP_NAME }}-${{ env.TAG }}-linux-x64.zip build-web: runs-on: ubuntu-latest + needs: prepare-release steps: - name: Checkout @@ -145,10 +192,13 @@ jobs: - name: Upload Web asset to release uses: softprops/action-gh-release@v2 with: + tag_name: ${{ env.TAG }} + draft: true files: dist/${{ env.APP_NAME }}-${{ env.TAG }}-web.zip build-windows: runs-on: windows-latest + needs: prepare-release steps: - name: Checkout @@ -197,10 +247,13 @@ jobs: - name: Upload Windows asset to release uses: softprops/action-gh-release@v2 with: + tag_name: ${{ env.TAG }} + draft: true files: dist/${{ env.APP_NAME }}-${{ env.TAG }}-windows-x64.zip build-macos: runs-on: macos-latest + needs: prepare-release steps: - name: Checkout @@ -245,10 +298,13 @@ jobs: - name: Upload macOS asset to release uses: softprops/action-gh-release@v2 with: + tag_name: ${{ env.TAG }} + draft: true files: dist/${{ env.APP_NAME }}-${{ env.TAG }}-macos.zip build-ios-unsigned: runs-on: macos-latest + needs: prepare-release steps: - name: Checkout @@ -285,4 +341,32 @@ jobs: - name: Upload iOS asset to release uses: softprops/action-gh-release@v2 with: + tag_name: ${{ env.TAG }} + draft: true files: dist/${{ env.APP_NAME }}-${{ env.TAG }}-ios-unsigned.ipa + + publish-release: + runs-on: ubuntu-latest + needs: + - prepare-release + - build-android + - build-linux + - build-web + - build-windows + - build-macos + - build-ios-unsigned + if: ${{ inputs.publish_release }} + + steps: + - name: Publish draft release + env: + GH_TOKEN: ${{ github.token }} + RELEASE_ID: ${{ needs.prepare-release.outputs.release_id }} + run: | + gh api \ + --method PATCH \ + -H "Accept: application/vnd.github+json" \ + "repos/${GITHUB_REPOSITORY}/releases/${RELEASE_ID}" \ + -F draft=false + + echo "Published release ${TAG}." diff --git a/pubspec.yaml b/pubspec.yaml index 1d9703a5..7ddd4641 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -2,7 +2,7 @@ name: cs2_simulator description: "Counter-Strike 2 case opening and Trade-Up contract creation simulator written in Flutter + Dart." publish_to: 'none' -version: 0.9.1 +version: 0.9.2 environment: sdk: ^3.11.3