- Removed unused imports and alerts related to Cloudflare, Globalping, and Local health checks from the HealthCheckConfigFields component. - Simplified the logic for rendering health check sources and improved layout responsiveness by adding min-width classes. - Introduced new Cloudflare and Globalping SVG icons for better visual representation in the HealthSourceTiles component. - Refactored the TilePanel component to enhance its structure and ensure proper handling of minimum width for child elements. This commit streamlines the health check configuration UI, improving maintainability and user experience.
Gitea Actions
| Workflow | Когда | Что |
|---|---|---|
| workflows/ci.yaml | pull request в main/master | quality gates + commitlint |
| workflows/cd.yaml | push в main/master | quality gates + semantic-release + docker push; wiki параллельно |
| workflows/quality.yaml | reusable (workflow_call) |
changes, web, api, commitlint, docker-check |
Подробнее: docs/releasing.md.
CI (quality gates)
Job changes вычисляет флаги по путям в diff. Полный прогон: .gitea/workflows/*, scripts/*, корневой package.json / pnpm-lock.yaml / .releaserc.json. Правки .cursor/, .claude/, *.md quality jobs не запускают (wiki — отдельный job в CD).
На pull request — commitlint. При изменении deploy/docker/** / .dockerignore — job docker-check (bake --print, bake без --push если есть доступ к registry).
Кэш зависимостей — нативный actions/cache (cache server act_runner), ключ sha256sum lockfile (не hashFiles). Пути абсолютные ($HOME/.pnpm-store): тильда ~ на Gitea часто не раскрывается и даёт вечный miss.
Кэшируется целиком: pnpm store + node_modules + corepack. При hit: pnpm install --offline. HUSKY=0 в scripts/ci/pnpm-ci.sh (у корня есть prepare: husky).
Если restore пишет connect ECONNREFUSED / cache server not configured — на runner включите cache server (см. ниже). Иначе каждый job снова качает пакеты (~минуты).
Runner: ubuntu-latest, Docker для docker-check (PR) и publish (CD).
CD (job publish)
После успешных quality gates на push в main job publish:
pnpm exec semantic-release— тегvX.Y.Zна текущий commit (без дополнительного commit в main).- Gitea Release +
CHANGELOG.mdкак attachment (не в git). - Зеркало base-образов в
cfdm-buildcache:base-*(deploy/docker/mirror-base-images.sh; skip существующих тегов,linux/amd64, retry при 429). docker buildx bake default --pushсVERSION=X.Y.Z,pull=false, named buildercfdm(cleanup: false).
Если releasable-коммитов нет — semantic-release no-op, образы не публикуются.
Повтор упавшего publish (тег уже есть, bake нет): detect берёт v* на HEAD и всё равно пушит образы. Подробнее: docs/releasing.md.
Job update-wiki идёт параллельно publish (не блокирует образы): при diff docs/Home.md копирует файл в wiki-репозиторий. Clone/push идут на публичный https://git.shx.one (не внутренний gitea.server_url / 192.168.x.x:3000): Gitea ROOT_URL совпадает с Host, иначе git-receive-pack wiki отвечает Repository not found. Токен в URL https://oauth2:<PAT>@…/*.wiki.git — Gitea на неаутентифицированный wiki push даёт 404, не 401, поэтому http.extraHeader / ASKPASS не срабатывают. Секрет: ACTIONS_PAT, fallback GITEA_TOKEN.
Секреты
ACTIONS_PAT: push tags, releases, Container Registry. Для git tag fallback: gitea.token. Push OCI — только PAT (у job token Gitea нет права packages).
GITEA_TOKEN: опциональный wiki-only PAT (fallback, если нет ACTIONS_PAT).
Теги образов
git.shx.one/<owner>/cfdm:latest
git.shx.one/<owner>/cfdm:v1.2.3
git.shx.one/<owner>/cfdm:1.2.3
git.shx.one/<owner>/cfdm:<short-sha>
git.shx.one/<owner>/cfdm:sha-<full-sha>
Тот же манифест публикуется как cloudflare-domain-manager (drop-in для текущего docker pull).
Кэш сборки: cfdm-buildcache:node-buildcache и cfdm-buildcache:base-*.
Пример:
docker pull git.shx.one/denozord/cfdm:latest
docker pull git.shx.one/denozord/cloudflare-domain-manager:latest
act_runner: cache server
actions/cache ходит в встроенный cache server runner (не GitHub type=gha). Кэш локален для этого runner.
В config.yaml runner:
cache:
enabled: true
dir: "" # по умолчанию $HOME/.cache/actcache
host: "" # IP, доступный из job-контейнера (не 0.0.0.0)
port: 8088
Если runner в Docker, а jobs — отдельные контейнеры: пробросьте порт и задайте host (LAN IP хоста) или external_server: "http://<host>:8088/". Иначе restore — timeout/ECONNREFUSED и пакеты качаются снова.
Не делайте docker system prune -a по cron: сотрётся и Docker-кэш FROM, и пользы от cleanup: false у buildx не будет.