name: Build TDLib on: workflow_dispatch: inputs: tdlib_ref: description: Optional TDLib tag or commit to build required: false type: string schedule: - cron: "0 3 * * 1" permissions: contents: read packages: write jobs: build-tdlib: runs-on: ubuntu-latest env: PACKAGE_NAME: tdlib TDLIB_REPO: https://github.com/tdlib/td.git steps: - name: Check out repository uses: https://github.com/actions/checkout@v4 - name: Install build dependencies run: | if command -v sudo >/dev/null 2>&1; then SUDO=sudo else SUDO= fi $SUDO apt-get update $SUDO apt-get install -y \ build-essential \ ca-certificates \ cmake \ curl \ git \ gperf \ libssl-dev \ pkg-config \ zlib1g-dev - name: Resolve TDLib ref id: tdlib run: | set -euo pipefail ref="${{ inputs.tdlib_ref }}" if [ -z "$ref" ]; then ref="$(git ls-remote --tags --refs --sort='version:refname' "$TDLIB_REPO" 'v*' | tail -n1 | awk -F/ '{print $3}')" fi if [ -z "$ref" ]; then echo "Failed to resolve TDLib ref" >&2 exit 1 fi version="$ref" version="${version#v}" archive="tdlib-${version}-linux-x86_64.tar.gz" { echo "ref=$ref" echo "version=$version" echo "archive=$archive" } >> "$GITHUB_OUTPUT" - name: Build TDLib bundle run: | set -euo pipefail ref="${{ steps.tdlib.outputs.ref }}" version="${{ steps.tdlib.outputs.version }}" archive="${{ steps.tdlib.outputs.archive }}" rm -rf tdlib-src tdlib-build dist git clone --depth 1 --branch "$ref" "$TDLIB_REPO" tdlib-src cmake -S tdlib-src -B tdlib-build \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX="$PWD/dist/tdlib" \ -DTD_ENABLE_INSTALL=ON \ -DTD_ENABLE_JNI=OFF \ -DTD_ENABLE_DOTNET=OFF \ -DTD_ENABLE_TESTS=OFF \ -DTD_ENABLE_BENCHMARKS=OFF cmake --build tdlib-build -j"$(nproc)" cmake --install tdlib-build tar -C dist -czf "$archive" tdlib sha256sum "$archive" > "${archive}.sha256" - name: Publish TDLib package env: GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} run: | set -euo pipefail version="${{ steps.tdlib.outputs.version }}" archive="${{ steps.tdlib.outputs.archive }}" base="${{ gitea.server_url }}/api/packages/${{ gitea.repository_owner }}/generic/${PACKAGE_NAME}" status="$(curl --silent --show-error \ --output /dev/null \ --write-out "%{http_code}" \ --user "${{ gitea.actor }}:${GITEA_TOKEN}" \ -X DELETE \ "$base/$version")" case "$status" in 204|404) ;; *) echo "Unexpected response deleting existing package version: $status" >&2 exit 1 ;; esac curl --fail-with-body \ --user "${{ gitea.actor }}:${GITEA_TOKEN}" \ --upload-file "$archive" \ "$base/$version/$archive" curl --fail-with-body \ --user "${{ gitea.actor }}:${GITEA_TOKEN}" \ --upload-file "${archive}.sha256" \ "$base/$version/${archive}.sha256" - name: Publish latest metadata env: GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} run: | set -euo pipefail version="${{ steps.tdlib.outputs.version }}" archive="${{ steps.tdlib.outputs.archive }}" base="${{ gitea.server_url }}/api/packages/${{ gitea.repository_owner }}/generic/${PACKAGE_NAME}" latest_manifest="tdlib-latest.json" cat > "$latest_manifest" <&2 exit 1 ;; esac curl --fail-with-body \ --user "${{ gitea.actor }}:${GITEA_TOKEN}" \ --upload-file "$latest_manifest" \ "$base/latest/$latest_manifest"