После переноса сайта на Cloudflare pages мы получили возможность создавать клоны сайта под каждый новый пуш в репозиторий. К сожалению нет автоматической очисти этих технических версий сайта.
Простое решение
Самым простым решением тут будет настроить branch deployments control:

Где можно как полностью выключить автодеплой, так и настроить поведение и запуск автодеплоя для не основной ветки:

После этого нужно будет:
- либо запускать руками деплой основной ветки, когда это нужно;
- либо деплоить только основную ветку, а руками удалять старые версии;
- либо деплоить только основную ветку и определенные по правилам включения и исключения дополнительные ветки, удаляя руками старые версии.
Как видно, все эти варианты подразумевают ручное удаление старья. Это не очень удобно, поэтому вернемся к нашему файлу
.gitlab-ci.yml.
Правки .gitlab-ci.yml
В описание CI у GitLab можно привязаться к разным стадиям, в том числе и к внешней стадии Cloudflare Pages:

Тут тоже есть два пути через:
- Cloudflare API, где нужен раздел
Workers and Pages>Pages>Projects; - Wrangler, где есть отдельные команды для очистки деплоев.
Для обоих способов нужны переменные окружения:
CLOUDFLARE_ACCOUNT_ID- ID аккаунта (находится на главной странице дашборда Cloudflare справа внизу);CLOUDFLARE_API_TOKEN- токен с доступомCloudflare Pages: Edit;CLOUDFLARE_PROJECT_NAME- название проекта Pages
Где найти аккаунт ID:

Права для токена, на странице https://dash.cloudflare.com/profile/settings:

Выберем API, потому что там нам нужен только curl и базовый образ alpine. Для использования Wrangler нужен образ
nodejs, что сам по себе весит сильно больше curl, и установка (или скачивание и запуск через npx) Wrangler. При
этом плюсы этого сомнительны: не нужно писать работу с пагинацией самому и автоматический подхват переменных окружения
CLOUDFLARE_ACCOUNT_ID и CLOUDFLARE_API_TOKEN. Итого добавляем такое описание в .gitlab-ci.yml:
| |
Теперь в любом pipeline-е можно руками запустить зачистку всех деплоев.
Сам файл scripts/cleanup-cf-pages.sh:
| |
В скрипте проверяются доступные переменные окружения. Если они все есть берет все имеющиеся деплои (с пагинацией) и
пытается их удалить. Параметр force=true нужен, что бы можно было удалять деплои синонимы. Это такие деплои с именными
доменами по названиям веток.