- Introduced IP health tracking in service views, allowing for detailed monitoring of individual IP statuses and latencies. - Updated the service configuration to include an `ip_health` array, providing structured health data for each IP. - Enhanced the `attachServiceHealth` function to aggregate IP health data alongside overall service health. - Modified relevant components to display IP health information, improving visibility and user experience in service management interfaces. This commit significantly improves the health monitoring capabilities of services, enabling better insights into the status of individual IPs associated with each service.
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 не будет.