From 06d95d55a95eb2aa5662b2b899d4636a81105684 Mon Sep 17 00:00:00 2001 From: Colin Rymer Date: Fri, 20 Feb 2026 13:32:57 -0500 Subject: [PATCH] ci: use unique env names for preview envs --- .github/workflows/cleanup-preview-env.yaml | 41 ++++++++++++++++++++++ .github/workflows/cloudflare-pages.yaml | 5 +-- 2 files changed, 44 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/cleanup-preview-env.yaml diff --git a/.github/workflows/cleanup-preview-env.yaml b/.github/workflows/cleanup-preview-env.yaml new file mode 100644 index 00000000..bc513202 --- /dev/null +++ b/.github/workflows/cleanup-preview-env.yaml @@ -0,0 +1,41 @@ +name: Cleanup preview environment + +on: + pull_request: + types: [closed] + +permissions: + deployments: write + +jobs: + cleanup: + runs-on: ubuntu-latest + steps: + - name: Delete preview environment + uses: actions/github-script@v8 + with: + script: | + const environment = `preview-pr-${context.payload.pull_request.number}`; + + // Deactivate all deployments for this environment first + const deployments = await github.rest.repos.listDeployments({ + owner: context.repo.owner, + repo: context.repo.repo, + environment + }); + + for (const deployment of deployments.data) { + await github.rest.repos.createDeploymentStatus({ + owner: context.repo.owner, + repo: context.repo.repo, + deployment_id: deployment.id, + state: 'inactive' + }); + } + + // Delete the environment + await github.rest.repos.deleteAnEnvironment({ + owner: context.repo.owner, + repo: context.repo.repo, + environment_name: environment + }); diff --git a/.github/workflows/cloudflare-pages.yaml b/.github/workflows/cloudflare-pages.yaml index 93872b98..2bee63fa 100644 --- a/.github/workflows/cloudflare-pages.yaml +++ b/.github/workflows/cloudflare-pages.yaml @@ -48,7 +48,7 @@ jobs: script: | const isPR = context.eventName === 'pull_request'; const sha = isPR ? context.payload.pull_request.head.sha : context.sha; - const environment = isPR ? 'preview' : 'production'; + const environment = isPR ? `preview-pr-${context.payload.pull_request.number}` : 'production'; const deploymentUrl = '${{ steps.deploy.outputs.deployment-url }}'; // GitHub deployment (shows in PR UI) @@ -58,7 +58,8 @@ jobs: ref: sha, environment, auto_merge: false, - required_contexts: [] + required_contexts: [], + transient_environment: isPR }); await github.rest.repos.createDeploymentStatus({ owner: context.repo.owner,