From fa7ad2f4dc831eab4a30c9c197ef1aee0d3c53b5 Mon Sep 17 00:00:00 2001 From: Next Alone <12210746+NextAlone@users.noreply.github.com> Date: Tue, 30 Jan 2024 17:14:24 +0800 Subject: [PATCH] github: add pr workflow Signed-off-by: Next Alone <12210746+NextAlone@users.noreply.github.com> --- .github/workflows/pr.yml | 331 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 331 insertions(+) create mode 100644 .github/workflows/pr.yml diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml new file mode 100644 index 0000000000..6638aaaba5 --- /dev/null +++ b/.github/workflows/pr.yml @@ -0,0 +1,331 @@ +name: Pull request + +on: + pull_request: + types: [opened, reopened] + +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 }} + ffmpeg: + name: Native Build (FFmpeg) + runs-on: ubuntu-latest + needs: check + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Fetch Status + run: | + sed -i 's/\/\///g' settings.gradle + git submodule status TMessagesProj/jni/ffmpeg > ffmpeg_status + git submodule status TMessagesProj/jni/libvpx > libvpx_status + - name: FFmpeg Cache + id: cache + uses: actions/cache@v2 + with: + path: | + TMessagesProj/jni/ffmpeg/build + TMessagesProj/jni/libvpx/build + key: ${{ hashFiles('ffmpeg_status', 'libvpx_status', 'TMessagesProj/jni/*ffmpeg*.sh', 'TMessagesProj/jni/*libvpx*.sh', 'TMessagesProj/jni/patches/ffmpeg/*') }} + - name: Setup Android SDK Tools + uses: android-actions/setup-android@v2 + if: steps.cache.outputs.cache-hit != 'true' + - name: Install NDK + if: steps.cache.outputs.cache-hit != 'true' + run: | + echo "y" | sdkmanager --install "ndk;21.4.7075529" --sdk_root=${ANDROID_SDK_ROOT} &> /dev/null + echo "sdk.dir=${ANDROID_HOME}" > local.properties + echo "ndk.dir=${ANDROID_HOME}/ndk/21.4.7075529" >> local.properties + - name: Native Build + if: steps.cache.outputs.cache-hit != 'true' + run: | + sudo apt-get install yasm -y + ./run init libs libvpx + ./run init libs ffmpeg + boringssl: + name: Native Build (BoringSSL) + runs-on: ubuntu-latest + needs: check + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Fetch Status + run: | + sed -i 's/\/\///g' settings.gradle + git submodule status TMessagesProj/jni/boringssl > boringssl_status + - name: BoringSSL Cache + id: cache + uses: actions/cache@v2 + with: + path: | + TMessagesProj/jni/boringssl/build + key: ${{ hashFiles('boringssl_status') }} + - name: Setup Android SDK Tools + uses: android-actions/setup-android@v2 + if: steps.cache.outputs.cache-hit != 'true' + - name: Install NDK + if: steps.cache.outputs.cache-hit != 'true' + run: | + echo "y" | sdkmanager --install "ndk;21.4.7075529" --sdk_root=${ANDROID_SDK_ROOT} &> /dev/null + echo "sdk.dir=${ANDROID_HOME}" > local.properties + echo "ndk.dir=${ANDROID_HOME}/ndk/21.4.7075529" >> local.properties + - name: Native Build + if: steps.cache.outputs.cache-hit != 'true' + run: | + ./run init action boringssl + ./run init libs boringssl + native: + name: Native Build (Telegram) + runs-on: ubuntu-latest + needs: + - ffmpeg + - boringssl + strategy: + matrix: + flavor: + - armeabi-v7a + - arm64-v8a + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Fetch Status + run: | + sed -i 's/\/\///g' settings.gradle + git submodule status TMessagesProj/jni/ffmpeg > ffmpeg_status + git submodule status TMessagesProj/jni/libvpx > libvpx_status + git submodule status TMessagesProj/jni/boringssl > boringssl_status + - name: Native Cache + id: cache + uses: actions/cache@v2 + with: + path: | + TMessagesProj/src/main/libs + key: ${{ hashFiles('TMessagesProj/jni/**', 'ffmpeg_status', 'boringssl_status') }}-${{ matrix.flavor }} + - name: Checkout Library + if: steps.cache.outputs.cache-hit != 'true' + run: | + git submodule update --init 'TMessagesProj/jni/*' + - name: FFmpeg Cache + uses: actions/cache@v2 + if: steps.cache.outputs.cache-hit != 'true' + with: + path: | + TMessagesProj/jni/ffmpeg/build + TMessagesProj/jni/libvpx/build + key: ${{ hashFiles('ffmpeg_status', 'libvpx_status', 'TMessagesProj/jni/*ffmpeg*.sh', 'TMessagesProj/jni/*libvpx*.sh', 'TMessagesProj/jni/patches/ffmpeg/*') }} + - name: BoringSSL Cache + uses: actions/cache@v2 + if: steps.cache.outputs.cache-hit != 'true' + with: + path: | + TMessagesProj/jni/boringssl/build + key: ${{ hashFiles('boringssl_status') }} + - name: Setup Android SDK Tools + uses: android-actions/setup-android@v2 + if: steps.cache.outputs.cache-hit != 'true' + - name: Install NDK + if: steps.cache.outputs.cache-hit != 'true' + run: | + echo "y" | sdkmanager --install "ndk;21.4.7075529" --sdk_root=${ANDROID_SDK_ROOT} &> /dev/null + echo "sdk.dir=${ANDROID_HOME}" > local.properties + echo "ndk.dir=${ANDROID_HOME}/ndk/21.4.7075529" >> local.properties + - name: Fix BoringSSL + if: steps.cache.outputs.cache-hit != 'true' + run: | + cd TMessagesProj/jni + ./patch_boringssl.sh + - name: Native Build + if: steps.cache.outputs.cache-hit != 'true' + run: | + export NATIVE_TARGET="${{ matrix.flavor }}" + ./run libs native + v2ray: + name: Native Build (V2ray) + runs-on: ubuntu-latest + needs: check + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Fetch Status + run: | + sed -i 's/\/\///g' settings.gradle + git submodule status v2ray > v2ray_status + - name: V2ray Cache + id: cache + uses: actions/cache@v2 + with: + path: | + TMessagesProj/libs/libv2ray.aar + key: ${{ hashFiles('bin/libs/v2ray/*', 'v2ray_status') }} + - name: Setup Android SDK Tools + uses: android-actions/setup-android@v2 + if: steps.cache.outputs.cache-hit != 'true' + - name: Install NDK + if: steps.cache.outputs.cache-hit != 'true' + run: | + echo "y" | sdkmanager --install "ndk;21.4.7075529" --sdk_root=${ANDROID_SDK_ROOT} &> /dev/null + echo "sdk.dir=${ANDROID_HOME}" > local.properties + echo "ndk.dir=${ANDROID_HOME}/ndk/21.4.7075529" >> local.properties + - name: Install Golang + uses: actions/setup-go@v2 + if: steps.cache.outputs.cache-hit != 'true' + with: + go-version: 1.16 + - name: Native Build + if: steps.cache.outputs.cache-hit != 'true' + run: ./run libs v2ray + shadowsocks: + name: Native Build (Shadowsocks) + runs-on: ubuntu-latest + needs: check + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Fetch Status + run: | + sed -i 's/\/\///g' settings.gradle + git submodule status ss-rust/src/main/rust/shadowsocks-rust > shadowsocks_status + - name: Shadowsocks Cache + id: cache + uses: actions/cache@v2 + with: + path: | + TMessagesProj/libs/ss-rust-release.aar + key: ${{ hashFiles('shadowsocks_status') }} + - name: Setup Android SDK Tools + uses: android-actions/setup-android@v2 + if: steps.cache.outputs.cache-hit != 'true' + - name: Install NDK + if: steps.cache.outputs.cache-hit != 'true' + run: | + echo "y" | sdkmanager --install "ndk;21.4.7075529" --sdk_root=${ANDROID_SDK_ROOT} &> /dev/null + echo "sdk.dir=${ANDROID_HOME}" > local.properties + echo "ndk.dir=${ANDROID_HOME}/ndk/21.4.7075529" >> local.properties + - name: Install Rust + if: steps.cache.outputs.cache-hit != 'true' + run: ./run init action shadowsocks + - name: Native Build + if: steps.cache.outputs.cache-hit != 'true' + run: ./run libs shadowsocks + shadowsocksr: + name: Native Build (ShadowsocksR) + runs-on: ubuntu-latest + needs: check + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Fetch Status + run: | + sed -i 's/\/\///g' settings.gradle + git submodule status 'ssr-libev/*' > shadowsocksr_status + - name: ShadowsocksR Cache + id: cache + uses: actions/cache@v2 + with: + path: | + TMessagesProj/libs/ssr-libev-release.aar + key: ${{ hashFiles('shadowsocksr_status') }} + - name: Setup Android SDK Tools + uses: android-actions/setup-android@v2 + if: steps.cache.outputs.cache-hit != 'true' + - name: Install NDK + if: steps.cache.outputs.cache-hit != 'true' + run: | + echo "y" | sdkmanager --install "ndk;21.4.7075529" --sdk_root=${ANDROID_SDK_ROOT} &> /dev/null + echo "sdk.dir=${ANDROID_HOME}" > local.properties + echo "ndk.dir=${ANDROID_HOME}/ndk/21.4.7075529" >> local.properties + - name: Native Build + if: steps.cache.outputs.cache-hit != 'true' + run: ./run libs ssr + build: + name: Gradle Build + runs-on: ubuntu-latest + needs: + - native + - v2ray + # - shadowsocks + # - shadowsocksr + strategy: + matrix: + flavor: +# - FullRelease + - MiniRelease + - MiniReleaseNoGcm + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Setup Android SDK Tools + uses: android-actions/setup-android@v2 + - name: Install NDK + run: | + echo "y" | sdkmanager --install "ndk;21.4.7075529" --sdk_root=${ANDROID_SDK_ROOT} &> /dev/null + echo "sdk.dir=${ANDROID_HOME}" > local.properties + echo "ndk.dir=${ANDROID_HOME}/ndk/21.4.7075529" >> local.properties + - name: Fetch Status + run: | + sed -i 's/\/\///g' settings.gradle + git submodule status TMessagesProj/jni/ffmpeg > ffmpeg_status + git submodule status TMessagesProj/jni/boringssl > boringssl_status + git submodule status ss-rust/src/main/rust/shadowsocks-rust > shadowsocks_status + git submodule status 'ssr-libev/*' > shadowsocksr_status + git submodule status v2ray > v2ray_status + - name: Native Cache (armeabi-v7a) + uses: actions/cache@v2 + with: + path: | + TMessagesProj/src/main/libs + key: ${{ hashFiles('TMessagesProj/jni/**', 'ffmpeg_status', 'boringssl_status') }}-armeabi-v7a + - name: Native Cache (arm64-v8a) + uses: actions/cache@v2 + with: + path: | + TMessagesProj/src/main/libs + key: ${{ hashFiles('TMessagesProj/jni/**', 'ffmpeg_status', 'boringssl_status') }}-arm64-v8a + - name: V2ray Cache + uses: actions/cache@v2 + with: + path: | + TMessagesProj/libs/libv2ray.aar + key: ${{ hashFiles('bin/libs/v2ray/*', 'v2ray_status') }} + - name: Shadowsocks Cache + uses: actions/cache@v2 + with: + path: | + TMessagesProj/libs/ss-rust-release.aar + key: ${{ hashFiles('shadowsocks_status') }} + - name: ShadowsocksR Cache + uses: actions/cache@v2 + with: + path: | + TMessagesProj/libs/ssr-libev-release.aar + key: ${{ hashFiles('shadowsocksr_status') }} + - name: Configure Gradle + run: | + sed -i -e "s/16384/6144/g" gradle.properties + echo "sdk.dir=${ANDROID_HOME}" >> local.properties + - name: Gradle cache + uses: actions/cache@v2 + with: + path: ~/.gradle + key: gradle-${{ hashFiles('**/*.gradle') }} + - name: Debug Build + run: | + export LOCAL_PROPERTIES="${{ secrets.LOCAL_PROPERTIES }}" + export DEBUG_BUILD=true + ./gradlew TMessagesProj:assemble${{ matrix.flavor }} + + APK=$(find TMessagesProj/build/outputs/apk -name '*arm64-v8a*.apk') + APK=$(dirname $APK) + echo "APK=$APK" >> $GITHUB_ENV + - uses: actions/upload-artifact@v2 + with: + name: ${{ matrix.flavor }} + path: ${{ env.APK }}