Skip to content

Release Build

Release Build #78

Workflow file for this run

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