# Read-only split mirror: a libs/ruby/warp_engine alkönyvtárat kitükrözi a
# engines/warp_engine repóba (fejlesztés itt, a monorepóban történik; a tükör
# csak publikálásra való). Tag-elt release (warp_engine-v*) esetén a gem a
# Forgejo rubygems registry-be is felmegy.
#
# 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:
  # A motor tesztje kapuzza a tobbit: ha bukik, se a tukrozes, se a gem
  # kiadasa nem fut le. A mirror repoba nincs ertelme CI-t tenni, mert azt a
  # subtree split minden alkalommal feluliria.
  test-engine:
    image: ruby:3.2
    environment:
      RAILS_ENV: test
      DB_HOST: mysql
    commands:
      - apt-get update && apt-get install -y --no-install-recommends default-libmysqlclient-dev
      - 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*
