axe/.drone.yml
2026-10-18 22:07:25 +03:00

68 lines
2.8 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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