# Сборка всех Docker-образов без push: сервер собирает их сам при обновлении, и здесь ловятся поломки # Dockerfile и зависимостей. Только при изменении Dockerfile, deploy/ и манифестов зависимостей. name: ci / docker on: push: branches: [main] paths: - '**/Dockerfile' - '.dockerignore' - 'deploy/**' - 'services/api/go.mod' - 'services/api/go.sum' - 'services/recommender/pyproject.toml' - 'services/recommender/uv.lock' - 'apps/web/package.json' - 'package.json' - 'pnpm-lock.yaml' - 'pnpm-workspace.yaml' - 'turbo.json' - 'tsconfig.base.json' - '.gitea/workflows/docker.yml' pull_request: paths: - '**/Dockerfile' - '.dockerignore' - 'deploy/**' - 'services/api/go.mod' - 'services/api/go.sum' - 'services/recommender/pyproject.toml' - 'services/recommender/uv.lock' - 'apps/web/package.json' - 'package.json' - 'pnpm-lock.yaml' - 'pnpm-workspace.yaml' - 'turbo.json' - 'tsconfig.base.json' - '.gitea/workflows/docker.yml' concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: docker: name: docker (образы собираются — их сервер собирает сам при обновлении) runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 # Обычный docker build через Docker хоста раннера, а не buildx-контейнер: кэш слоёв и # --mount=type=cache переживают job, повторная сборка занимает секунды. Фиксированные теги # не дают копиться образам; кэш сборки чистит на хосте `docker builder prune`. - name: Сборка образов env: { DOCKER_BUILDKIT: "1" } run: | set -euo pipefail build() { echo "::group::$1"; docker build --build-arg VERSION=ci -t "pipu-ci/$1" "${@:2}" .; echo "::endgroup::"; } build api -f services/api/Dockerfile --target api build storage-agent -f services/api/Dockerfile --target storage-agent build recommender -f services/recommender/Dockerfile build web -f apps/web/Dockerfile