Initial commit: Hermes skill git-forge-management

This commit is contained in:
estorozhenko
2026-09-06 13:51:15 +00:00
commit 29e4910aed
7 changed files with 432 additions and 0 deletions
+60
View File
@@ -0,0 +1,60 @@
# Gitea Actions: bash в job-образе, секреты, апгрейд runner — 2026-08-30 (bigbox, gitea.nixg.ru)
## ГЛАВНЫЙ ПИТФОЛЛ: job-образ обязан содержать bash
Gitea Actions (как и GitHub) исполняет **каждый** run-шаг через
`bash --noprofile --norc -e -o pipefail` — жёсткий дефолт, одинаковый в act_runner 0.6.x и gitea/runner 3.x.
- `docker:27` (Alpine) имеет только busybox sh → мгновенный failure шага:
`OCI runtime exec failed: exec: "bash": executable file not found in $PATH`, exit 127.
- Job-контейнер при этом **стартует нормально** (в логе видны docker create/run) — падает только exec шага.
- Это объясняет серию мгновенных failures (0 сек) без видимой причины в docker logs runner (там только info "task N repo is ...").
### Фикс: тонкий job-образ docker:27 + bash
```bash
docker build -t docker27-bash:latest - <<'EOF'
FROM docker:27
RUN apk add --no-cache bash
EOF
```
Label runner'а → `GITEA_RUNNER_LABELS=ubuntu-24.04:docker://docker27-bash:latest`.
Перерегистрация не нужна: gitea/runner v3 обновляет labels на лету (в логах "labels updated to: [...]").
С bash в образе пишутся обычные bash-шаги. Костыли `shell: sh` / `sh -c '...'` не нужны (в act_runner v0.6.1 `shell:` под run не поддерживался).
## Секреты: GITHUB_TOKEN vs персональный токен
- **secrets.GITHUB_TOKEN** — выдаётся Gitea Actions автоматически, имеет доступ к репозиторию (clone).
`git clone "https://hermes:${{ secrets.GITHUB_TOKEN }}@gitea.nixg.ru/hermes/icq.git" .`
- Персональный токен со scope только `write:package` → git clone даёт **403 Forbidden** (`remote: Forbidden`) — нет read:repository.
- docker login в registry: `echo "${{ secrets.PKG_TOKEN }}" | docker login gitea.nixg.ru -u hermes --password-stdin` (scope write:package).
- Проброс секрета через `env:` НЕ доходил до git clone; инлайн `user:token@` в URL работает.
## Апгрейд runner: act_runner → gitea/runner
- Проект переехал: gitea.com/gitea/act_runner → gitea.com/gitea/runner (тег v3.3.1, авг 2026).
- Docker Hub `gitea/act_runner` заморожен на 0.6.1 (апр 2026); свежие образы — `gitea/runner:3.3.1` / `latest` / `nightly`.
- Env совместимы: GITEA_INSTANCE_URL, GITEA_RUNNER_REGISTRATION_TOKEN, GITEA_RUNNER_NAME, GITEA_RUNNER_LABELS, GITEA_INSECURE_SKIP_VERIFY.
- `.runner` переживает мажорный апгрейд (id/labels сохраняются).
- v3: `gitea-runner daemon --labels` меняет labels без перерегистрации; `config generate`; `log.job.dir` пишет логи задач на диск.
## Диагностика run — рабочие эндпоинты
```bash
AUTH="-u hermes:PASS"; BASE="https://gitea.nixg.ru/api/v1"
# Статус + steps (работает и для completed)
curl -s $AUTH "$BASE/repos/hermes/icq/actions/runs/N/jobs"
# ПОЛНЫЙ лог шагов — доступен ПОСЛЕ завершения run (лив-логи не отдаёт):
curl -s $AUTH "$BASE/repos/hermes/icq/actions/jobs/{id}/logs" # HTTP 200, весь вывод
```
- Логи шагов НЕ видны в docker logs job-контейнера (stdout уходит в Gitea).
- `git commit --allow-empty` НЕ триггерит Actions — нужен реальный change (например, правка самого workflow-файла).
## Результат сессии
- Образ gitea.nixg.ru/hermes/icq-prosody (теги 13.0, latest, digest идентичны) собран из hermes/icq:
prosody-docker/Dockerfile (base prosodyim/prosody:13.0) + COPY кастомных модулей /opt/icq/modules в /usr/lib/prosody/modules/.
- Workflow run 11: success (Checkout → Login → Build → Push). Сборка идёт хостовым docker-демоном через docker.sock.
- Внутри образа: prosody 13.0 + mod_admin_web, mod_http_upload_external, mod_muc_moderation, mod_vcard_muc, mod_privilege.lua.