56 lines
2.5 KiB
YAML
56 lines
2.5 KiB
YAML
name: Deploy
|
|
|
|
on:
|
|
push:
|
|
branches: [main]
|
|
|
|
jobs:
|
|
deploy:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
# actions/checkout скачивает свой код с github.com и берёт URL из
|
|
# внутреннего server_url Gitea — оба варианта требуют сети, которой
|
|
# у джоб-контейнера раннера нет. Клонируем напрямую по внутреннему
|
|
# адресу Gitea в docker-сети раннера.
|
|
- name: Checkout
|
|
run: git clone --depth=1 --branch main http://gitea:3000/cacto/cactoz.su.git repo
|
|
|
|
# Runner уже на cacto-homelab и имеет доступ к docker.sock хоста,
|
|
# поэтому образ собирается прямо на месте — без registry и без SSH.
|
|
- name: Sync to deploy directory
|
|
run: |
|
|
rm -rf /data/docker/compose/cactoz
|
|
mkdir -p /data/docker/compose/cactoz
|
|
cp -a repo/. /data/docker/compose/cactoz/
|
|
rm -rf /data/docker/compose/cactoz/.git
|
|
|
|
- name: Build and restart
|
|
working-directory: /data/docker/compose/cactoz
|
|
run: |
|
|
docker compose -f docker-compose.prod.yml build
|
|
docker compose -f docker-compose.prod.yml up -d
|
|
|
|
# Если сборка/подъём упали — шаг упадёт, а старые контейнеры продолжат
|
|
# работать (up -d не выполнился). Проверяем, что новое поднялось по
|
|
# healthcheck'ам обоих сервисов, и что nginx реально отдаёт главную.
|
|
- name: Smoke check
|
|
working-directory: /data/docker/compose/cactoz
|
|
run: |
|
|
n=starting
|
|
g=starting
|
|
for i in $(seq 1 30); do
|
|
n=$(docker inspect -f '{{.State.Health.Status}}' cactoz-nginx 2>/dev/null || echo starting)
|
|
g_id=$(docker compose -f docker-compose.prod.yml ps -q gameserver)
|
|
g=$([ -n "$g_id" ] && docker inspect -f '{{.State.Health.Status}}' "$g_id" 2>/dev/null || echo starting)
|
|
if [ "$n" = "healthy" ] && [ "$g" = "healthy" ]; then break; fi
|
|
sleep 3
|
|
done
|
|
docker compose -f docker-compose.prod.yml ps
|
|
[ "$n" = "healthy" ]
|
|
[ "$g" = "healthy" ]
|
|
docker exec cactoz-nginx wget -qO /dev/null http://127.0.0.1/
|
|
|
|
- name: Prune dangling images
|
|
working-directory: /data/docker/compose/cactoz
|
|
run: docker image prune -f
|