diff --git a/.github/workflows/flutter-build.yml b/.github/workflows/flutter-build.yml index c7791f66a..f73ee7c77 100644 --- a/.github/workflows/flutter-build.yml +++ b/.github/workflows/flutter-build.yml @@ -1214,6 +1214,32 @@ jobs: # Required to inspect and publish signed release assets for the target tag. contents: write steps: + - name: Refuse to replace published update metadata + shell: bash + env: + GH_TOKEN: ${{ github.token }} + TAG_NAME: ${{ env.TAG_NAME }} + run: | + set -euo pipefail + releases="$(gh api --paginate --slurp "repos/${GITHUB_REPOSITORY}/releases?per_page=100")" + release_id="$( + jq -r --arg tag "$TAG_NAME" ' + [.[][] | select(.tag_name == $tag)] | + if length == 0 then "" + elif length == 1 then .[0].id + else error("multiple releases found for tag") + end + ' <<<"$releases" + )" + if [ -z "$release_id" ]; then + exit 0 + fi + assets="$(gh api --paginate --slurp "repos/${GITHUB_REPOSITORY}/releases/${release_id}/assets?per_page=100")" + if jq -e 'any(.[][]; .name == "rustdesk-update.json")' <<<"$assets" >/dev/null; then + echo "::error::Signed update metadata is already published for ${TAG_NAME}; use a new release tag for corrected artifacts." + exit 1 + fi + - name: Checkout source code uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 with: diff --git a/.github/workflows/flutter-nightly.yml b/.github/workflows/flutter-nightly.yml index 098a9344d..b16db4c4a 100644 --- a/.github/workflows/flutter-nightly.yml +++ b/.github/workflows/flutter-nightly.yml @@ -13,4 +13,3 @@ jobs: with: upload-artifact: true upload-tag: "nightly" - publish-update-metadata: ${{ github.repository == 'rustdesk/rustdesk' }}