Release Build #78
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Release Build | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| tag: | |
| description: 'Release Tag' | |
| required: true | |
| publish: | |
| description: 'Publish Release: 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 }} | |
| ffmpeg: | |
| name: Native Build (FFmpeg) | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v6 | |
| with: | |
| submodules: recursive | |
| - name: Fetch Status | |
| run: | | |
| git submodule status TMessagesProj/jni/ffmpeg > ffmpeg_status | |
| git submodule status TMessagesProj/jni/libvpx > libvpx_status | |
| git submodule status TMessagesProj/jni/dav1d > dav1d_status | |
| - name: FFmpeg Cache | |
| id: cache | |
| uses: actions/cache@v5 | |
| with: | |
| path: | | |
| TMessagesProj/jni/ffmpeg/build | |
| TMessagesProj/jni/libvpx/build | |
| TMessagesProj/jni/dav1d/build | |
| key: ${{ hashFiles('ffmpeg_status', 'libvpx_status', 'dav1d_status', 'TMessagesProj/jni/*ffmpeg*.sh', 'TMessagesProj/jni/*libvpx*.sh', 'TMessagesProj/jni/patches/ffmpeg/*') }} | |
| - name: Setup Android SDK Tools | |
| uses: android-actions/setup-android@v3 | |
| if: steps.cache.outputs.cache-hit != 'true' | |
| - name: Install NDK | |
| if: steps.cache.outputs.cache-hit != 'true' | |
| run: | | |
| SDK_MANAGER=$ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager | |
| if [ ! -f "$SDK_MANAGER" ]; then | |
| SDK_MANAGER=$(find $ANDROID_HOME -name sdkmanager | head -n 1) | |
| fi | |
| echo "y" | sudo $SDK_MANAGER --install "ndk;27.2.12479018" --sdk_root=${ANDROID_SDK_ROOT} | |
| echo "sdk.dir=${ANDROID_HOME}" > local.properties | |
| echo "ndk.dir=${ANDROID_HOME}/ndk/27.2.12479018" >> local.properties | |
| - name: Native Build | |
| if: steps.cache.outputs.cache-hit != 'true' | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install yasm nasm meson ninja-build -y || true | |
| ./run init libs libvpx | |
| ./run init libs ffmpeg | |
| boringssl: | |
| name: Native Build (BoringSSL) | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v6 | |
| with: | |
| submodules: recursive | |
| - name: Fetch Status | |
| run: git submodule status TMessagesProj/jni/boringssl > boringssl_status | |
| - name: BoringSSL Cache | |
| id: cache | |
| uses: actions/cache@v5 | |
| 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: | | |
| SDK_MANAGER=$ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager | |
| if [ ! -f "$SDK_MANAGER" ]; then | |
| SDK_MANAGER=$ANDROID_HOME/tools/bin/sdkmanager | |
| fi | |
| echo "y" | sudo $SDK_MANAGER --install "ndk;27.2.12479018" --sdk_root=${ANDROID_SDK_ROOT} | |
| echo "sdk.dir=${ANDROID_HOME}" > local.properties | |
| echo "ndk.dir=${ANDROID_HOME}/ndk/27.2.12479018" >> 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 | |
| - x86 | |
| - x86_64 | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v6 | |
| with: | |
| submodules: recursive | |
| - name: Fetch Status | |
| run: | | |
| git submodule status TMessagesProj/jni/ffmpeg > ffmpeg_status | |
| git submodule status TMessagesProj/jni/libvpx > libvpx_status | |
| git submodule status TMessagesProj/jni/dav1d > dav1d_status | |
| git submodule status TMessagesProj/jni/boringssl > boringssl_status | |
| - name: Native Cache | |
| id: cache | |
| uses: actions/cache@v5 | |
| with: | |
| path: | | |
| TMessagesProj/src/main/libs | |
| key: ${{ hashFiles('TMessagesProj/jni/**', 'ffmpeg_status', 'boringssl_status', 'dav1d_status') }}-${{ matrix.flavor }} | |
| - name: Checkout Library | |
| if: steps.cache.outputs.cache-hit != 'true' | |
| run: | | |
| git submodule update --init 'TMessagesProj/jni/*' || true | |
| - name: FFmpeg Cache | |
| uses: actions/cache@v5 | |
| if: steps.cache.outputs.cache-hit != 'true' | |
| with: | |
| path: | | |
| TMessagesProj/jni/ffmpeg/build | |
| TMessagesProj/jni/libvpx/build | |
| TMessagesProj/jni/dav1d/build | |
| key: ${{ hashFiles('ffmpeg_status', 'libvpx_status', 'dav1d_status', 'TMessagesProj/jni/*ffmpeg*.sh', 'TMessagesProj/jni/*libvpx*.sh', 'TMessagesProj/jni/patches/ffmpeg/*') }} | |
| - name: BoringSSL Cache | |
| uses: actions/cache@v5 | |
| 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: | | |
| SDK_MANAGER=$ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager | |
| if [ ! -f "$SDK_MANAGER" ]; then | |
| SDK_MANAGER=$ANDROID_HOME/tools/bin/sdkmanager | |
| fi | |
| echo "y" | sudo $SDK_MANAGER --install "ndk;27.2.12479018" --sdk_root=${ANDROID_SDK_ROOT} | |
| echo "sdk.dir=${ANDROID_HOME}" > local.properties | |
| echo "ndk.dir=${ANDROID_HOME}/ndk/27.2.12479018" >> local.properties | |
| - name: Fix BoringSSL | |
| if: steps.cache.outputs.cache-hit != 'true' | |
| run: | | |
| cd TMessagesProj/jni | |
| ./patch_boringssl.sh || true | |
| - name: Fix ffmpeg | |
| if: steps.cache.outputs.cache-hit != 'true' | |
| run: | | |
| cd TMessagesProj/jni | |
| ./patch_ffmpeg.sh || true | |
| - name: Native Build | |
| if: steps.cache.outputs.cache-hit != 'true' | |
| run: | | |
| export NATIVE_TARGET="${{ matrix.flavor }}" | |
| ./run libs native | |
| mkdir -p ~/apks || true | |
| cp -rfv TMessagesProj/build/outputs/apk ~/apks || true | |
| build: | |
| name: Gradle Build | |
| runs-on: ubuntu-latest | |
| needs: | |
| - native | |
| strategy: | |
| matrix: | |
| flavor: | |
| - Release | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v6 | |
| with: | |
| submodules: recursive | |
| - name: Setup Android SDK Tools | |
| uses: android-actions/setup-android@v2 | |
| - name: Install NDK | |
| run: | | |
| SDK_MANAGER=$ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager | |
| if [ ! -f "$SDK_MANAGER" ]; then | |
| SDK_MANAGER=$ANDROID_HOME/tools/bin/sdkmanager | |
| fi | |
| echo "y" | sudo $SDK_MANAGER --install "ndk;27.2.12479018" --sdk_root=${ANDROID_SDK_ROOT} | |
| echo "sdk.dir=${ANDROID_HOME}" > local.properties | |
| echo "ndk.dir=${ANDROID_HOME}/ndk/27.2.12479018" >> local.properties | |
| - name: Fetch Status | |
| run: | | |
| git submodule status TMessagesProj/jni/ffmpeg > ffmpeg_status | |
| git submodule status TMessagesProj/jni/libvpx > libvpx_status | |
| git submodule status TMessagesProj/jni/dav1d > dav1d_status | |
| git submodule status TMessagesProj/jni/boringssl > boringssl_status | |
| - name: Native Cache (armeabi-v7a) | |
| uses: actions/cache@v5 | |
| with: | |
| path: | | |
| TMessagesProj/src/main/libs | |
| key: ${{ hashFiles('TMessagesProj/jni/**', 'ffmpeg_status', 'boringssl_status', 'dav1d_status') }}-armeabi-v7a | |
| - name: Native Cache (arm64-v8a) | |
| uses: actions/cache@v5 | |
| with: | |
| path: | | |
| TMessagesProj/src/main/libs | |
| key: ${{ hashFiles('TMessagesProj/jni/**', 'ffmpeg_status', 'boringssl_status', 'dav1d_status') }}-arm64-v8a | |
| - name: Native Cache (x86) | |
| uses: actions/cache@v5 | |
| with: | |
| path: | | |
| TMessagesProj/src/main/libs | |
| key: ${{ hashFiles('TMessagesProj/jni/**', 'ffmpeg_status', 'boringssl_status', 'dav1d_status') }}-x86 | |
| - name: Native Cache (x86_64) | |
| uses: actions/cache@v5 | |
| with: | |
| path: | | |
| TMessagesProj/src/main/libs | |
| key: ${{ hashFiles('TMessagesProj/jni/**', 'ffmpeg_status', 'boringssl_status', 'dav1d_status') }}-x86_64 | |
| - name: FFmpeg Cache | |
| uses: actions/cache@v5 | |
| with: | |
| path: | | |
| TMessagesProj/jni/ffmpeg/build | |
| TMessagesProj/jni/libvpx/build | |
| TMessagesProj/jni/dav1d/build | |
| key: ${{ hashFiles('ffmpeg_status', 'libvpx_status', 'dav1d_status', 'TMessagesProj/jni/*ffmpeg*.sh', 'TMessagesProj/jni/*libvpx*.sh', 'TMessagesProj/jni/patches/ffmpeg/*') }} | |
| - name: BoringSSL Cache | |
| uses: actions/cache@v5 | |
| with: | |
| path: | | |
| TMessagesProj/jni/boringssl/build | |
| key: ${{ hashFiles('boringssl_status') }} | |
| - name: Fix Gradle Memory | |
| run: | | |
| sed -i -e "s/16384/6144/g" gradle.properties | |
| # echo "ndk.dir=${ANDROID_HOME}/ndk-bundle" > local.properties | |
| - name: Gradle cache | |
| uses: actions/cache@v5 | |
| with: | |
| path: ~/.gradle | |
| key: gradle-${{ hashFiles('**/*.gradle') }} | |
| - name: Release Build | |
| run: | | |
| export LOCAL_PROPERTIES="${{ secrets.LOCAL_PROPERTIES }}" | |
| export APK_CERT="${{ secrets.APK_CERT }}" | |
| printf "%s" "$APK_CERT" > /tmp/ci.jks.b64 | |
| base64 -d /tmp/ci.jks.b64 > /tmp/ci.jks | |
| ./gradlew TMessagesProj:assemble${{ matrix.flavor }} | |
| APK=$(find TMessagesProj/build/outputs/apk -name '*arm64-v8a*.apk') | |
| APK=$(dirname $APK) | |
| mkdir -p ~/apks || true | |
| cp -rfv TMessagesProj/build/outputs/apk ~/apks/${{ github.event.inputs.tag }} || true | |
| echo "APK=$APK" >> $GITHUB_ENV | |
| - uses: actions/upload-artifact@v4 | |
| with: | |
| name: ${{ matrix.flavor }} | |
| path: ${{ env.APK }} | |
| publish: | |
| name: Publish Release | |
| if: github.event.inputs.publish != 'y' | |
| runs-on: ubuntu-latest | |
| needs: build | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 1 | |
| - name: Get commit message | |
| run: | | |
| { | |
| echo "COMMIT_MSG<<EOF" | |
| git log -1 --pretty=%B | |
| echo "EOF" | |
| } >> "$GITHUB_ENV" | |
| - name: Download Artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| path: artifacts | |
| - name: Release | |
| run: | | |
| git config --global user.email "action@github.com" | |
| git config --global user.name "GitHub Action" | |
| wget -O ghr.tar.gz https://github.com/tcnksm/ghr/releases/download/v0.18.0/ghr_v0.18.0_linux_amd64.tar.gz | |
| tar -xvf ghr.tar.gz | |
| mv ghr*linux_amd64/ghr . | |
| mkdir apks | |
| find artifacts -name "*.apk" -exec cp {} apks \; | |
| ./ghr -delete -prerelease -u dic1911 -r Momogram -c ${{ github.sha }} -t "${{ github.token }}" -n "${{ github.event.inputs.tag }}" -b "${{ env.COMMIT_MSG }} | |
| Note. CI build has different signature, if you don't understand what this means, use normal builds instead, do not spam the discussion group or get warned and muted." "${{ github.event.inputs.tag }}" apks |