# 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). Регистрация (нужен registration-токен из Gitea → Settings → Actions → Runners, **права Gitea-админа**): ```bash # на машине раннера (инфра B): act_runner register --instance https://git.f7cloud.ru --token --labels f7-android act_runner daemon ``` Метка `f7-android` соответствует `runs-on: [self-hosted, f7-android]` в workflow. ## 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--source.tar.gz ``` В CI прикладывается к каждому Gitea Release. До появления раннера — публиковать исходник вручную этим скриптом к каждой распространяемой сборке. ## Статус Workflow и скрипт готовы и в репо. **Не активны, пока не зарегистрирован раннер** (инфра-шаг ячейки B, нужен Gitea-админ для токена). До активации: сборки — вручную на билд-машине, исходники — скриптом.