name: CI # Активируется, когда на инфре B зарегистрирован self-hosted act_runner с меткой `f7-android` # (JDK 21 + Android SDK 36 — как на билд-машине). Пока раннера нет — джобы ждут исполнителя. # Регистрация раннера — инфра-шаг ячейки B (см. docs/CI.md). on: push: branches: [main] tags: ['v*'] pull_request: env: JAVA_HOME: /usr/lib/jvm/java-21-openjdk-amd64 ANDROID_HOME: /opt/android-sdk GRADLE_OPTS: "-Dorg.gradle.daemon=false" jobs: verify: # lint + unit-тесты + debug-сборка на каждый push в main и на PR runs-on: f7-android if: github.ref_type != 'tag' steps: - uses: actions/checkout@v4 - name: Статанализ (detekt + ktlint-форматирование) run: ./gradlew detekt --no-daemon - name: Unit-тесты run: ./gradlew testDebugUnitTest --no-daemon - name: Android Lint (release) run: ./gradlew :app:lintRelease --no-daemon - name: Debug-сборка (артефакт для QA) run: ./gradlew :app:assembleDebug --no-daemon - name: Публикация debug-APK uses: actions/upload-artifact@v3 with: name: f7cloud-mobile-debug path: app/build/outputs/apk/debug/*.apk release: # по тегу v*: подписанный release + архив исходников (GPL corresponding source) в Gitea Release runs-on: f7-android if: github.ref_type == 'tag' steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Развернуть keystore из secret run: | echo "${{ secrets.F7_KEYSTORE_BASE64 }}" | base64 -d > "$RUNNER_TEMP/release.jks" - name: Release-сборка (подписанная) env: F7_KEYSTORE_FILE: ${{ runner.temp }}/release.jks F7_KEYSTORE_PASSWORD: ${{ secrets.F7_KEYSTORE_PASSWORD }} F7_KEY_ALIAS: ${{ secrets.F7_KEY_ALIAS }} F7_KEY_PASSWORD: ${{ secrets.F7_KEY_PASSWORD }} run: ./gradlew :app:assembleRelease --no-daemon - name: Архив исходников (GPL corresponding source) run: bash scripts/package-source.sh "$RUNNER_TEMP/dist" - name: Публикация Gitea Release (APK + исходники) uses: akkuman/gitea-release-action@v1 with: files: | app/build/outputs/apk/release/*.apk ${{ runner.temp }}/dist/*-source.tar.gz