Files
2026-09-06 13:51:15 +00:00

92 lines
6.1 KiB
Markdown
Raw Permalink 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 + 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.