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,