Pre-built TDLib #86
Workflow file for this run
This file contains 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: 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: 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 != '' }}" |