name: Release on: push: tags: - 'v*' jobs: build_release_apk: name: "Build Release APK" runs-on: ubuntu-latest timeout-minutes: 120 permissions: contents: write steps: - name: Enable KVM group perms run: | echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules sudo udevadm control --reload-rules sudo udevadm trigger --name-match=kvm ls /dev/kvm - name: Checkout uses: actions/checkout@v4 - name: Grant execute permission to Gradle wrapper run: chmod +x ./gradlew - name: Validate Gradle Wrapper uses: gradle/actions/wrapper-validation@v3 - name: Copy CI gradle.properties run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties - name: Setup JDK 17 uses: actions/setup-java@v4 with: distribution: 'zulu' java-version: 17 - name: Setup Gradle uses: gradle/actions/setup-gradle@v5 with: cache-encryption-key: ${{ secrets.GRADLE_ENCRYPTION_KEY }} - name: Setup Android SDK uses: android-actions/setup-android@v3 - name: Accept licenses run: yes | sdkmanager --licenses || true - name: Read version info from build.gradle.kts id: version run: | VERSION_NAME=$(sed -n 's/.*versionName *= *"\(.*\)".*/\1/p' app/build.gradle.kts) VERSION_CODE=$(sed -n 's/.*versionCode *= *\([0-9]\+\).*/\1/p' app/build.gradle.kts) echo "version_name=${VERSION_NAME}" >> $GITHUB_OUTPUT echo "version_code=${VERSION_CODE}" >> $GITHUB_OUTPUT - name: Check if tag matches versionName run: | CLEAN_TAG="${GITHUB_REF_NAME#v}" if [ "${CLEAN_TAG}" != "${{ steps.version.outputs.version_name }}" ]; then echo "❌ Tag does not match versionName in build.gradle.kts" echo "Tag: ${CLEAN_TAG}" echo "Version Name: ${{ steps.version.outputs.version_name }}" exit 1 fi echo "✅ Tag matches versionName" - name: Check if metadata file exists run: | FILE_PATH="fastlane/metadata/android/en-US/changelogs/${{ steps.version.outputs.version_code }}.txt" if [ ! -f "$FILE_PATH" ]; then echo "❌ Missing file for versionCode: $FILE_PATH" exit 1 fi echo "✅ Found metadata file: $FILE_PATH" - name: Build release run: ./gradlew :app:assembleRelease - name: Upload mapping file uses: actions/upload-artifact@v4 with: name: mapping-${{ github.ref_name }} path: app/build/outputs/mapping/release/mapping.txt - name: Sign release APK uses: r0adkll/sign-android-release@v1 id: sign_release_apk with: releaseDirectory: app/build/outputs/apk/release signingKeyBase64: ${{ secrets.SIGNING_KEY_BASE64 }} alias: ${{ secrets.SIGNING_KEY_ALIAS }} keyStorePassword: ${{ secrets.SIGNING_KEY_STORE_PASSWORD }} keyPassword: ${{ secrets.SIGNING_KEY_PASSWORD }} env: BUILD_TOOLS_VERSION: "34.0.0" - name: Rename signed files run: | mv ${{steps.sign_release_apk.outputs.signedReleaseFile}} app/build/outputs/apk/release/EblanLauncher-${{ github.ref_name }}.apk - name: Release uses: softprops/action-gh-release@v2 if: startsWith(github.ref, 'refs/tags/') with: prerelease: true generate_release_notes: true files: | app/build/outputs/apk/release/EblanLauncher-${{ github.ref_name }}.apk