advanced pipeline
This commit is contained in:
@@ -0,0 +1,118 @@
|
||||
# WarpEngine gem: verzió -> rubocop -> teszt -> tükrözés -> gem kiadás.
|
||||
#
|
||||
# A fejlesztés ebben a monorepóban történik; a engines/warp_engine repó csak
|
||||
# publikálásra való read-only tükör, ezért CI-t oda nincs értelme tenni: a
|
||||
# subtree split minden alkalommal felülírja.
|
||||
#
|
||||
# Szükséges Woodpecker secret: forge_token — Forgejo access token
|
||||
# repository:write (engines/warp_engine) és package:write joggal.
|
||||
|
||||
when:
|
||||
- event: push
|
||||
branch: master
|
||||
path: "libs/ruby/warp_engine/**"
|
||||
- event: manual
|
||||
- event: tag
|
||||
ref: refs/tags/warp_engine-v*
|
||||
|
||||
clone:
|
||||
git:
|
||||
image: woodpeckerci/plugin-git
|
||||
settings:
|
||||
partial: false
|
||||
depth: 0 # a subtree splithez teljes history kell
|
||||
|
||||
services:
|
||||
- name: mysql
|
||||
image: mysql:8
|
||||
environment:
|
||||
MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
|
||||
MYSQL_DATABASE: warp_engine_test
|
||||
|
||||
steps:
|
||||
# Első kapu: a motor nem módosulhat verzióemelés nélkül. Ugyanaz a szkript
|
||||
# fut a .githooks/pre-commit hookban is, csak --staged módban.
|
||||
version-bumped:
|
||||
image: ruby:3.3
|
||||
commands:
|
||||
- ruby script/warp_engine_version_check.rb --range "$CI_PREV_COMMIT_SHA" "$CI_COMMIT_SHA"
|
||||
when:
|
||||
- event: [ push, manual ]
|
||||
|
||||
# Tag esetén a verzió már nem emelkedhet: a tagnek a VERSION-t kell hirdetnie.
|
||||
tag-matches-version:
|
||||
image: ruby:3.3
|
||||
commands:
|
||||
- ruby script/warp_engine_version_check.rb --tag "$CI_COMMIT_REF"
|
||||
when:
|
||||
- event: tag
|
||||
|
||||
rubocop:
|
||||
image: ruby:3.2
|
||||
environment:
|
||||
BUNDLE_PATH: .bundle-ci # a workspace-ben marad, a következő step újrahasználja
|
||||
commands:
|
||||
- apt-get update && apt-get install -y --no-install-recommends default-libmysqlclient-dev
|
||||
- cd libs/ruby/warp_engine
|
||||
- bundle install --jobs 4
|
||||
- bundle exec rubocop
|
||||
|
||||
test-engine:
|
||||
image: ruby:3.2
|
||||
environment:
|
||||
RAILS_ENV: test
|
||||
DB_HOST: mysql
|
||||
BUNDLE_PATH: .bundle-ci
|
||||
commands:
|
||||
- apt-get update && apt-get install -y --no-install-recommends default-libmysqlclient-dev default-mysql-client
|
||||
- cd libs/ruby/warp_engine
|
||||
- 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
|
||||
- |
|
||||
echo "==> Teszt adatbazis elokeszitese"
|
||||
bundle exec rake app:db:test:prepare
|
||||
- bundle exec rspec
|
||||
|
||||
split-mirror:
|
||||
image: alpine/git
|
||||
environment:
|
||||
FORGE_TOKEN:
|
||||
from_secret: forge_token
|
||||
commands:
|
||||
- apk add --no-cache git-subtree
|
||||
- git subtree split --prefix=libs/ruby/warp_engine HEAD -b warp-engine-split
|
||||
# a secretbe másolt token végén lehet sortörés — levágjuk
|
||||
- TOKEN="$$(printf '%s' "$${FORGE_TOKEN}" | tr -d '[:space:]')"
|
||||
- git push --force "https://ci:$${TOKEN}@git.teletypegames.org/engines/warp_engine.git" warp-engine-split:master
|
||||
when:
|
||||
- event: push
|
||||
branch: master
|
||||
- event: manual
|
||||
|
||||
publish-gem:
|
||||
image: ruby:3.3-slim
|
||||
environment:
|
||||
FORGE_TOKEN:
|
||||
from_secret: forge_token
|
||||
commands:
|
||||
- cd libs/ruby/warp_engine
|
||||
- gem build warp_engine.gemspec
|
||||
- mkdir -p ~/.gem
|
||||
- TOKEN="$$(printf '%s' "$${FORGE_TOKEN}" | tr -d '[:space:]')"
|
||||
# Nevesített kulcs, nem a hoszt-URL: a RubyGems a credentials fájl
|
||||
# kulcsait normalizálja (a pontokból __ lesz, záró perjelet kap), így egy
|
||||
# URL-kulcs sosem egyezik a --host értékével. Ilyenkor a gem push
|
||||
# bejelentkezni próbál a RubyGems sign_in végpontján, amit a Gitea nem
|
||||
# ismer — ez adta a "404 page not found"-ot.
|
||||
- |
|
||||
printf -- '---\n:gitea: Bearer %s\n' "$${TOKEN}" > ~/.gem/credentials
|
||||
- chmod 600 ~/.gem/credentials
|
||||
- gem push --key gitea --host https://git.teletypegames.org/api/packages/engines/rubygems warp_engine-*.gem
|
||||
when:
|
||||
- event: tag
|
||||
ref: refs/tags/warp_engine-v*
|
||||
Reference in New Issue
Block a user