name: Release Build on: workflow_dispatch: inputs: tag: description: 'Release Tag' required: true upload: description: 'Upload: If want ignore' required: false publish: description: 'Publish: If want ignore' required: false play: description: 'Play: If want ignore' required: false jobs: check: name: Check Access runs-on: ubuntu-latest steps: - name: "Check access" uses: "lannonbr/repo-permission-check-action@2.0.2" with: permission: "write" env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} libcore: name: Native Build (LibCore) runs-on: ubuntu-latest needs: check steps: - name: Checkout uses: actions/checkout@v3 - name: Fetch Status run: git submodule status library/core > libcore_status - name: LibCore Cache id: cache uses: actions/cache@v3 with: path: | app/libs/libcore.aar key: ${{ hashFiles('.github/workflows/*', 'bin/lib/core/*', 'libcore_status') }} - name: Get latest go version id: version if: steps.cache.outputs.cache-hit != 'true' run: | echo ::set-output name=go_version::$(curl -s https://raw.githubusercontent.com/actions/go-versions/main/versions-manifest.json | grep -oE '"version": "[0-9]{1}.[0-9]{1,}(.[0-9]{1,})?"' | head -1 | cut -d':' -f2 | sed 's/ //g; s/"//g') - name: Setup Go uses: actions/setup-go@v3 if: steps.cache.outputs.cache-hit != 'true' with: # Bug: https://github.com/golang/go/issues/58426 # go-version: ${{ steps.version.outputs.go_version }} go-version: 1.19.8 - name: Gradle cache uses: actions/cache@v3 if: steps.cache.outputs.cache-hit != 'true' with: path: ~/.gradle key: native-${{ hashFiles('**/*.gradle.kts') }} - name: Native Build if: steps.cache.outputs.cache-hit != 'true' run: | echo "sdk.dir=${ANDROID_HOME}" > local.properties echo "ndk.dir=${ANDROID_HOME}/ndk/25.0.8775105" >> local.properties ./run lib core build: name: Gradle Build runs-on: ubuntu-latest needs: - libcore steps: - name: Checkout uses: actions/checkout@v3 - name: Fetch Status run: | git submodule status library/core > libcore_status - name: LibCore Cache uses: actions/cache@v3 with: path: | app/libs/libcore.aar key: ${{ hashFiles('.github/workflows/*', 'bin/lib/core/*', 'libcore_status') }} - name: Gradle cache uses: actions/cache@v3 with: path: ~/.gradle key: gradle-${{ hashFiles('**/*.gradle.kts') }} - name: Release Build env: BUILD_PLUGIN: none run: | echo "sdk.dir=${ANDROID_HOME}" > local.properties echo "ndk.dir=${ANDROID_HOME}/ndk/25.0.8775105" >> local.properties export LOCAL_PROPERTIES="${{ secrets.LOCAL_PROPERTIES }}" ./run init action library ./gradlew app:assembleOssRelease APK=$(find app/build/outputs/apk -name '*arm64-v8a*.apk') APK=$(dirname "$APK") echo "APK=$APK" >> $GITHUB_ENV - uses: actions/upload-artifact@v3 with: name: APKs path: ${{ env.APK }} - uses: actions/upload-artifact@v3 with: name: "SHA256-ARM ${{ env.SHA256_ARM }}" path: ${{ env.SUM_ARM }} - uses: actions/upload-artifact@v3 with: name: "SHA256-ARM64 ${{ env.SHA256_ARM64 }}" path: ${{ env.SUM_ARM64 }} - uses: actions/upload-artifact@v3 with: name: "SHA256-X64 ${{ env.SHA256_X64 }}" path: ${{ env.SUM_X64 }} - uses: actions/upload-artifact@v3 with: name: "SHA256-X86 ${{ env.SHA256_X86 }}" path: ${{ env.SUM_X86 }} publish: name: Publish Release if: github.event.inputs.publish != 'y' runs-on: ubuntu-latest needs: build steps: - name: Checkout uses: actions/checkout@v3 - name: Donwload Artifacts uses: actions/download-artifact@v3 with: name: APKs path: artifacts - name: Release run: | wget -O ghr.tar.gz https://github.com/tcnksm/ghr/releases/download/v0.13.0/ghr_v0.13.0_linux_amd64.tar.gz tar -xvf ghr.tar.gz mv ghr*linux_amd64/ghr . mkdir apks find artifacts -name "*.apk" -exec cp {} apks \; find artifacts -name "*.sha256sum.txt" -exec cp {} apks \; ./ghr -delete -t "${{ github.token }}" -n "${{ github.event.inputs.tag }}" "${{ github.event.inputs.tag }}" apks upload: name: Upload Release if: github.event.inputs.upload != 'y' runs-on: ubuntu-latest needs: build steps: - name: Donwload Artifacts uses: actions/download-artifact@v3 with: name: APKs path: artifacts - name: Release run: | mkdir apks find artifacts -name "*.apk" -exec cp {} apks \; function upload() { for apk in $@; do echo ">> Uploading $apk" curl https://api.telegram.org/bot${{ secrets.TELEGRAM_TOKEN }}/sendDocument \ -X POST \ -F chat_id="${{ secrets.TELEGRAM_CHANNEL }}" \ -F document="@$apk" \ --silent --show-error --fail >/dev/null & done for job in $(jobs -p); do wait $job || exit 1 done } upload apks/* play: name: Publish to Play Store if: github.event.inputs.play != 'y' runs-on: ubuntu-latest needs: - libcore steps: - name: Checkout uses: actions/checkout@v3 - name: Fetch Status run: | git submodule status library/core > libcore_status - name: LibCore Cache uses: actions/cache@v3 with: path: | app/libs/libcore.aar key: ${{ hashFiles('.github/workflows/*', 'bin/lib/core/*', 'libcore_status') }} - name: Gradle cache uses: actions/cache@v3 with: path: ~/.gradle key: gradle-${{ hashFiles('**/*.gradle.kts') }} - name: Checkout Library run: | git submodule update --init 'app/*' - name: Release Build env: BUILD_PLUGIN: none run: | echo "sdk.dir=${ANDROID_HOME}" > local.properties echo "ndk.dir=${ANDROID_HOME}/ndk/25.0.8775105" >> local.properties export LOCAL_PROPERTIES="${{ secrets.LOCAL_PROPERTIES }}" cat > service_account_credentials.json << EOF ${{ secrets.ANDROID_PUBLISHER_CREDENTIALS }}" EOF ./run init action library ./gradlew app:publishPlayReleaseBundle