- Modified the CI workflow in `quality.yaml` to use `pnpm exec turbo` for running tests and builds, improving efficiency for the @evofw/api package. - Added a new export for development in `package.json` of the db package, allowing direct access to the source TypeScript file. These changes enhance the CI process and improve the development experience for the db package.
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 |
| workflows/quality.yaml | reusable (workflow_call) |
changes, openapi, 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 (кроме docs/openapi.yaml) quality jobs не запускают.
На 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.
Если 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-образов в
evofw-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 builderevofw(cleanup: false).
Если releasable-коммитов нет — semantic-release no-op, образы не публикуются.
Повтор упавшего publish (тег уже есть, bake нет): detect берёт v* на HEAD и всё равно пушит образы. Подробнее: docs/releasing.md.
Секреты
ACTIONS_PAT: push tags, releases, Container Registry. Для git tag fallback: github.token. Push OCI — только PAT (у GITEA_TOKEN нет права packages).
Теги образов
git.shx.one/<owner>/evofw:latest
git.shx.one/<owner>/evofw:v1.2.3
git.shx.one/<owner>/evofw:1.2.3
git.shx.one/<owner>/evofw:<short-sha>
git.shx.one/<owner>/evofw:sha-<full-sha>
Тот же манифест публикуется как evofirewall (drop-in для старого compose).
Кэш сборки: evofw-buildcache:node-buildcache и evofw-buildcache:base-*.
Пример:
docker pull git.shx.one/denozord/evofw:1.2.3
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 не будет.