# 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.