Files
git-forge-management/references/gitea-actions-bash-jobs.md
T
2026-09-06 13:51:15 +00:00

60 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.