2709dba03f
Диагноз: диспетчеризация Gitea работает, но host-исполнение act_runner роняет шаги (No such file / MODULE_NOT_FOUND, задвоение hostexecutor/.cache). Workflow → workflow_dispatch (не auto-fail на push), раннер остановлен. Рабочий путь на будущее — Docker-образ с JDK+SDK + gradle-кэш (docs/CI.md). Сборки/релизы пока вручную (v0.5.123 опубликован).
72 lines
5.1 KiB
Markdown
72 lines
5.1 KiB
Markdown
# CI — Gitea Actions
|
||
|
||
Пайплайн: [`.gitea/workflows/ci.yml`](../.gitea/workflows/ci.yml). Gitea на git.f7cloud.ru — **1.26.1**
|
||
(Actions поддерживаются).
|
||
|
||
## Что делает
|
||
|
||
| Триггер | Джоба | Действия |
|
||
|---|---|---|
|
||
| push в `main`, любой PR | `verify` | `testDebugUnitTest` + `:app:lintRelease` + `:app:assembleDebug` (+ артефакт debug-APK) |
|
||
| тег `v*` | `release` | подписанный `assembleRelease` + архив исходников (GPL §6) → Gitea Release |
|
||
|
||
## Предпосылка: self-hosted раннер (инфра ячейки B)
|
||
|
||
Проект тяжёлый (vendor talk-android + WebRTC), поэтому раннер — **self-hosted** с тёплым
|
||
Gradle-кэшем, а не контейнер (иначе WebRTC качается каждый прогон). Требования к машине раннера —
|
||
как у билд-машины: **JDK 21** (`/usr/lib/jvm/java-21-openjdk-amd64`) + **Android SDK 36**
|
||
(`/opt/android-sdk`, platform android-36, build-tools 36.0.0).
|
||
|
||
Регистрация — **repo-токен** из Gitea → репозиторий `root/f7cloud_mobile` → Settings → Actions →
|
||
Runners → Create new Runner (НЕ site-admin токен — тот регистрирует раннер общеинстансно и он
|
||
подхватывает джобы чужих ячеек; проверено — брал `glb_adm/f7_talk`). Метки `self-hosted`+`f7-android`
|
||
соответствуют `runs-on: [self-hosted, f7-android]`.
|
||
|
||
**Развёрнуто на инфре B (2026-07-09):** `act_runner` v0.2.11 + Node 20 (`/opt/nodejs`) + Docker
|
||
(`docker.io`, нужен act_runner для старта, но джобы идут на **хосте** — метки `:host`, тёплый кэш
|
||
`/root/.gradle`). Конфиг `/opt/act_runner/config.yaml` (labels `self-hosted:host`,`f7-android:host`,
|
||
`container.docker_host: "-"`). systemd-сервис `act_runner.service` (enabled, Restart=always,
|
||
env JAVA_HOME/ANDROID_HOME/PATH+node). Регистрация — repo-scope (только f7cloud_mobile).
|
||
```bash
|
||
systemctl status act_runner # состояние
|
||
journalctl -u act_runner -f # логи
|
||
```
|
||
|
||
## Secrets репозитория (Gitea → Settings → Actions → Secrets)
|
||
|
||
Для джобы `release`:
|
||
- `F7_KEYSTORE_BASE64` — боевой keystore, `base64 -w0 release.jks`
|
||
- `F7_KEYSTORE_PASSWORD`, `F7_KEY_ALIAS`, `F7_KEY_PASSWORD` — см. [RELEASE-SIGNING.md](RELEASE-SIGNING.md)
|
||
|
||
## GPL corresponding source
|
||
|
||
`scripts/package-source.sh` собирает архив всего исходника (вкл. vendor/talk-android GPL, LICENSE,
|
||
NOTICE) — обязательство GPLv3 §6. Работает и вручную:
|
||
```bash
|
||
scripts/package-source.sh dist/ # → dist/f7cloud-mobile-v<ver>-<rev>-source.tar.gz
|
||
```
|
||
В CI прикладывается к каждому Gitea Release. До появления раннера — публиковать исходник
|
||
вручную этим скриптом к каждой распространяемой сборке.
|
||
|
||
## Статус — ⏸️ ОТЛОЖЕНО (2026-07-09)
|
||
|
||
Раннер развёрнут на инфре B (act_runner 0.2.13 + Node 20 + Docker + systemd), диспетчеризация
|
||
Gitea работает (джобы доходят до раннера). **НО host-исполнение act_runner 0.2.13 в нашем
|
||
окружении сломано**: криво резолвит путь к шагам и JS-экшенам —
|
||
`No such file or directory` на `.cache/act/<id>/act/workflow/0.sh` и `MODULE_NOT_FOUND` на
|
||
`actions/checkout` (задвоение `hostexecutor/.cache/act`). Обойти на уровне workflow нельзя
|
||
(ломается сам запуск шага). Workflow **запаркован** (триггер `workflow_dispatch`), сервис
|
||
раннера остановлен и отключён от автозапуска — чтобы push'и не плодили падающие прогоны.
|
||
|
||
**Рабочий путь (когда вернёмся):** Docker-исполнение вместо host —
|
||
- кастомный образ с JDK 21 + Android SDK 36 (в дефолтном ubuntu их нет);
|
||
- volume для тёплого `~/.gradle` (vendor/WebRTC);
|
||
- раннер с меткой на docker-образ (не `:host`); в docker-режиме пути корректны, JS-экшены работают;
|
||
- регистрировать repo-токеном именно из **`f7cloud_mobile`** (id 24) — при отладке «repo-токены»
|
||
ошибочно регистрировали к чужому `f7cloud_client` (id 4) или в user-scope; в Gitea осталось
|
||
~5 дублей раннера `f7-b-android` (удалить в админке).
|
||
|
||
**Пока:** сборки и релизы — **вручную** на билд-машине (боевой ключ владельца из
|
||
`/root/.f7cloud-keys/`), исходники — `scripts/package-source.sh`, Release в Gitea — через API.
|
||
Что и делаем: релиз `v0.5.123` опубликован (APK + source) вручную.
|