advanced pipeline
This commit is contained in:
@@ -0,0 +1,117 @@
|
||||
# Éles deploy: master push -> rubocop -> host teszt -> pull + függőségek + restart.
|
||||
#
|
||||
# A woodpecker-agent ugyanabban a stackben fut, mint az api és a frontend, ezért
|
||||
# a deploy nem SSH-zik: a hoszt docker socketjét használja. A stack könyvtára a
|
||||
# konténerben UGYANARRA az útvonalra van mountolva, mint a hoszton — különben a
|
||||
# compose relatív bind mountjai (./data, ./apps) máshova oldódnának fel.
|
||||
#
|
||||
# Feltételek:
|
||||
# - Woodpecker: a repónál engedélyezni kell a "trusted: volumes" jelölést
|
||||
# (Repo settings -> Trusted, admin joggal), különben a mountok tiltottak.
|
||||
# - Woodpecker secret: forge_token — Forgejo token a services/teletypegames
|
||||
# olvasásához (ugyanaz, amit a warp_engine workflow használ).
|
||||
# - A szerveren /srv/stacks/teletype-games egy master-en álló git checkout,
|
||||
# benne az api és frontend konténerek futnak (container_name: api, frontend).
|
||||
|
||||
when:
|
||||
- event: push
|
||||
branch: master
|
||||
- event: manual
|
||||
|
||||
services:
|
||||
- name: mysql
|
||||
image: mysql:8
|
||||
environment:
|
||||
MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
|
||||
MYSQL_DATABASE: softwares # a zeitwerk:check production modban bootol; a softwares_test-et a db:test:prepare csinalja
|
||||
|
||||
steps:
|
||||
rubocop:
|
||||
image: ruby:3.3
|
||||
environment:
|
||||
BUNDLE_PATH: .bundle-ci # a workspace-ben marad, a teszt step újrahasználja
|
||||
commands:
|
||||
- apt-get update && apt-get install -y --no-install-recommends default-libmysqlclient-dev
|
||||
- cd apps/api
|
||||
- bundle install --jobs 4
|
||||
- bundle exec rubocop
|
||||
|
||||
test-host:
|
||||
image: ruby:3.3
|
||||
environment:
|
||||
RAILS_ENV: test
|
||||
DB_HOST: mysql
|
||||
DB_USER: root
|
||||
DB_NAME: softwares
|
||||
FILE_CONTAINER_PATH: /tmp/softwares
|
||||
IMAGE_CONTAINER_PATH: /tmp/images
|
||||
UPDATE_SECRET: ci-test
|
||||
SECRET_KEY_BASE: ci-test
|
||||
BUNDLE_PATH: .bundle-ci
|
||||
commands:
|
||||
- apt-get update && apt-get install -y --no-install-recommends default-libmysqlclient-dev default-mysql-client
|
||||
- mkdir -p /tmp/softwares /tmp/images
|
||||
- cd apps/api
|
||||
- bundle install --jobs 4
|
||||
- |
|
||||
echo "==> Varakozas a mysql-re"
|
||||
for i in $(seq 1 60); do
|
||||
if mysqladmin ping -h mysql --silent 2>/dev/null; then break; fi
|
||||
sleep 2
|
||||
done
|
||||
- bundle exec rails db:test:prepare
|
||||
- bundle exec rspec
|
||||
# Production modu eager load: a sema-betoltott teszt adatbazisra mutatunk,
|
||||
# hogy a boot ne egy ures DB-n haljon el.
|
||||
- RAILS_ENV=production DB_NAME=softwares_test bundle exec rails zeitwerk:check
|
||||
|
||||
pull:
|
||||
image: alpine/git
|
||||
environment:
|
||||
FORGE_TOKEN:
|
||||
from_secret: forge_token
|
||||
volumes:
|
||||
- /srv/stacks/teletype-games:/srv/stacks/teletype-games
|
||||
commands:
|
||||
- git config --global --add safe.directory /srv/stacks/teletype-games
|
||||
- cd /srv/stacks/teletype-games
|
||||
# A szerver checkoutja detached HEAD-en is állhat: akkor a pull "sikeres",
|
||||
# de a futó kód nem mozdul. Inkább bukjunk el itt.
|
||||
- |
|
||||
BRANCH="$(git symbolic-ref --short -q HEAD || true)"
|
||||
if [ "$BRANCH" != "master" ]; then
|
||||
echo "A checkout nem master-en all (HEAD: $${BRANCH:-detached}), a deploy megall."
|
||||
exit 1
|
||||
fi
|
||||
- TOKEN="$$(printf '%s' "$${FORGE_TOKEN}" | tr -d '[:space:]')"
|
||||
- git fetch "https://ci:$${TOKEN}@git.teletypegames.org/services/teletypegames.git" master
|
||||
- git merge --ff-only FETCH_HEAD
|
||||
- |
|
||||
HEAD_SHA="$(git rev-parse HEAD)"
|
||||
echo "==> A szerver most itt all: $HEAD_SHA"
|
||||
if [ "$HEAD_SHA" != "$CI_COMMIT_SHA" ]; then
|
||||
echo "Megjegyzes: ez nem a pipeline commitja ($CI_COMMIT_SHA) — kozben ujabb push jott."
|
||||
fi
|
||||
when:
|
||||
- event: [ push, manual ]
|
||||
branch: master
|
||||
|
||||
restart:
|
||||
image: docker:cli
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
commands:
|
||||
# Csak az api és a frontend indul újra. A stack többi szolgáltatását
|
||||
# (traefik, gitea, woodpecker, mysql) nem bántjuk: a woodpecker-server
|
||||
# restartja épp ezt a pipeline-t vágná el.
|
||||
- docker exec api bundle install
|
||||
# A migracio a restart elott fut: a motor migraciois utvonala a hoszt
|
||||
# db:migrate-jaban van, tehat ez a warp_engine migraciot is elvegzi.
|
||||
- docker exec api bundle exec rails db:migrate
|
||||
- docker restart api
|
||||
- docker exec frontend npm install
|
||||
- docker restart frontend
|
||||
- docker ps --filter name=api --filter name=frontend --format '{{.Names}} {{.Status}}'
|
||||
when:
|
||||
- event: [ push, manual ]
|
||||
branch: master
|
||||
Reference in New Issue
Block a user