Skip to content

Pre-built TDLib

Pre-built TDLib #91

Workflow file for this run

name: Pre-built TDLib
# This workflow can be executed using a command like this:
# gh workflow run prebuilt-tdlib.yml --ref develop -f tdlib=v1.8.0 -f npm-patch=0
on:
workflow_dispatch:
inputs:
tdlib:
description: 'TDLib git ref (e.g. v1.8.0 or a commit hash)'
type: string
required: true
npm-patch:
description: 'prebuilt-tdlib patch version, required to publish (e.g. 0, 1)'
type: string
required: false
npm-tag:
description: 'npm tag (e.g. latest, beta)'
type: string
required: false
default: 'latest'
# NOTE: The ZLIB_USE_STATIC_LIBS option requires CMake >= 3.24
jobs:
build-linux-x64:
name: Build TDLib (Linux x86_64 glibc)
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- uses: cachix/install-nix-action@v27
with:
nix_path: nixpkgs=channel:nixos-unstable
- name: Build TDLib
run: |
set -ex
cd packages/prebuilt-tdlib
mkdir to-upload
_fetchparams=$(nix run nixpkgs#nix-prefetch-github -- \
tdlib td --rev "${{ inputs.tdlib }}" --no-deep-clone)
nix-build build-scripts/tdlib.nix --arg fetchparams "''$_fetchparams''" -v
tree result/
cp -L ./result/lib/libtdjson.so to-upload/libtdjson.so
ldd to-upload/libtdjson.so
- name: Setup tmate session
uses: mxschmitt/action-tmate@v3
if: always()
with:
limit-access-to-actor: true
- uses: actions/upload-artifact@v4
with:
name: tdlib-linux-x64
path: to-upload
build-macos-x64:
name: Build TDLib (macOS x86_64)
runs-on: macos-13
steps:
- uses: actions/checkout@v4
with:
repository: 'tdlib/td'
ref: ${{ inputs.tdlib }}
# - name: Install dependencies (homebrew)
# run: HOMEBREW_NO_INSTALL_CLEANUP=1 brew install gperf zlib openssl
# - name: Build TDLib
# run: |
# set -ex
# cmake --version
# mkdir -p to-upload && mkdir -p build && cd build
# MACOSX_DEPLOYMENT_TARGET=10.14 cmake \
# -DCMAKE_BUILD_TYPE=Release \
# -DCMAKE_OSX_ARCHITECTURES='x86_64' \
# -DOPENSSL_USE_STATIC_LIBS=TRUE \
# -DZLIB_USE_STATIC_LIBS=TRUE \
# -DZLIB_LIBRARY=/usr/local/opt/zlib/lib/libz.a \
# -DZLIB_INCLUDE_DIR=/usr/local/opt/zlib/include \
# -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl \
# ..
# cmake --build . --target tdjson -- -j 4
# cd ..
# cp -L build/libtdjson.dylib to-upload/libtdjson.dylib
# cd to-upload
# install_name_tool -id @rpath/libtdjson.dylib libtdjson.dylib
# echo "clang:" >> info.txt && clang --version >> info.txt
# echo "openssl:" >> info.txt && /usr/local/opt/openssl/bin/openssl version >> info.txt
# file libtdjson.dylib
# otool -L libtdjson.dylib
- uses: cachix/install-nix-action@v27
with:
nix_path: nixpkgs=channel:nixpkgs-unstable
- name: Build TDLib
run: |
_fetchparams=$(nix run nixpkgs#nix-prefetch-github -- \
tdlib td --rev "${{ inputs.tdlib }}" --no-deep-clone)
nix-build build-scripts/tdlib-macos.nix --arg fetchparams "''$_fetchparams''" -v
tree result/
cp -L ./result/lib/libtdjson.dylib to-upload/libtdjson.dylib
otool -L to-upload/libtdjson.dylib
- uses: actions/upload-artifact@v4
with:
name: temp-macos-x64
path: to-upload
build-macos-arm64:
name: Build TDLib (macOS arm64)
runs-on: macos-14
steps:
- uses: actions/checkout@v4
with:
repository: 'tdlib/td'
ref: ${{ inputs.tdlib }}
- name: Install dependencies (homebrew)
run: HOMEBREW_NO_INSTALL_CLEANUP=1 brew install gperf zlib openssl
- name: Build TDLib
run: |
set -ex
cmake --version
mkdir -p to-upload && mkdir -p build && cd build
MACOSX_DEPLOYMENT_TARGET=11.0 cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_OSX_ARCHITECTURES='arm64' \
-DOPENSSL_USE_STATIC_LIBS=TRUE \
-DZLIB_USE_STATIC_LIBS=TRUE \
-DZLIB_LIBRARY=/opt/homebrew/zlib/lib/libz.a \
-DZLIB_INCLUDE_DIR=/opt/homebrew/zlib/include \
-DOPENSSL_ROOT_DIR=/opt/homebrew/openssl \
..
cmake --build . --target tdjson -- -j 2
cd ..
cp -L build/libtdjson.dylib to-upload/libtdjson.dylib
cd to-upload
install_name_tool -id @rpath/libtdjson.dylib libtdjson.dylib
echo "clang:" >> info.txt && clang --version >> info.txt
echo "openssl:" >> info.txt && /opt/homebrew/openssl/bin/openssl version >> info.txt
file libtdjson.dylib
otool -L libtdjson.dylib
- uses: actions/upload-artifact@v4
with:
name: temp-macos-arm64
path: to-upload
build-macos:
name: Create universal macOS shared library
needs: [build-macos-x64, build-macos-arm64]
runs-on: macos-13
steps:
- uses: actions/download-artifact@v4
with:
name: temp-macos-*
merge-multiple: true
- name: Combine shared libraries
run: |
mkdir -p to-upload
lipo temp-macos-x64/libtdjson.dylib temp-macos-arm64/libtdjson.dylib \
-output to-upload/libtdjson.dylib -create
cd to-upload
echo "--x86_64--" >> info.txt
cat ../temp-macos-x64/libtdjson.dylib >> info.txt
echo "--arm64--" >> info.txt
cat ../temp-macos-arm64/libtdjson.dylib >> info.txt
- uses: actions/upload-artifact@v4
with:
name: build-macos
path: to-upload
build-windows-x64:
name: Build TDLib (Windows x86_64)
runs-on: windows-2019
steps:
- uses: actions/checkout@v4
with:
repository: 'tdlib/td'
ref: ${{ inputs.tdlib }}
- name: vcpkg cache
uses: actions/cache@v4
with:
path: '~\AppData\Local\vcpkg\archives'
key: windows-vcpkg-${{ github.run_id }}
restore-keys: |
windows-vcpkg-
- name: Install dependencies using vcpkg
run: vcpkg install gperf:x64-windows-static openssl:x64-windows-static zlib:x64-windows-static
- name: CMake version
run: cmake --version
- name: Build TDLib
run: |
mkdir to-upload
mkdir build
cd build
cmake -A x64 `
-DCMAKE_TOOLCHAIN_FILE=C:\vcpkg\scripts\buildsystems\vcpkg.cmake `
-DVCPKG_TARGET_TRIPLET=x64-windows-static `
-DOPENSSL_USE_STATIC_LIBS=TRUE -DZLIB_USE_STATIC_LIBS=TRUE ..
cmake --build . --target tdjson --config Release --parallel 4
cd ..
cp build\Release\tdjson.dll to-upload\tdjson.dll
# It should be possible to print the dependencies using dumpbin.exe
vcpkg list | Select-String openssl,zlib > to-upload\info.txt
cat to-upload\info.txt
- uses: actions/upload-artifact@v4
with:
name: tdlib-windows-x64
path: to-upload
test:
name: 'Test the ${{ matrix.os[1] }} pre-built libraries'
needs: [build-linux-x64, build-macos, build-windows-x64]
runs-on: ${{ matrix.os[0] }}
strategy:
fail-fast: false
matrix:
os:
- [ubuntu-latest, tdlib-linux-x64]
- [macos-latest, tdlib-macos]
- [windows-latest, tdlib-windows-x64]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: lts/*
cache: npm
- run: npm install
- name: Uninstall the prebuilt-tdlib dev dependency
run: npm uninstall -D prebuilt-tdlib # just in case
- uses: actions/download-artifact@v4
with:
name: ${{ matrix.os[1] }}
merge-multiple: true
- run: npm run test:integration
env:
LIBDIR_PATH: '.'
publish:
name: 'Publish to npm'
needs: [test]
runs-on: ubuntu-latest
permissions:
contents: read
id-token: write
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: lts/*
cache: npm
# registry-url is mandatory here
registry-url: 'https://registry.npmjs.org'
- run: npm install
- run: npm uninstall -D prebuilt-tdlib
- uses: actions/download-artifact@v4
with:
pattern: tdlib-*
path: packages/prebuilt-tdlib/prebuilds
- run: tree packages/prebuilt-tdlib
- run: du -hsc packages/prebuilt-tdlib/prebuilds/*
- run: npm run test:integration
env:
PREBUILT_PATH: packages/prebuilt-tdlib
- run: |
git clone https://github.com/tdlib/td td
cd td
git checkout ${{ inputs.tdlib }}
echo "TDLIB_COMMIT_HASH=$(git rev-parse ${{ inputs.tdlib }})" >> "$GITHUB_ENV"
__ver=`grep -Po "(?<=TDLib VERSION )\d+\.\d+\.\d+" ./CMakeLists.txt`
echo "TDLIB_VERSION=$__ver" >> "$GITHUB_ENV"
echo NPM_TAG=${{ inputs.npm-tag }} >> "$GITHUB_ENV"
- name: Publish
run: node packages/prebuilt-tdlib/publish.js ${{ inputs.npm-patch }}
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
if: "${{ inputs.npm-patch != '' }}"