- Added .release-version, CHANGELOG.md, and deploy/docker/docker-bake.override.hcl to .gitignore. - Removed Dockerfile as part of the cleanup. - Updated AGENTS.md and README.md to include new documentation on CI/Docker processes and deployment instructions. - Enhanced package.json with new devDependencies for commit linting and semantic release. - Updated pnpm-lock.yaml to reflect new dependencies and versions. These changes streamline the project structure and improve documentation clarity.
Docker-образы EvoFirewall
CI (Gitea Actions)
Сборка образов — docker buildx bake (docker-bake.hcl), не отдельные docker build.
Publish: push в main после quality gates — workflow CD job publish: semantic-release + зеркало base-образов + bake с VERSION из релиза.
Bake читает переменные из окружения (REGISTRY, IMAGE_TAG, CACHE_REF_NODE, BASE_NODE). Скрипт write-bake-override.sh — опциональный helper для локальной отладки.
BuildKit кэширует pnpm store через RUN --mount=type=cache. На CI mounts живут, пока named builder evofw не удаляют (cleanup: false).
Слои и runtime
| Образ | Runtime base | Заметка |
|---|---|---|
evofw, evofirewall |
node:22-alpine |
один процесс: API + SPA + SQLite; better-sqlite3 собирается в alpine на stage build |
python3 / make / g++ только в deps/build. Context режется корневым .dockerignore.
Теги evofw и evofirewall — один и тот же образ (evofirewall — drop-in для старого compose).
Кэш registry
git.shx.one/<owner>/evofw-buildcache:node-buildcache— запись только изnode-buildgit.shx.one/<owner>/evofw-buildcache:base-node-22-alpine— зеркало FROM с Docker Hub. Толькоlinux/amd64; skip если тег уже в Gitea. Неуспешный copy не валит CD — bake берёт Docker Hub FROM.
pull = false в bake: не перекачивать FROM, если слой уже в builder. Не запускайте docker system prune -a на runner.
Параллельный cache-to в один ref ломает manifest (content descriptor … not found).
Если CI падает на «not found» после смены схемы кэша — один раз удалите теги evofw-buildcache:* в registry и пересоберите.
Локальная сборка
Из корня репозитория:
cd deploy/docker
export REGISTRY=git.shx.one/<owner>
export IMAGE_TAG=latest
export SHORT_SHA=$(git rev-parse --short HEAD)
export VERSION=dev
export BUILD_TIME=
docker buildx bake --allow=fs.read=../.. -f docker-bake.hcl default
Проверка манифеста без сборки:
docker buildx bake --allow=fs.read=../.. -f docker-bake.hcl --print default
В docker-bake.hcl: context = "../.." резолвится от cwd (каталог deploy/docker/). dockerfile — путь от этого context (корень репо). Из корня репо не вызывать bake с -f deploy/docker/docker-bake.hcl: получится lstat ../../deploy. Можно задать BUILDX_BAKE_FILE_RELATIVE_PATHS=1.