BEAR.Sundayのモジュールを実装・CI・公開する
TL;DR
記事のゴール
FirebaseをBEAR.Sundayで利用するためのモジュールを実装・公開する
既存のパッケージがあった…
内容としてはまさにこれが欲しかったんだけど、3年前からメンテされていないようで使われているFirebaseのライブラリも現在主流のものとは異なっている様子。
こういうときどうしたらいいんだろう…
依存しているライブラリまでガッツリ変えちゃうようなPRを送る?
別ライブラリとして実装する?
とりあえず今回はさくっとcomposerでインストールして使いたかったので別ライブラリとして実装する。
追記
既存のライブラリをForkしてガッツリ内容を変えたPRを提出して
- マージされるまではcomposer.jsonのrepositoryにForkして実装したGitHubを使う
- リジェクトされたら別ライブラリとしてpackagistにsubmitする
- マージされたら
composer require
でよかったのかも?
参考:
packagistを使わないcomposerのgitリポジトリの作成
https://getcomposer.org/doc/05-repositories.md#vcs
実装
上記のスケルトンを利用してプロジェクトを作成する
CIやら静的(動的)解析ツールやらの設定が色々同梱されているので最低限のことは全部やってくれる。
PSR-12とは設定がずれている部分があったので、気になる人は下記を参考にして下さい。
-'return_type_declaration' => ['space_before' => 'one'],
+'return_type_declaration' => ['space_before' => 'none'],
テスト
$ composer test // phpunit
$ composer tests // php-cs-fixer & phpcs & phpmd & phpstan & phpunit
どちらもエラーが出なくなったらGitHubにcommit
& push
README.mdの作成
上記を参考にREADMEを作る
バッジを設定する
参考:
https://qiita.com/dtan4/items/13b0ea9edf5b99926446
Travis CI
設定ファイル(.travis.yml)がスケルトンに入っているのでCIとしての設定はほとんど必要なし。
ただし今回はNightlyバージョンのPHPは必要ないので設定から削る
php:
- 7.1
- 7.2
- 7.3
- - nightly
...
jobs:
...
allow_failures:
- - php: nightly
画像の赤枠部分をクリックすることでバッジのコードを取得できる。
このままだとLowest dependencies
にエラーが出ているようなので修正が必要
Lowest dependencies?
通常与えられた条件の最新のバージョンがインストールされます。テストは最新の依存だけをテストすることになり。^や~で指定した最低のバージョンのテストは行われません。
これが問題になるのは、他のパッケージが特定のパッケージの低いバージョンのものに依存していて、また他のパッケージではその高いバージョンのみにある機能を使用している場合です。依存解決は低いバージョンで行われ、最新バージョンに依存したパッケージはエラーを引き起こしたりBugの元になったりします。
エラーが出ないよう修正する
> vendor/bin/phpunit
PHPUnit 7.5.0 by Sebastian Bergmann and contributors.
EEEEE 5 / 5 (100%)
Time: 43 ms, Memory: 4.00MB
There were 5 errors:
1) Piotzkhider\FirebaseModule\FirebaseModuleTest::testModule
Error: Class 'PhpParser\ParserFactory' not found
/PhpStormProjects/Ray.FirebaseModule/vendor/ray/aop/src/ParserFactory.php:13
/PhpStormProjects/Ray.FirebaseModule/vendor/ray/aop/src/Compiler.php:35
/PhpStormProjects/Ray.FirebaseModule/vendor/ray/di/src/Injector.php:32
...
phpstan-shimに存在しているこの問題のよう。
issueによるとbootstrap.php
でこの問題は解決しているようなので、bootstrap.php
が存在するバージョンを最低バージョンに指定する。
参考:
http://blog.a-way-out.net/blog/2015/06/19/composer-version-tilde-and-caret/
"require-dev": {
"phpunit/phpunit": "^7.5",
"squizlabs/php_codesniffer": "^3.2",
"friendsofphp/php-cs-fixer": "^2.12",
"phpmd/phpmd": "^2.6",
- "phpstan/phpstan-shim": "^0.10"
+ "phpstan/phpstan-shim": "^0.10.2"
},
> vendor/bin/phpunit
PHPUnit 7.5.0 by Sebastian Bergmann and contributors.
EEEEE 5 / 5 (100%)
Time: 109 ms, Memory: 12.00MB
There were 5 errors:
1) Piotzkhider\FirebaseModule\FirebaseModuleTest::testModule
Error: Class 'Google\Cloud\Core\ServiceBuilder' not found
/Users/ysato/PhpStormProjects/Ray.FirebaseModule/vendor/kreait/firebase-php/src/Firebase/Factory.php:370
/Users/ysato/PhpStormProjects/Ray.FirebaseModule/vendor/kreait/firebase-php/src/Firebase/Factory.php:344
/Users/ysato/PhpStormProjects/Ray.FirebaseModule/vendor/kreait/firebase-php/src/Firebase/Factory.php:165
...
1つ目のエラーは解消されたが、また別のエラーが発生しているよう。
こちらも前回のエラーと同様に、低いバージョンでは必要となるファイルが存在していないことが問題になっているので、存在するバージョンを指定する。
"require": {
"php": ">=7.1.0",
"ray/di": "^2.9",
"kreait/firebase-php": "^4.30",
+ "google/cloud-core": "^1.19"
},
> vendor/bin/phpunit
PHPUnit 7.5.0 by Sebastian Bergmann and contributors.
..... 5 / 5 (100%)
Time: 123 ms, Memory: 16.00MB
無事ローカルでのエラーも消え、Travis CIでのエラーがなくなりました!
scrutinizer
こちらも設定ファイル(.scrutinizer.yml)がスケルトンに入っているのでCIとしての設定は特に必要なし
画像の赤枠内の各バッジをクリックすることでバッジのコードを取得できる。
coverageがNot enabled
スケルトンの設定でTravis CIで出力されたカバレッジがscrutinizerに送られているが、設定がデグレしているようなので修正。
script:
- - ./vendor/bin/phpunit -v --coverage-clover ./build/logs/clover.xml
+ - ./vendor/bin/phpunit -v --coverage-clover=coverage.clover
after_script:
- wget https://scrutinizer-ci.com/ocular.phar && php ocular.phar code-coverage:upload --format=php-clover coverage.clover;
ついでにPRも出しておきます
全て正常に表示されました!
Packagistで公開
Submit Packageしておしまい!
と思ったのですが、タグをつけてあげないとdev-master
になってしまうため、minimum-stability:dev
でないとインストールすることができなくなるようです。
(ブランチ名でもバージョン制御をしてくれるようですが、そちらもdev扱いになってしまいます)
1.0.0としてタグを登録します。
$ git tag 1.0.0 [revision-number]
$ git push origin 1.0.0
参考:
https://getcomposer.org/doc/articles/versions.md#tags
git tagの使い方まとめ
Author And Source
この問題について(BEAR.Sundayのモジュールを実装・CI・公開する), 我々は、より多くの情報をここで見つけました https://qiita.com/piotzkhider/items/377558307414c04f8498著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .