diff --git a/.woodpecker.yml b/.woodpecker.yml index e0ad424..fc49ffd 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -30,8 +30,13 @@ steps: tags: - latest - "sha-${CI_COMMIT_SHA:0:8}" + # Берём inline-кэш из latest; ARG GIT_COMMIT теперь в конце Dockerfile — кэш не сбивается cache_from: - from_secret: forgejo_image # значение: git.example.com/user/intradesk-monitor:latest + from_secret: forgejo_image + # mode=max кэширует все промежуточные слои (apk, npm install) в отдельный манифест + cache_to: + from_secret: forgejo_image_cache # значение: /:buildcache + rewrite_timestamp: false build_args: - "GIT_COMMIT=${CI_COMMIT_SHA:0:8}" - "BUILDKIT_INLINE_CACHE=1" diff --git a/Dockerfile b/Dockerfile index feb2b51..c76b15b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,21 +6,23 @@ ENV NODE_ENV=production ENV LANG=C.UTF-8 ENV LC_ALL=C.UTF-8 -# Build-аргумент для трассировки коммита (используется при сборке образа) -ARG GIT_COMMIT=unknown -ENV GIT_COMMIT=${GIT_COMMIT} - # Зависимости для better-sqlite3 (нужна компиляция) +# Слой кэшируется пока не меняется базовый образ RUN apk add --no-cache python3 make g++ COPY package*.json ./ RUN npm install --omit=dev --no-audit --no-fund \ && npm cache clean --force +# Код приложения — копируется после зависимостей COPY server.js ./ COPY refresh-service.js ./ COPY public/ ./public/ +# Build-аргумент объявлен ПОСЛЕ тяжёлых слоёв — не сбивает кэш при каждом коммите +ARG GIT_COMMIT=unknown +ENV GIT_COMMIT=${GIT_COMMIT} + # Папка для базы данных RUN mkdir -p /data