feat(ci): add build cache
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing

This commit is contained in:
2025-06-23 22:19:01 +03:00
parent 14c54ee737
commit eef26aba0a

View File

@@ -10,24 +10,55 @@ trigger:
- push - push
- pull_request - pull_request
# --- НАЧАЛО БЛОКА ЛОКАЛЬНОГО КЭШИРОВАНИЯ ---
volumes:
- name: go-cache # Логическое имя кэша для Go
host:
# Путь на сервере, где запущен Drone Agent.
# Убедитесь, что эта директория существует и у Drone есть права на запись.
path: /var/cache/drone/gocache
- name: lint-cache # Отдельный кэш для линтера
host:
path: /var/cache/drone/lintcache
# --- КОНЕЦ БЛОКА ЛОКАЛЬНОГО КЭШИРОВАНИЯ ---
steps: steps:
# Общие шаги для всех веток # Общие шаги для всех веток
- name: deps - name: deps
image: golang:1.24-alpine image: golang:1.24-alpine
volumes:
# Монтируем наш go-cache в стандартный GOPATH контейнера
- name: go-cache
path: /go
commands: commands:
# Теперь go mod download будет сразу использовать и сохранять кэш на хост-машине
- go mod download - go mod download
- go mod tidy - go mod tidy
- name: lint - name: lint
image: golangci/golangci-lint:v1.64-alpine image: golangci/golangci-lint:v1.64-alpine
volumes:
# Монтируем кэш линтера
- name: lint-cache
path: /root/.cache
commands: commands:
# Линтер автоматически подхватит кэш из /root/.cache
- golangci-lint run --timeout=5m --verbose ./... - golangci-lint run --timeout=5m --verbose ./...
- name: test - name: test
image: golang:1.24-alpine image: golang:1.24-alpine
volumes:
# Также монтируем go-cache, чтобы тесты использовали скачанные модули и кэш сборки
- name: go-cache
path: /go
commands: commands:
- apk add --no-cache build-base - apk add --no-cache build-base
# CGO_ENABLED=1 go test теперь будет значительно быстрее при повторных запусках
- CGO_ENABLED=1 go test -race -cover ./... - CGO_ENABLED=1 go test -race -cover ./...
# Шаг сборки и публикации для MASTER # Шаги сборки и публикации остаются почти без изменений.
# Кэширование Docker-слоев (`cache_from`) - это отдельный механизм, и его стоит оставить.
# Он дополняет кэширование зависимостей, ускоряя саму сборку Docker-образа.
- name: build-and-publish-master - name: build-and-publish-master
image: plugins/docker image: plugins/docker
settings: settings:
@@ -37,7 +68,10 @@ steps:
from_secret: gitea_username from_secret: gitea_username
password: password:
from_secret: gitea_password from_secret: gitea_password
auto_tag: true # Создаст теги: latest, git-хеш и т.д. auto_tag: true
# Оставляем кэширование Docker-слоев, это очень эффективно
cache_from:
- gitea.mrixs.me/mrixs/yamusic-bot:latest
platforms: platforms:
- linux/amd64 - linux/amd64
- linux/arm64 - linux/arm64
@@ -48,7 +82,6 @@ steps:
event: event:
- push - push
# Шаг сборки и публикации для DEV (nightbuild/dev-build)
- name: build-and-publish-dev - name: build-and-publish-dev
image: plugins/docker image: plugins/docker
settings: settings:
@@ -58,11 +91,11 @@ steps:
from_secret: gitea_username from_secret: gitea_username
password: password:
from_secret: gitea_password from_secret: gitea_password
# Вместо auto_tag: true указываем теги вручную
tags: tags:
- dev # Статический тег 'dev', который будет перезаписываться - dev
# Очень полезный тег: dev-<короткий-хеш-коммита>
- dev-${DRONE_COMMIT_SHA:0:7} - dev-${DRONE_COMMIT_SHA:0:7}
cache_from:
- gitea.mrixs.me/mrixs/yamusic-bot:dev
platforms: platforms:
- linux/amd64 - linux/amd64
- linux/arm64 - linux/arm64