name: Build Android APK on: push: tags: - "v*" workflow_dispatch: jobs: build-apk: runs-on: docker container: image: node:22-bookworm env: ANDROID_HOME: /opt/android-sdk ANDROID_SDK_ROOT: /opt/android-sdk # Force IPv4 for all JVMs (Gradle launcher, daemon, Kotlin/CMake workers). # The runner host has no working IPv6 route, so Maven Central (which has # AAAA records) was unreachable — this makes Java ignore AAAA and use IPv4. JAVA_TOOL_OPTIONS: -Djava.net.preferIPv4Stack=true GRADLE_OPTS: -Dorg.gradle.jvmargs=-Xmx4g -Dorg.gradle.daemon=false steps: - name: Checkout uses: actions/checkout@v4 - name: Resolve version from tag id: ver run: | TAG="${GITHUB_REF_NAME:-v0.0.0}" echo "tag=$TAG" >> "$GITHUB_OUTPUT" node ci/set-version.mjs "$TAG" - name: Install JDK 17 and tools run: | apt-get update apt-get install -y --no-install-recommends openjdk-17-jdk-headless unzip wget git echo "JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64" >> "$GITHUB_ENV" - name: Install Android SDK run: | set -eux mkdir -p "$ANDROID_HOME/cmdline-tools" cd /tmp wget -q https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip -O cmdtools.zip unzip -q cmdtools.zip -d "$ANDROID_HOME/cmdline-tools" mv "$ANDROID_HOME/cmdline-tools/cmdline-tools" "$ANDROID_HOME/cmdline-tools/latest" export PATH="$ANDROID_HOME/cmdline-tools/latest/bin:$PATH" yes | sdkmanager --licenses >/dev/null || true sdkmanager --install "platform-tools" \ "platforms;android-36" "platforms;android-35" \ "build-tools;36.0.0" "build-tools;35.0.0" >/dev/null echo "$ANDROID_HOME/platform-tools" >> "$GITHUB_PATH" echo "$ANDROID_HOME/cmdline-tools/latest/bin" >> "$GITHUB_PATH" - name: Install app dependencies working-directory: app run: npm install --no-audit --no-fund - name: Expo prebuild (android) working-directory: app run: npx expo prebuild -p android --no-install - name: Decode release keystore run: | echo "${{ secrets.ANDROID_KEYSTORE_B64 }}" | base64 -d > "$RUNNER_TEMP/release.keystore" - name: Build release APK working-directory: app/android env: CAMPSCAN_STORE_FILE: ${{ runner.temp }}/release.keystore CAMPSCAN_STORE_PASSWORD: ${{ secrets.ANDROID_KEYSTORE_PASSWORD }} CAMPSCAN_KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }} CAMPSCAN_KEY_PASSWORD: ${{ secrets.ANDROID_KEY_PASSWORD }} run: | chmod +x ./gradlew ./gradlew assembleRelease --init-script ../../ci/signing.gradle --no-daemon mkdir -p "$GITHUB_WORKSPACE/artifacts" cp app/build/outputs/apk/release/app-release.apk \ "$GITHUB_WORKSPACE/artifacts/camp-scan-${{ steps.ver.outputs.tag }}.apk" - name: Publish Forgejo release with APK uses: actions/forgejo-release@v2 with: direction: upload url: https://git.mowden.top repo: Beartaria/CampgroundTickets tag: ${{ steps.ver.outputs.tag }} token: ${{ secrets.GITHUB_TOKEN }} release-dir: artifacts release-notes: "Camp Scan ${{ steps.ver.outputs.tag }} — install/update via Obtainium." override: true