Merge pull request #152 from TargetMisser/WIP #117
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Build & Release APK | |
| on: | |
| push: | |
| tags: | |
| - 'v*' | |
| branches: | |
| - main | |
| workflow_dispatch: | |
| inputs: | |
| ref: | |
| description: 'Branch o commit da buildare' | |
| required: false | |
| default: 'main' | |
| version_override: | |
| description: 'Tag release (es. v2.6.2). Vuoto = legge app.json' | |
| required: false | |
| default: '' | |
| permissions: | |
| contents: write | |
| env: | |
| # Force Node 24 for any JS-based actions still declaring Node 20 in their action.yml. | |
| # Node 20 is being removed from runners on 2026-09-16. | |
| FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: 'true' | |
| jobs: | |
| build: | |
| runs-on: ubuntu-latest | |
| env: | |
| RELEASE_STORE_FILE: ${{ github.workspace }}/android/app/release.keystore | |
| RELEASE_STORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }} | |
| RELEASE_KEY_ALIAS: ${{ secrets.KEY_ALIAS }} | |
| RELEASE_KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} | |
| steps: | |
| - name: Compute checkout ref | |
| id: co | |
| run: | | |
| if [[ -n "${{ github.event.inputs.ref }}" ]]; then | |
| echo "ref=${{ github.event.inputs.ref }}" >> "$GITHUB_OUTPUT" | |
| elif [[ "${{ github.ref }}" == refs/tags/* ]]; then | |
| echo "ref=${{ github.ref_name }}" >> "$GITHUB_OUTPUT" | |
| else | |
| echo "ref=main" >> "$GITHUB_OUTPUT" | |
| fi | |
| - name: Checkout | |
| uses: actions/checkout@v5 | |
| with: | |
| ref: ${{ steps.co.outputs.ref }} | |
| - name: Setup Node | |
| uses: actions/setup-node@v5 | |
| with: | |
| node-version: 22 | |
| cache: npm | |
| - name: Setup Java | |
| uses: actions/setup-java@v5 | |
| with: | |
| distribution: temurin | |
| java-version: 21 | |
| - name: Cache Gradle | |
| uses: actions/cache@v5 | |
| with: | |
| path: | | |
| ~/.gradle/caches | |
| ~/.gradle/wrapper | |
| key: gradle-${{ hashFiles('android/**/*.gradle*', 'android/gradle.properties') }} | |
| restore-keys: gradle- | |
| - name: Setup Android SDK | |
| uses: android-actions/setup-android@v3 | |
| - name: Install SDK components | |
| run: | | |
| echo "y" | sdkmanager \ | |
| "ndk;27.1.12297006" \ | |
| "build-tools;37.0.0" \ | |
| "platforms;android-37.0" \ | |
| "cmake;3.22.1" | |
| - name: Install dependencies | |
| run: npm install --legacy-peer-deps | |
| - name: Fix expo-modules-core Gradle bugs | |
| run: | | |
| FILE="node_modules/expo-modules-core/android/build.gradle" | |
| sed -i "s|apply plugin: 'com.android.library'|// Fix: project-level re-declaration\ndef _coreFeatures = project.findProperty(\"coreFeatures\") ?: []\next.shouldIncludeCompose = _coreFeatures.contains(\"compose\")\n\napply plugin: 'com.android.library'|" "$FILE" | |
| sed -i 's/^\s*compose shouldIncludeCompose\s*$/ compose = shouldIncludeCompose/' "$FILE" | |
| - name: Compute release tag | |
| id: meta | |
| run: | | |
| VERSION=$(node -p "require('./app.json').expo.version") | |
| if [[ -n "${{ github.event.inputs.version_override }}" ]]; then | |
| TAG="${{ github.event.inputs.version_override }}" | |
| elif [[ "${{ github.ref }}" == refs/tags/* ]]; then | |
| TAG="${{ github.ref_name }}" | |
| else | |
| TAG="v${VERSION}" | |
| fi | |
| echo "version=$VERSION" >> "$GITHUB_OUTPUT" | |
| echo "tag=$TAG" >> "$GITHUB_OUTPUT" | |
| - name: Make gradlew executable | |
| run: chmod +x android/gradlew | |
| - name: Restore release keystore | |
| run: | | |
| if [[ -z "${{ secrets.KEYSTORE_BASE64 }}" ]]; then | |
| echo "Missing KEYSTORE_BASE64 secret" | |
| exit 1 | |
| fi | |
| for var in RELEASE_STORE_PASSWORD RELEASE_KEY_ALIAS RELEASE_KEY_PASSWORD; do | |
| if [[ -z "${!var}" ]]; then | |
| echo "Missing $var secret" | |
| exit 1 | |
| fi | |
| done | |
| mkdir -p android/app | |
| echo "${{ secrets.KEYSTORE_BASE64 }}" | base64 -d > "$RELEASE_STORE_FILE" | |
| - name: Build release APK | |
| run: | | |
| cd android | |
| ./gradlew :app:assembleRelease \ | |
| --no-daemon \ | |
| -Pandroid.overridePathCheck=true | |
| env: | |
| ANDROID_HOME: ${{ env.ANDROID_SDK_ROOT }} | |
| GRADLE_OPTS: "-Xmx4g -XX:MaxMetaspaceSize=512m" | |
| - name: Rename APK | |
| run: | | |
| APK=$(find android/app/build/outputs/apk/release -name "*.apk" -type f | head -1) | |
| DEST="AeroStaffPro-${{ steps.meta.outputs.tag }}.apk" | |
| cp "$APK" "$DEST" | |
| echo "apk=$DEST" >> "$GITHUB_ENV" | |
| - name: Create GitHub Release | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| tag_name: ${{ steps.meta.outputs.tag }} | |
| name: "AeroStaff Pro ${{ steps.meta.outputs.tag }}" | |
| generate_release_notes: true | |
| files: ${{ env.apk }} | |
| draft: false | |
| prerelease: false |