mirror of
https://gitverse.ru/kpa39l/git-forge-management.git
synced 2026-09-29 09:15:05 +00:00
Initial commit: Hermes skill git-forge-management
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user