axe/.drone.yml

68 lines
2.8 KiB
YAML
Raw Normal View History

2026-10-18 19:07:25 +00:00
# Drone CI/CD бэкенда (сервер подключён к Gitea; см. README, «CI/CD»).
#
# Push/PR — только проверки и сборка образа. Деплой — ТОЛЬКО ручным
# запуском пайплайна из UI Drone (событие custom, кнопка Run Pipeline):
# шаг deploy выполняется исключительно при нём.
kind: pipeline
type: docker
name: ci-cd
clone:
depth: 1
# Сервисная база для интеграционных тестов: схему накатывает сам шаг
# test (cmd/migrate), тесты выполняют сценарии в транзакции и откатывают
# их — данные в базе не остаются.
services:
- name: postgres
image: postgres:16-alpine
environment:
POSTGRES_USER: building
POSTGRES_PASSWORD: building
POSTGRES_DB: building_mgmt_test
steps:
- name: test
# Полный golang-образ, не alpine: -race требует CGO и C-компилятора.
image: golang:1.27
environment:
DATABASE_URL: postgres://building:building@postgres:5432/building_mgmt_test?sslmode=disable
commands:
- go vet ./...
# Postgres в сервисе поднимается параллельно со сборкой шага:
# повторяем накат, пока база не готова (30 попыток по 2 секунды).
- ok=0; for i in $(seq 1 30); do if go run ./cmd/migrate; then ok=1; break; fi; sleep 2; done; test "$ok" = 1
- go test -race -count=1 ./...
- go build ./...
- name: lint
image: ghcr.io/golangci/golangci-lint:v2.14.0
commands:
- golangci-lint run ./...
- name: build-api
# Образ и два тега: latest (его поднимает compose.prod.yaml) и SHA
# (для отката: собрать нужный коммит и перетегнуть latest вручную).
image: plugins/docker:27
settings:
repo: building-mgmt-api
tags:
- latest
- ${DRONE_COMMIT_SHA}
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- name: deploy
image: docker:27-cli
volumes:
- /var/run/docker.sock:/var/run/docker.sock
commands:
# -p закрепляет имя проекта: у Drone каталог клонирования свой,
# без -p имя сети стека разъехалось бы между запусками, и web
# перестал бы находить api. env-файл — постоянный файл на сервере.
- docker compose version
- docker compose -p building-mgmt --env-file /opt/building-mgmt/.env -f compose.prod.yaml up -d --wait
when:
event:
- custom