From d1fdbfd92ba56e649647c197338b58260f6d3fed Mon Sep 17 00:00:00 2001 From: Zsolt Tasnadi Date: Sun, 16 Aug 2026 11:13:50 +0200 Subject: [PATCH] Record the gem push credentials trap in ttg-publish-module MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Publishing warp_engine hit it: a credentials key written as the host URL never matches --host, because RubyGems normalizes those keys. gem push then falls back to signing in against an endpoint Gitea does not have, and reports "404 page not found" — which points nowhere near the cause. Also notes that fixing a release pipeline means re-tagging: Woodpecker reads the config from the tagged commit, so a retry on the old tag would run the old, broken config. Co-Authored-By: Claude Opus 5 (1M context) --- .../ttg-ops/skills/ttg-publish-module/SKILL.md | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/plugins/ttg-ops/skills/ttg-publish-module/SKILL.md b/plugins/ttg-ops/skills/ttg-publish-module/SKILL.md index 2351e89..7e7b7b8 100644 --- a/plugins/ttg-ops/skills/ttg-publish-module/SKILL.md +++ b/plugins/ttg-ops/skills/ttg-publish-module/SKILL.md @@ -39,8 +39,22 @@ A Go-nál **nincs csomagtár**: a repo maga a terjesztés, a git tag a verzió. 2. **`allowed_push_host`.** Pontosan egyezzen a `gem push --host` értékével. A forge orgonként külön registryt szolgál ki: `https://git.teletypegames.org/api/packages//rubygems` Ha csak a hosztnév van benne, a push visszautasításra kerül. -3. **Van-e már pipeline.** Nézd meg a repo `.woodpecker.yaml`-ját: lehet, hogy a publikálás már meg van írva és csak sosem futott. Ilyenkor **ne kézzel pusholj** — javítsd a pipeline-t (org-hivatkozások!) és tedd ki a tagot, amire figyel (a `warp_engine`-nél `warp_engine-v*`, nem `v*`). -4. **Ellenőrzés.** `tea api --login ttg "/packages/?limit=20"`. Ha üres marad, a Woodpecker naplója kell: indít-e buildet a tag-esemény, és van-e a CI tokennek `package:write` joga. +3. **A credentials kulcs neve.** A RubyGems **normalizálja** a `~/.gem/credentials` kulcsait — a pontokból `__` lesz, és záró perjelet kap —, ezért egy hoszt-URL alakú kulcs **soha nem 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, és a hibaüzenet félrevezetően `404 page not found`. Használj **nevesített kulcsot**: + ``` + --- + :gitea: Bearer + ``` + ```sh + gem push --key gitea --host https://git.teletypegames.org/api/packages//rubygems -.gem + ``` + Kétség esetén ellenőrizd: `ruby -e 'require "rubygems/config_file"; p Gem::ConfigFile.new([]).api_keys.keys'`. +4. **Van-e már pipeline.** Nézd meg a repo `.woodpecker.yaml`-ját: lehet, hogy a publikálás már meg van írva és csak sosem futott. Ilyenkor **ne kézzel pusholj** — javítsd a pipeline-t (org-hivatkozások!) és tedd ki a tagot, amire figyel (a `warp_engine`-nél `warp_engine-v*`, nem `v*`). + **Ha a pipeline-t javítod, a tagot is újra kell húzni:** a Woodpecker a tag commitjából olvassa a konfigot, tehát a javítás előtti tagra futtatott újrapróba is a régi configot használná. Kiadatlan verziónál a tag törlése és újratűzése tiszta megoldás. +5. **Ellenőrzés.** `tea api --login ttg "/packages/?limit=20"`, majd valódi fogyasztással: + ```sh + bundle lock # Gemfile: source "" do gem "" end + ``` + A Gitea a **compact indexet** szolgálja ki (`/versions`, `/info/`); a RubyGems.org-féle `/api/v1/versions/.json` nála 404, ez nem hiba. **Korlát:** a `tea api` csak JSON törzset küld, bináris feltöltésre nem alkalmas — kézi `gem push`-hoz nyers token kell, amit a `tea` titkosítva tárol, tehát a felhasználónak kell megadnia.