From 4b88a8af2eefdcad105cb8e986e6f8175981ef55 Mon Sep 17 00:00:00 2001 From: Hien To Date: Thu, 18 Jan 2024 00:27:22 +0700 Subject: [PATCH] Add CI clean cloudflare cache --- .../clean-cloudflare-page-preview-url.yml | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 .github/workflows/clean-cloudflare-page-preview-url.yml diff --git a/.github/workflows/clean-cloudflare-page-preview-url.yml b/.github/workflows/clean-cloudflare-page-preview-url.yml new file mode 100644 index 0000000000..0dba2c8455 --- /dev/null +++ b/.github/workflows/clean-cloudflare-page-preview-url.yml @@ -0,0 +1,51 @@ +name: "Clean old cloudflare pages preview urls and nightly build" +on: + schedule: + - cron: "0 0 * * *" # every day at 00:00 + workflow_dispatch: + push: + branches: + - feature/clean-cloudflare-page-and-r2 +jobs: + clean-cloudflare-pages-preview-urls: + strategy: + matrix: + project: ["jan", "nitro"] + runs-on: ubuntu-latest + steps: + - name: Execute JavaScript inline + uses: satackey/action-js-inline@v0.0.2 + with: + script: | + const endpoint = "https://api.cloudflare.com/client/v4/accounts/{account_id}/pages/projects/${{ matrix.project }}/deployments"; + const expirationDays = 15; + + export default { + async scheduled(_, env) { + const init = { + headers: { + "Content-Type": "application/json;charset=UTF-8", + // We recommend you store the API token as a secret using the Workers dashboard or using Wrangler as documented here: https://developers.cloudflare.com/workers/wrangler/commands/#secret + "Authorization": `Bearer ${{ secrets.CLOUDFLARE_API_TOKEN }}`, + }, + }; + + const response = await fetch(endpoint, init); + const deployments = await response.json(); + + for (const deployment of deployments.result) { + // Check if the deployment was created within the last x days (as defined by `expirationDays` above) + if ((Date.now() - new Date(deployment.created_on)) / 86400000 > expirationDays) { + // Delete the deployment + await fetch(`${endpoint}/${deployment.id}`, { + method: "DELETE", + headers: { + "Content-Type": "application/json;charset=UTF-8", + "Authorization": `Bearer ${{ secrets.CLOUDFLARE_API_TOKEN }}`, + }, + }); + } + } + } + } + \ No newline at end of file