name: Make Release

on:
  workflow_dispatch:

jobs:

  release-build:
    runs-on: ubuntu-latest
    steps:

    - name: Checkout code
      uses: actions/checkout@v4
      with:
        submodules: 'recursive'

    - name: Get `versionCode` & `versionName`
      run: |
        echo "versionCode=$(grep -oP 'versionCode \K\d+' ./app/build.gradle)" >> $GITHUB_ENV
        echo "versionName=$(grep -oP 'versionName \"\K[^\"]+' ./app/build.gradle)" >> $GITHUB_ENV

    - name: Validate Gradle wrapper
      uses: gradle/wrapper-validation-action@v2

    - name: Load secrets
      run: |
        rm ./app/google-services.json
        echo $GSERVICES > ./app/google-services.json
        echo $KEYSTORE | base64 -di > ./app/$KEYSTORE_FILENAME
        echo "$KEYSTORE_PROPERTIES" > ./keystore.properties
        echo -e "versionCode=$versionCode\nversionName=$versionName" > ./version_info.txt
      env:
          GSERVICES: ${{ secrets.GSERVICES }}
          KEYSTORE: ${{ secrets.KEYSTORE }}
          KEYSTORE_FILENAME: ${{ secrets.KEYSTORE_FILENAME }}
          KEYSTORE_PROPERTIES: ${{ secrets.KEYSTORE_PROPERTIES }}

    - name: Set up JDK 17
      uses: actions/setup-java@v4
      with:
        java-version: '17'
        distribution: 'zulu'
        # Note: we don't use caches on release builds because we don't want to accidentally not have a virgin build machine

    - name: Build F-Droid release
      run: ./gradlew assembleFdroidRelease

    - name: Enable Crashlytics
      run: sed -i 's/useCrashlytics = false/useCrashlytics = true/g' ./build.gradle

    - name: Build Play Store release
      run: ./gradlew bundleGoogleRelease assembleGoogleRelease

    - name: Create GitHub release
      uses: actions/create-release@v1
      id: create_release
      with:
        draft: true
        prerelease: true
        release_name: Meshtastic Android ${{ env.versionName }} alpha
        tag_name: ${{ env.versionName }}
        body: |
          Autogenerated by github action, developer should edit as required before publishing...
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

    - name: Add F-Droid APK to release
      uses: actions/upload-release-asset@v1
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      with:
        upload_url: ${{ steps.create_release.outputs.upload_url }}
        asset_path: app/build/outputs/apk/fdroid/release/app-fdroid-release.apk
        asset_name: fdroidRelease-${{ env.versionName }}.apk
        asset_content_type: application/zip

    - name: Add Play Store AAB to release
      uses: actions/upload-release-asset@v1
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      with:
        upload_url: ${{ steps.create_release.outputs.upload_url }}
        asset_path: app/build/outputs/bundle/googleRelease/app-google-release.aab
        asset_name: googleRelease-${{ env.versionName }}.aab
        asset_content_type: application/zip

    - name: Add Play Store APK to release
      uses: actions/upload-release-asset@v1
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      with:
        upload_url: ${{ steps.create_release.outputs.upload_url }}
        asset_path: app/build/outputs/apk/google/release/app-google-release.apk
        asset_name: googleRelease-${{ env.versionName }}.apk
        asset_content_type: application/zip

    # https://github.com/f-droid/fdroiddata/blob/master/metadata/com.geeksville.mesh.yml#L34
    - name: Add `version_info.txt` to release
      uses: actions/upload-release-asset@v1
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      with:
        upload_url: ${{ steps.create_release.outputs.upload_url }}
        asset_path: version_info.txt
        asset_name: version_info.txt
        asset_content_type: text/plain
