diff --git a/.github/workflows/parallel-release b/.github/workflows/parallel-release new file mode 100644 index 000000000..3b76f67a4 --- /dev/null +++ b/.github/workflows/parallel-release @@ -0,0 +1,132 @@ +name: Make Release + +on: + workflow_dispatch: + +jobs: + setup: + runs-on: ubuntu-latest + outputs: + versionName: ${{ steps.get_version.outputs.versionName }} + versionCode: ${{ steps.get_version.outputs.versionCode }} + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + submodules: 'recursive' + + - name: Get `versionCode` & `versionName` + id: get_version + run: | + echo "versionCode=$(grep -oP 'versionCode \K\d+' ./app/build.gradle)" >> $GITHUB_ENV + echo "versionName=$(grep -oP 'versionName \"\K[^\"]+' ./app/build.gradle)" >> $GITHUB_ENV + echo "versionCode=$(grep -oP 'versionCode \K\d+' ./app/build.gradle)" >> $GITHUB_OUTPUT + echo "versionName=$(grep -oP 'versionName \"\K[^\"]+' ./app/build.gradle)" >> $GITHUB_OUTPUT + + - name: Validate Gradle wrapper + uses: gradle/actions/wrapper-validation@v4 + + - 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' + + - name: Upload workspace + uses: actions/upload-artifact@v4 + with: + name: workspace + path: ./ + retention-days: 1 + + - name: Create GitHub release + id: create_release + uses: actions/create-release@v1 + with: + draft: true + prerelease: true + release_name: Meshtastic Android ${{ steps.get_version.outputs.versionName }} alpha + tag_name: ${{ steps.get_version.outputs.versionName }} + body: ${{ steps.get_version.outputs.versionName }} alpha + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + fdroid_build: + runs-on: ubuntu-latest + needs: setup + steps: + - name: Download workspace + uses: actions/download-artifact@v4 + with: + name: workspace + + - name: Build F-Droid release + run: ./gradlew assembleFdroidRelease + + - name: Upload F-Droid APK to release + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ needs.setup.outputs.create_release_upload_url || needs.setup.outputs.upload_url }} + asset_path: app/build/outputs/apk/fdroid/release/app-fdroid-release.apk + asset_name: fdroidRelease-${{ needs.setup.outputs.versionName }}.apk + asset_content_type: application/zip + + - name: Upload version_info.txt to release + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ needs.setup.outputs.create_release_upload_url || needs.setup.outputs.upload_url }} + asset_path: version_info.txt + asset_name: version_info.txt + asset_content_type: text/plain + + playstore_build: + runs-on: ubuntu-latest + needs: setup + steps: + - name: Download workspace + uses: actions/download-artifact@v4 + with: + name: workspace + + - name: Enable Crashlytics + run: sed -i 's/useCrashlytics = false/useCrashlytics = true/g' ./build.gradle + + - name: Build Play Store release + run: ./gradlew bundleGoogleRelease assembleGoogleRelease + + - name: Upload Play Store AAB to release + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ needs.setup.outputs.create_release_upload_url || needs.setup.outputs.upload_url }} + asset_path: app/build/outputs/bundle/googleRelease/app-google-release.aab + asset_name: googleRelease-${{ needs.setup.outputs.versionName }}.aab + asset_content_type: application/zip + + - name: Upload Play Store APK to release + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ needs.setup.outputs.create_release_upload_url || needs.setup.outputs.upload_url }} + asset_path: app/build/outputs/apk/google/release/app-google-release.apk + asset_name: googleRelease-${{ needs.setup.outputs.versionName }}.apk + asset_content_type: application/zip