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

6.1 KiB
Raw Blame History

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

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)

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-вызовы

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.