mirror of
https://gitverse.ru/kpa39l/git-forge-management.git
synced 2026-09-29 09:15:05 +00:00
92 lines
6.1 KiB
Markdown
92 lines
6.1 KiB
Markdown
# Gitea Actions + runner — сессия 2026-08-30 (bigbox, gitea.nixg.ru)
|
||
|
||
## Контекст
|
||
|
||
- Gitea 1.26.2, act_runner v0.6.1 (bigbox-runner), registry: https://gitea.nixg.ru/v2/ (200).
|
||
- Пользователи: hermes (admin, api), estorozhenko (admin). Креды hermes в /opt/hermes/email-assistant/.git/config (remote url с user:pass).
|
||
- SSH GitHub от estorozhenko работает (ключ ~/.ssh/github или id_rsa), несмотря на HTTP-блокировку из РФ (даже через SOCKS5 404).
|
||
|
||
## Перерегистрация runner с новыми labels
|
||
|
||
```bash
|
||
cd /opt/gitea.nixg.ru
|
||
docker compose stop act-runner
|
||
sudo rm -f runner/.runner # .runner root-owned — без sudo permission denied
|
||
docker compose up -d act-runner # пересоздаётся, регистрируется заново
|
||
docker logs gitea-act-runner --tail 10 # ищем "declare successfully"
|
||
docker exec gitea-act-runner cat /data/.runner | python3 -c "import json,sys; print(json.load(sys.stdin)['labels'])"
|
||
```
|
||
|
||
- GITEA_RUNNER_LABELS в docker-compose.yml act-runner — источник labels.
|
||
- API `PUT /admin/runners` НЕ существует (404); labels меняются только перерегистрацией.
|
||
- Runner id меняется при перерегистрации (старый id=1 → новый id=2) — нормально.
|
||
|
||
## Label docker://docker:27 — питфолл с node
|
||
|
||
- Job исполняется в контейнере docker:27; docker.sock хоста виден (act_runner `docker_host: ""` монтирует сам).
|
||
- **В docker:27 НЕТ node** → JS-actions (actions/checkout@v4, docker/setup-buildx-action, docker/build-push-action, docker/login-action) ВИСЯТ навсегда (job stuck «queued», Checkout never completes; act-runner логи молчат).
|
||
- Диагностика: в job-контейнере `which node` → пусто; есть только git + docker.
|
||
- Решение: чистые shell-шаги — `git clone` + `docker build` + `docker push` (см. ниже). Либо label на runner-image с node.
|
||
|
||
## Рабочий shell-only workflow (Gitea Actions, без JS-actions)
|
||
|
||
```yaml
|
||
jobs:
|
||
build:
|
||
runs-on: ubuntu-24.04
|
||
steps:
|
||
- name: Checkout
|
||
run: |
|
||
git clone --depth 1 \
|
||
"https://hermes:${{ secrets.PKG_TOKEN }}@gitea.nixg.ru/hermes/icq.git" .
|
||
- name: Login to registry
|
||
run: echo "${{ secrets.PKG_TOKEN }}" | docker login gitea.nixg.ru -u hermes --password-stdin
|
||
- name: Build and push
|
||
run: |
|
||
cd prosody-docker
|
||
docker build --build-arg PROSODY_PACKAGE=prosody-13.0 \
|
||
-t gitea.nixg.ru/hermes/icq-prosody:13.0 \
|
||
-t gitea.nixg.ru/hermes/icq-prosody:latest .
|
||
docker push gitea.nixg.ru/hermes/icq-prosody:13.0
|
||
docker push gitea.nixg.ru/hermes/icq-prosody:latest
|
||
```
|
||
|
||
- Перенос секрета в env через `env:` НЕ сработал для git clone (не получил credentials); инлайн `https://user:token@` в URL работает.
|
||
- Gitea НЕ даёт аналога GITHUB_TOKEN для registry — нужен персональный токен со scope `write:package`.
|
||
|
||
## API-вызовы
|
||
|
||
```bash
|
||
AUTH="-u hermes:PASS"; BASE="https://gitea.nixg.ru/api/v1"
|
||
# Создать токен (scope write:package)
|
||
curl -s -X POST $AUTH "$BASE/users/hermes/tokens" -H 'Content-Type: application/json' \
|
||
-d '{"name":"hermes-actions","scopes":["write:package"]}'
|
||
# Секрет Actions (короткое имя! >=20 символов → 400 "invalid variable or secret name")
|
||
curl -s -X PUT $AUTH "$BASE/repos/hermes/icq/actions/secrets/PKG_TOKEN" \
|
||
-H 'Content-Type: application/json' -d '{"data":"TOKEN"}'
|
||
# Коллаборатор admin
|
||
curl -s -X PUT $AUTH "$BASE/repos/hermes/icq/collaborators/estorozhenko" \
|
||
-H 'Content-Type: application/json' -d '{"permission":"admin"}' # 204
|
||
# Статус run
|
||
curl -s $AUTH "$BASE/repos/hermes/icq/actions/runs/1/jobs" # steps + conclusions
|
||
```
|
||
|
||
## Диагностика зависшего/упавшего run
|
||
|
||
- Логи runner: `docker logs gitea-act-runner` — "task N repo is ..." = подхвачен.
|
||
- Job-контейнер называется GITEA-ACTIONS-TASK-N-WORKFLOW-...-JOB-build-... ; docker logs контейнера ПУСТЫ (вывод уходит в Gitea, не в stdout контейнера).
|
||
- ENDPOINT /jobs/1/logs → 404 пока job жива; после завершения через API детальных логов шагов нет — смотреть веб-UI https://gitea.nixg.ru/hermes/icq/actions/runs/N.
|
||
- Мгновенный failure (0 сек) + отсутствие container create в docker events = job-контейнер не стартовал (label/контейнер проблема), а не ошибка шага.
|
||
|
||
## GitHub из РФ
|
||
|
||
- github.com и raw.githubusercontent.com по http(s) → 404 (блок), даже через SOCKS5 127.0.0.1:1080.
|
||
- SSH github.com от estorozhenko (ключ ~/.ssh/github) РАБОТАЕТ: `sudo -u estorozhenko ssh -i ~/.ssh/github -T git@github.com` → "Hi kpa39l!".
|
||
- prosody.im и Docker Hub (hub.docker.com/v2, docker pull) доступны напрямую.
|
||
- prosody-docker: официальный репозиторий сборки образов prosody (github.com/prosody/prosody-docker): Dockerfile на debian:trixie-slim, ставит prosody из prosody.im репозитория (PROSODY_PACKAGE=prosody-13.0), entrypoint.sh с управлением UID, configs/*.cfg.lua с поддержкой ENV (PROSODY_ADMINS, PROSODY_PLUGIN_PATHS, PROSODY_ENABLE_MODULES).
|
||
|
||
## Стек ICQ (контекст)
|
||
|
||
- /opt/icq: prosody (image prosody/prosody:latest → 13.0), slidge (slidgram-proxy), webchat (nginx).
|
||
- Кастомные модули prosody в /opt/icq/modules: mod_admin_web, mod_http_upload_external, mod_muc_moderation, mod_vcard_muc, mod_privilege — их НЕТ в официальном образе; монтируются volume'ом в /etc/prosody/modules.
|
||
- Цель: hermes/icq (private) + Gitea Actions сборка образа gitea.nixg.ru/hermes/icq-prosody:13.0 из prosody-docker + modules. |