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.0" 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@v2 - name: Fetch Status run: git submodule status library/core > libcore_status - name: LibCore Cache id: cache uses: actions/cache@v2 with: path: | app/libs/libcore.aar key: ${{ hashFiles('.github/workflows/*', 'bin/lib/core/*', 'libcore_status') }} - name: Install Golang uses: actions/setup-go@v2 if: steps.cache.outputs.cache-hit != 'true' with: go-version: 1.17.1 - name: Gradle cache uses: actions/cache@v2 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/21.4.7075529" >> local.properties ./run lib core shadowsocks: name: Native Build (shadowsocks-rust) runs-on: ubuntu-latest needs: check steps: - name: Checkout uses: actions/checkout@v2 - name: Fetch Status run: git submodule status 'library/shadowsocks/*' > shadowsocks_status - name: Shadowsocks Cache id: cache uses: actions/cache@v2 with: path: | app/libs/shadowsocks.aar key: ${{ hashFiles('library/shadowsocks/build.gradle.kts', 'shadowsocks_status') }} - name: Install Rust if: steps.cache.outputs.cache-hit != 'true' run: ./run init action shadowsocks - name: Gradle cache uses: actions/cache@v2 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' env: BUILD_PLUGIN: none run: | echo "sdk.dir=${ANDROID_HOME}" > local.properties echo "ndk.dir=${ANDROID_HOME}/ndk/21.4.7075529" >> local.properties ./run init action library ./run lib shadowsocks shadowsocks_libev: name: Native Build (shadowsocks-libev) runs-on: ubuntu-latest needs: check steps: - name: Checkout uses: actions/checkout@v2 - name: Fetch Status run: git submodule status 'library/shadowsocks-libev/*' > shadowsocks_status - name: Shadowsocks Cache id: cache uses: actions/cache@v2 with: path: | app/libs/shadowsocks-libev.aar key: ${{ hashFiles('library/shadowsocks-libev/build.gradle.kts', 'shadowsocks_status') }} - name: Gradle cache uses: actions/cache@v2 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' env: BUILD_PLUGIN: none run: | echo "sdk.dir=${ANDROID_HOME}" > local.properties echo "ndk.dir=${ANDROID_HOME}/ndk/21.4.7075529" >> local.properties ./run init action library ./run lib shadowsocks_libev build: name: Gradle Build runs-on: ubuntu-latest needs: - libcore - shadowsocks - shadowsocks_libev steps: - name: Checkout uses: actions/checkout@v2 - name: Fetch Status run: | git submodule status 'library/shadowsocks/*' > shadowsocks_status git submodule status 'library/shadowsocks-libev/*' > shadowsocks_libev_status git submodule status library/core > libcore_status - name: LibCore Cache uses: actions/cache@v2 with: path: | app/libs/libcore.aar key: ${{ hashFiles('.github/workflows/*', 'bin/lib/core/*', 'libcore_status') }} - name: Shadowsocks Cache uses: actions/cache@v2 with: path: | app/libs/shadowsocks.aar key: ${{ hashFiles('library/shadowsocks/build.gradle.kts', 'shadowsocks_status') }} - name: Shadowsocks (libev) Cache uses: actions/cache@v2 with: path: | app/libs/shadowsocks-libev.aar key: ${{ hashFiles('library/shadowsocks-libev/build.gradle.kts', 'shadowsocks_libev_status') }} - name: Gradle cache uses: actions/cache@v2 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/21.4.7075529" >> 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@v2 with: name: APKs path: ${{ env.APK }} - uses: actions/upload-artifact@v2 with: name: "SHA256-ARM ${{ env.SHA256_ARM }}" path: ${{ env.SUM_ARM }} - uses: actions/upload-artifact@v2 with: name: "SHA256-ARM64 ${{ env.SHA256_ARM64 }}" path: ${{ env.SUM_ARM64 }} - uses: actions/upload-artifact@v2 with: name: "SHA256-X64 ${{ env.SHA256_X64 }}" path: ${{ env.SUM_X64 }} - uses: actions/upload-artifact@v2 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@v2 - name: Donwload Artifacts uses: actions/download-artifact@v2 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@v2 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 - shadowsocks - shadowsocks_libev steps: - name: Checkout uses: actions/checkout@v2 - name: Fetch Status run: | git submodule status 'library/shadowsocks/*' > shadowsocks_status git submodule status 'library/shadowsocks-libev/*' > shadowsocks_libev_status git submodule status library/core > libcore_status - name: LibCore Cache uses: actions/cache@v2 with: path: | app/libs/libcore.aar key: ${{ hashFiles('.github/workflows/*', 'bin/lib/core/*', 'libcore_status') }} - name: Shadowsocks Cache uses: actions/cache@v2 with: path: | app/libs/shadowsocks.aar key: ${{ hashFiles('library/shadowsocks/build.gradle.kts', 'shadowsocks_status') }} - name: Shadowsocks (libev) Cache uses: actions/cache@v2 with: path: | app/libs/shadowsocks-libev.aar key: ${{ hashFiles('library/shadowsocks-libev/build.gradle.kts', 'shadowsocks_libev_status') }} - name: Gradle cache uses: actions/cache@v2 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/21.4.7075529" >> 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