# Требуемые секреты репозитория (Settings → Actions → Secrets): # ANDROID_KEYSTORE — содержимое .jks файла (base64-кодированное) # ANDROID_KEYSTORE_PASSWORD # ANDROID_KEY_ALIAS # ANDROID_KEY_PASSWORD name: Release APK on: workflow_dispatch: inputs: release_notes: description: 'Текст описания релиза (Markdown), можно оставить пустым' required: false default: '' type: string jobs: build: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Verify Environment run: | java -version echo "SDK path: $ANDROID_HOME" - name: Grant execute permission for gradlew run: | chmod +x gradlew # Версия по дате (ГГГГ.ММ.ДД), при совпадении тега добавляем уникальный суффикс. - name: Generate version from date id: version run: | BASE="$(date +%Y.%m.%d)" TAG="v$BASE" SUFFIX=0 while git ls-remote --tags origin "$TAG" 2>/dev/null | grep -q "$TAG"; do SUFFIX=$((SUFFIX + 1)) TAG="v${BASE}.${SUFFIX}" done echo "version_name=$TAG" >> "$GITHUB_OUTPUT" echo "version_tag=$TAG" >> "$GITHUB_OUTPUT" echo "Generated version: $BASE" - name: Restore keystore from secret # Ключ подписи передаётся как base64-секрет и декодируется в файл. run: | if [ -n "$ANDROID_KEYSTORE" ]; then echo "$ANDROID_KEYSTORE" | base64 -d > keystore.jks echo "keystore restored" else echo "::warning::ANDROID_KEYSTORE not set, building unsigned release" fi env: ANDROID_KEYSTORE: ${{ secrets.ANDROID_KEYSTORE }} - name: Build release APK run: ./gradlew assembleRelease env: # Версия приложения — дата, сгенерированная на предыдущем шаге. # Читается в app/build.gradle.kts как versionName (для BuildConfig). APP_VERSION: ${{ steps.version.outputs.version_name }} # Переменные окружения, которые читает signingConfig в app/build.gradle.kts ANDROID_KEYSTORE_PATH: ${{ github.workspace }}/keystore.jks ANDROID_KEYSTORE_PASSWORD: ${{ secrets.ANDROID_KEYSTORE_PASSWORD }} ANDROID_KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }} ANDROID_KEY_PASSWORD: ${{ secrets.ANDROID_KEY_PASSWORD }} ORG_GRADLE_JVMARGS: '-Xmx2048m' GRADLE_OPTS: '-Dorg.gradle.daemon=false' - name: Determine APK path id: apk run: | APK=$(find app/build/outputs/apk/release -name "*.apk" ! -name "*unsigned*" ! -name "*unaligned*" | head -n 1) if [ -z "$APK" ]; then APK=$(find app/build/outputs/apk/release -name "*.apk" | head -n 1) fi echo "apk_path=$APK" >> "$GITHUB_OUTPUT" echo "APK path: $APK" - name: Create Gitea Release uses: https://gitea.com/actions/gitea-release-action@v1 with: tag_name: ${{ steps.version.outputs.version_tag }} name: ${{ steps.version.outputs.version_name }} body: ${{ github.event.inputs.release_notes }} files: ${{ steps.apk.outputs.apk_path }} token: ${{ secrets.GITEA_TOKEN }} server_url: ${{ gitea.server_url }}