GitLabでcomposerライブラリを公開する話
今回は、PHP言語のcomposerの話ですね
前回、composerでオリジナルパッケージを作成する話にてGitHubにて後悔する方法を紹介しましたが、オフプロミスの場合、私の大好きGitLabを使うわけです。GitHubと同じでしょう?なんて思われるかもしれませんが、全然違います。
GitLabではグループのパッケージリポジトリで管理してくれます

そして、composer以外でmaven(java)とかしてくれるのは嬉しいですね
初めに、公開ライブラリを作成し..
<?php namespace org\mmpp\util; class StringUtil { public static function isNull($value) : bool{ if(empty($value)){ return true; } return $value === null; } }
はい、こんなライブラリはいらないシリーズ、入力値が空かを判断していますw
試験は、こち….
<?php namespace Unit; use org\mmpp\util\StringUtil; use PHPUnit\Framework\TestCase; class StringUtilTest extends TestCase { public function test_isNull(){ $this->assertTrue(StringUtil::isNull('')); $this->assertTrue(StringUtil::isNull(null)); } }
うん、動くだけですw
次にポイントですが、.gitlab-ci.ymlを設定します
stages: - deploy deploy: only: - tags stage: deploy script: - 'curl --header "Job-Token: $CI_JOB_TOKEN" --data "tag=$CI_COMMIT_TAG" $SERVER_URL/api/v4/projects/$CI_PROJECT_ID/packages/composer'
はい!今回はtag作成のみでやってみました。
作業のJob-Tokenは、$CI_JOB_TOKENに入っています。
送るデータのtagは$CI_COMMIT_TAGです。
さて、$SERVER_URLですが、これはrunnerに渡している変数です。

こんな感じで指定します。(サーバ名だから、別のサーバを指定するときに便利なように)
実際動いているJobはこちら

v1.0.1とv1.0.2がOKになっております。
jobのログはこんな感じ

この実行ではちょっとパラメタを確認しましたが、201で正常終了します。
gitでのtagのうち方は… 今回外します
次はこのライブラリを使ってみましょう!
composerを初期化して利用します…初期化は initを使えばOK
次にポイントですがhttp以外を利用する方法ですが次のコマンド…
composer config secure-http false
次に、リポジトリを利用します…
サイトの情報を利用すると… ダメです。(引っかかった!;;)

正しくはこちらです
composer config repositories.4 composer http://192.168.1.203:9080/api/v4/group/4/-/packages/composer/
ここでのポイントは
・「http://192.168.1.203:9080」自分のサーバとポートにしてください
・ 4 : これがポイントグループ番号を利用します。repositoriesとgroupに同じ値を入れます。
グルプ番号の確認方法はこちら

これが一番悩みました
そして、ライブラリを使う系です
composer req mmpp/util
実際に出来上がるソースはこちら
composer.json
{ "name": "mmpp/util_sample", "authors": [ { "name": "wataru", "email": "wataru775@gmail.com" } ], "require": { "mmpp/util": "^1.0" }, "config": { "secure-http": false }, "repositories": [{ "type": "composer", "url": "http://192.168.1.203:9080/api/v4/group/4/-/packages/composer/" }] }
更新すると
$ composer update Loading composer repositories with package information Warning: Accessing 192.168.1.203 over http which is an insecure protocol. Updating dependencies Lock file operations: 35 installs, 0 updates, 0 removals - Locking doctrine/instantiator (1.4.0) - Locking mmpp/util (1.0.2) - Locking myclabs/deep-copy (1.10.2) - Locking nikic/php-parser (v4.10.3) - Locking phar-io/manifest (2.0.1) - Locking phar-io/version (3.0.3) - Locking phpdocumentor/reflection-common (2.2.0) - Locking phpdocumentor/reflection-docblock (5.2.2) - Locking phpdocumentor/type-resolver (1.4.0) - Locking phpspec/prophecy (1.12.1) - Locking phpunit/php-code-coverage (9.2.5) - Locking phpunit/php-file-iterator (3.0.5) - Locking phpunit/php-invoker (3.1.1) - Locking phpunit/php-text-template (2.0.4) - Locking phpunit/php-timer (5.0.3) - Locking phpunit/phpunit (9.5.0) - Locking sebastian/cli-parser (1.0.1) - Locking sebastian/code-unit (1.0.8) - Locking sebastian/code-unit-reverse-lookup (2.0.3) - Locking sebastian/comparator (4.0.6) - Locking sebastian/complexity (2.0.2) - Locking sebastian/diff (4.0.4) - Locking sebastian/environment (5.1.3) - Locking sebastian/exporter (4.0.3) - Locking sebastian/global-state (5.0.2) - Locking sebastian/lines-of-code (1.0.3) - Locking sebastian/object-enumerator (4.0.4) - Locking sebastian/object-reflector (2.0.4) - Locking sebastian/recursion-context (4.0.4) - Locking sebastian/resource-operations (3.0.3) - Locking sebastian/type (2.3.1) - Locking sebastian/version (3.0.2) - Locking symfony/polyfill-ctype (v1.20.0) - Locking theseer/tokenizer (1.2.0) - Locking webmozart/assert (1.9.1) Writing lock file Installing dependencies from lock file (including require-dev) Package operations: 35 installs, 0 updates, 0 removals - Installing sebastian/version (3.0.2): Extracting archive - Installing sebastian/type (2.3.1): Extracting archive - Installing sebastian/resource-operations (3.0.3): Extracting archive - Installing sebastian/recursion-context (4.0.4): Extracting archive - Installing sebastian/object-reflector (2.0.4): Extracting archive - Installing sebastian/object-enumerator (4.0.4): Extracting archive - Installing sebastian/global-state (5.0.2): Extracting archive - Installing sebastian/exporter (4.0.3): Extracting archive - Installing sebastian/environment (5.1.3): Extracting archive - Installing sebastian/diff (4.0.4): Extracting archive - Installing sebastian/comparator (4.0.6): Extracting archive - Installing sebastian/code-unit (1.0.8): Extracting archive - Installing sebastian/cli-parser (1.0.1): Extracting archive - Installing phpunit/php-timer (5.0.3): Extracting archive - Installing phpunit/php-text-template (2.0.4): Extracting archive - Installing phpunit/php-invoker (3.1.1): Extracting archive - Installing phpunit/php-file-iterator (3.0.5): Extracting archive - Installing theseer/tokenizer (1.2.0): Extracting archive - Installing nikic/php-parser (v4.10.3): Extracting archive - Installing sebastian/lines-of-code (1.0.3): Extracting archive - Installing sebastian/complexity (2.0.2): Extracting archive - Installing sebastian/code-unit-reverse-lookup (2.0.3): Extracting archive - Installing phpunit/php-code-coverage (9.2.5): Extracting archive - Installing symfony/polyfill-ctype (v1.20.0): Extracting archive - Installing webmozart/assert (1.9.1): Extracting archive - Installing phpdocumentor/reflection-common (2.2.0): Extracting archive - Installing phpdocumentor/type-resolver (1.4.0): Extracting archive - Installing phpdocumentor/reflection-docblock (5.2.2): Extracting archive - Installing doctrine/instantiator (1.4.0): Extracting archive - Installing phpspec/prophecy (1.12.1): Extracting archive - Installing phar-io/version (3.0.3): Extracting archive - Installing phar-io/manifest (2.0.1): Extracting archive - Installing myclabs/deep-copy (1.10.2): Extracting archive - Installing phpunit/phpunit (9.5.0): Extracting archive - Installing mmpp/util (1.0.2): Extracting archive 5 package suggestions were added by new dependencies, use `composer suggest` to see details. Generating autoload files 26 packages you are using are looking for funding. Use the `composer fund` command to find out more!
はい、入りましたね。 Installing mmpp/util (1.0.2): Extracting archive
使ってみましょう
<?php namespace Unit; use org\mmpp\util\StringUtil; use PHPUnit\Framework\TestCase; class StringUtilTest extends TestCase { public function test_isNull(){ $this->assertTrue(StringUtil::isNull('')); $this->assertTrue(StringUtil::isNull(null)); } }
$ ./vendor/bin/phpunit tests/ PHPUnit 9.5.0 by Sebastian Bergmann and contributors. .. 2 / 2 (100%) Time: 00:00.004, Memory: 4.00 MB OK (2 tests, 10 assertions)
試験通りました!ちょっと多いですがw
はい、こんな感じで今回はGitLabでcomposerのライブラリを公開してみました。結構、おもしろいなぁ〜なんて思いました。
ちなみに、tag単位での公開方法がわかったのでci環境のもう少し勉強できるかな。
あと… phpunit走っていないやw
ついでに、レポートをタグ単位で公開スレば結構便利な情報になるね。