diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 000000000..0acc6e480 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,108 @@ +name: Make Release +on: + workflow_dispatch: + inputs: + version: + description: "Release version (Example: 1.0.0, must match app/gradle.build 'versionName')" + required: true + default: '1.0.0' + +jobs: + release-build: + runs-on: ubuntu-latest + steps: + + - name: Checkout code + uses: actions/checkout@v2 + with: + submodules: 'recursive' + + - name: Load secrets + run: | + rm ./app/google-services.json + echo $GSERVICES > ./app/google-services.json + rm ./app/src/main/res/values/mapbox-token.xml + echo "\n $MAPBOXTOKEN\n" > ./app/src/main/res/values/mapbox-token.xml + mkdir -p ~/.gradle + echo "MAPBOX_DOWNLOADS_TOKEN=$MAPBOXTOKEN" >> ~/.gradle/gradle.properties + echo $KEYSTORE | base64 -di > ./app/$KEYSTORE_FILENAME + echo "$KEYSTORE_PROPERTIES" > ./keystore.properties + env: + GSERVICES: ${{ secrets.GSERVICES }} + MAPBOXTOKEN: ${{ secrets.MAPBOXTOKEN }} + KEYSTORE: ${{ secrets.KEYSTORE }} + KEYSTORE_FILENAME: ${{ secrets.KEYSTORE_FILENAME }} + KEYSTORE_PROPERTIES: ${{ secrets.KEYSTORE_PROPERTIES }} + + - name: Mock curfirmware version for CI + run: | + rm ./app/src/main/res/values/curfirmwareversion.xml + cp ./app/special/curfirmwareversion.xml ./app/src/main/res/values/ + - name: Set up JDK 11 + uses: actions/setup-java@v2 + with: + java-version: 11 + distribution: 'adopt' + # Note: we don't use caches on release builds because we don't want to accidentally not have a virgin build machine + + - name: Fetch firmware latest tag_name + id: firmware_latest + uses: gregziegan/fetch-latest-release@v2.0.0 + with: + repo_path: meshtastic/Meshtastic-device + github_token: ${{ secrets.GITHUB_TOKEN }} + + - name: Get version strings from tags + run: echo "FIRMWARE_VERSION=$(echo ${{ steps.firmware_latest.outputs.tag_name }}|sed -e 's/^v//')" >> $GITHUB_ENV + + - name: Pull firmware latest + uses: dsaltares/fetch-gh-release-asset@master + with: + repo: meshtastic/Meshtastic-device + file: firmware-${{ env.FIRMWARE_VERSION }}.zip + target: firmware.zip + token: ${{ secrets.GITHUB_TOKEN }} + + - name: Unzip firmware into assets/firmware + run: | + rm -f app/src/main/assets/firmware + mkdir -p app/src/main/assets/firmware + unzip -qq firmware.zip 'firmware-*.bin' 'spiffs-*.bin' -d app/src/main/assets/firmware + rm firmware.zip + - name: Validate Gradle wrapper + uses: gradle/wrapper-validation-action@v1 + + - name: Build Release + run: ./gradlew assembleRelease + +# - name: Upload Release to Play Store +# uses: r0adkll/upload-google-play@v1 +# with: +# serviceAccountJsonPlainText: ${{ secrets.GSERVICES }} +# packageName: # TODO put your package name here +# releaseFiles: app/build/outputs/bundle/release/app-release.apk +# track: # TODO specify track here + + - name: Create GitHub release + uses: actions/create-release@v1 + id: create_release + with: + draft: true + prerelease: true + release_name: ${{ github.event.inputs.version}} alpha + tag_name: ${{ github.event.inputs.version}} + body: | + Autogenerated by github action, developer should edit as required before publishing... + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Add 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/release/app-release.apk + asset_name: app-release-${{ github.event.inputs.version}}.apk + asset_content_type: application/zip + diff --git a/app/build.gradle b/app/build.gradle index f76760751..2f795e8be 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -20,16 +20,21 @@ unMock { keep "android.util.Base64" } +def keystorePropertiesFile = rootProject.file("keystore.properties") +def keystoreProperties = new Properties() +if (keystorePropertiesFile.exists()) { + keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) +} + android { - /* signingConfigs { release { - storeFile "$meshtasticKeystoreFile" - keyAlias 'upload' - storePassword "$meshtasticKeystorePassword" - keyPassword "$meshtasticKeyPassword" + keyAlias keystoreProperties['keyAlias'] + keyPassword keystoreProperties['keyPassword'] + storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null + storePassword keystoreProperties['storePassword'] } - } */ + } compileSdkVersion 31 // leave undefined to use version plugin wants // buildToolsVersion "30.0.2" // Note: 30.0.2 doesn't yet work on Github actions CI @@ -46,6 +51,9 @@ android { } buildTypes { release { + if (keystoreProperties['storeFile']) { + signingConfig signingConfigs.release + } minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'