PHP拡張モジュール.Githubアクションのビルドとチェック.



マイワークフロー
リポジトリについての小さな記述:phptdlibは、電報クライアントを作成することができますTelegram Database libraryのPHP拡張機能です.これは依存関係を持つCMakeベースのC++プロジェクトである.
まず、cmakeプロジェクトを構築するための環境を準備する必要がある
jobs:
    build:
        name: ${{ matrix.config.name }}
        runs-on: ${{ matrix.config.os }}
        env: # custom ENV variables
            CONFIG: gcc
            CC: gcc
            CXX: g++
        strategy:
            fail-fast: false
            matrix:
                config:
                    - {
                        name: "Ubuntu Latest GCC (Release)",
                        os: ubuntu-latest,
                        build_type: "Release",
                        cc: "gcc",
                        cxx: "g++",
                        generators: "Ninja"
                    }
そして、レポチェックアウト直後にPHP PHPを実行するためのPHPヘッダと機能を追加する必要があります.tdlib/tdに感謝します.
        steps:
            -   uses: actions/[email protected]
            -   name: Setup PHP 7.4 with PECL extension
                uses: shivammathur/[email protected]
                with:
                    php-version: '7.4'
その後、開発ツールをインストールし、そのバージョンをチェックする準備ができました.
            -   name: Install main dependencies (Ubuntu)
                if: startsWith(matrix.config.name, 'Ubuntu Latest GCC')
                run: |
                    sudo apt-get update
                    sudo apt-get install ninja-build cmake gperf build-essential zlib1g-dev
                    ninja --version
                    cmake --version
                    gcc --version
                    php --version
ここでは、我々はマトリックスを拡張し、各環境の独自のワークフローを構成することができることに注意してください.
ビルドプロセスでは、1つの巨大な欠点があります-それは多くのリソースと多くの時間がかかります.彼らが必要でないとき、資源を占領することは悪いです.それがコンパイルされたオブジェクトファイルをキャッシュする価値がある理由です.
            -   name: Cache extension dependencies
                id: cahce-ext-deps
                uses: actions/[email protected]
                with:
                    path: ~/cached_builds
                    key: ${{ runner.os }}-ext-deps
しかし、正直に、私はこの設定が本当に私のケースのために正しく構成されないと思います.アイデアはコンパイルされたオブジェクトファイルをキャッシュしていて、後でそのディレクトリとリンカを使用して、そのオブジェクトファイル(次のステップからインストールスクリプトで)を使用するでしょう.しかし、私が予想していたように動作しません.コンパイラは依存関係に変更がない場合でも、オブジェクトファイルをコンパイルします.私は、アドバイスのために非常に有り難いです.
共有libビルドの依存関係を更新するためにCopernicaMarketingSoftware/PHP-CPPを作成しました.最初の引数としてビルドパスを取り、tdlib/tdCopernicaMarketingSoftware/PHP-CPPnlohmann/jsonリポジトリから最新のコードをプルし、共有ライブラリとして別々にビルドします.
            -   name: Install extension dependencies
                shell: bash
                run: |
                    ./scripts/install.sh ~/cached_builds
                    cd ~/cached_builds
                    sudo ldconfig
このプロセスは約10分かかります.
依存関係が構築されインストールされている場合、拡張モジュール自体をインストールする準備が整いました.
            -   name: Build and install
                shell: bash
                run: |
                    mkdir build
                    cd build
                    cmake -D USE_SHARED_TD:BOOL=ON -D USE_SHARED_JSON:BOOL=ON -D USE_SHARED_PHPCPP:BOOL=ON ..
                    make
                    sudo make install
そして、上記のすべてがうまくいくならば、我々はそれがインストールされて、働くかどうかチェックすることができます.インストールされているモジュールをチェックし、例題スクリプトを実行しようとする必要があります.
            -   name: Test
                shell: bash
                run: |
                    pwd
                    php -m | grep tdlib
                    php php_examples/func.php
を指定する必要があります.私のケースでは、私はまた、より頻繁に(2回で1ヵ月)スケジュールされた実行を構成したいと思います.
on:
    push:
    pull_request:
    release:
    schedule:
        -   cron: "0 0 1,15 * *"
私はトラビスを使用する前に、それは誤っていくつかの時点で私のために働くのを止めた、と私はGithubアクションに移行することを決めた.たった今、それは理想的でありません、そして、ちょうど1つのConfigと行列の1つのエントリーを使用します、しかし、それはその仕事をしていて、将来よりよく構成されることができます.
を読んでくれてありがとう.
nlohmann/json
提出カテゴリ
奇抜なワイルドカード
shivammathur/[email protected]
YAMLファイルまたはコードへのリンク

install script/
PHP - CPPで書かれたTDLIB/TD用のPHP拡張モジュール

PHP拡張モジュールtdlibでは、 yaroslavche で動作できます
単純であるならば、これはtdlib/td JSONクライアントで働くための通常の phptdlib です.できます.
  • JSONクライアントを作成する
  • は同期要求$client = td_json_client_create()を実行する
  • は非同期要求$result = td_json_client_execute($client, $json); *
  • を実行します
  • 現在のtd_json_client_send($client, $json);におけるすべての応答を得る
  • と破壊クライアント$response = td_json_client_receive($client, $timeout);
  • td_json_client_destroy($client);は、非同期要求から応答を得るために*を使用しなければなりません.

    Telegram database library
    functions wrapper

    Getting started with TDLib
    クライアント名を指定します.
    TDSUNE JSONSUNE ClientCount Execute ($ client , JSONRUNE ENCODE (['@ type '=>' setlogverbositylevel ', ' newckverbositychen level )>' 0 ' ]);
    $ waittimeout = 10 ;
    …の間
    { }
    $ result = tdrest JSONLIGHTクライアントを取得します($ client , $ waittimeout );
    を返します.

    td_json_client.h File Reference