Record the gem push credentials trap in ttg-publish-module

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) <noreply@anthropic.com>
This commit is contained in:
2026-08-16 11:13:50 +02:00
co-authored by Claude Opus 5
parent 4192fc366e
commit d1fdbfd92b
@@ -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: 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/<org>/rubygems` `https://git.teletypegames.org/api/packages/<org>/rubygems`
Ha csak a hosztnév van benne, a push visszautasításra kerül. 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*`). 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**:
4. **Ellenőrzés.** `tea api --login ttg "/packages/<org>?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. ```
---
:gitea: Bearer <token>
```
```sh
gem push --key gitea --host https://git.teletypegames.org/api/packages/<org>/rubygems <név>-<ver>.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/<org>?limit=20"`, majd valódi fogyasztással:
```sh
bundle lock # Gemfile: source "<registry>" do gem "<név>" end
```
A Gitea a **compact indexet** szolgálja ki (`/versions`, `/info/<név>`); a RubyGems.org-féle `/api/v1/versions/<név>.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. **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.