diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml index 35d5e95dee..a34dee5f85 100644 --- a/.github/workflows/prepare-release.yml +++ b/.github/workflows/prepare-release.yml @@ -25,6 +25,7 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 30 permissions: + actions: write contents: write pull-requests: write steps: @@ -33,6 +34,12 @@ jobs: with: egress-policy: audit + - name: Enable release freeze + env: + GH_TOKEN: ${{ github.token }} + run: | + gh variable set RELEASE_FREEZE --body true --repo "${GITHUB_REPOSITORY}" + - name: Checkout repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: diff --git a/.github/workflows/release-freeze-gate.yml b/.github/workflows/release-freeze-gate.yml new file mode 100644 index 0000000000..dd060f0f9c --- /dev/null +++ b/.github/workflows/release-freeze-gate.yml @@ -0,0 +1,40 @@ +name: 'Tools: Release Freeze Gate' + +on: + pull_request: + branches: + - 'master' + types: + - opened + - synchronize + - reopened + - ready_for_review + merge_group: + branches: + - 'master' + types: + - checks_requested + workflow_dispatch: + +permissions: {} + +jobs: + release-freeze-gate: + name: release-freeze-gate + runs-on: ubuntu-latest + timeout-minutes: 5 + steps: + - name: Check release freeze status + env: + RELEASE_FREEZE: ${{ vars.RELEASE_FREEZE }} + run: | + case "${RELEASE_FREEZE}" in + true|TRUE|True) + echo "::error::Release freeze is active. Merges to master are temporarily blocked." + echo "Set the RELEASE_FREEZE repository variable to false when the release is complete." + exit 1 + ;; + *) + echo "Release freeze is not active." + ;; + esac