PHP拡張モジュール.Githubアクションのビルドとチェック.
11535 ワード
マイワークフロー
リポジトリについての小さな記述: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/td
、CopernicaMarketingSoftware/PHP-CPP
、nlohmann/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
です.できます.$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
Reference
この問題について(PHP拡張モジュール.Githubアクションのビルドとチェック.), 我々は、より多くの情報をここで見つけました https://dev.to/yaroslavche/php-extension-written-with-c-build-and-check-with-github-actions-4hdaテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol