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
ついでに、レポートをタグ単位で公開スレば結構便利な情報になるね。