【bash/PHP/git】composer.jsonのバージョンチェック

Bash

この記事の目的

Composerパッケージを作っていると、ちょくちょく composer.json のバージョン更新が抜けてしまいます。(筆者は・・)

Packagist側のチェックで弾かれて、最新のコミットが反映されなくなってしまいます。

gitリポジトリへのコミットや、GitHubへのプッシュ前にチェックする必要があるので、

ローカルで実行するシェルスクリプトを作りました。

その内容と実行結果の解説です。

バージョンチェックスクリプト

次のスクリプトを適当な名前で適当な場所に設置します。

筆者は、リポジトリ内に

bin/CheckVersion.sh 

として設置しています。

#!/usr/bin/bash

# Script to check
# if the version in composer.json
# is not in git tags

if [ ! -r composer.json ]; then
    echo "composer.json not found."
    echo "operation aborted."
    exit 1
fi
VERSION=$(cat composer.json | grep version | head -1 | grep -Po '\d+\.\d+\.\d+')
echo "version in composer.json: $VERSION"
for tag in `git tag`
do
    if [ $tag = $VERSION ]; then
        echo "version $VERSION already exists in git tags."
        exit 1
    fi
done
echo "[OK.]"

処理の流れ

1.composer.json の存在&読取権限チェック

 → ファイル無し or 読取権限無し → エラー&処理停止

2.composer.json から version の値切り出し

3.切り出した version を表示

4.git tag で出力されるタグ一覧についてループ

  → version と比較、一致すればエラー表示&処理停止

5.OK表示

バージョンの書式

前回の記事でも書いていますが、

ここでの「version」の書式は「1.2.3」のような書式です。

書式が「v1.2.3」のような書式の場合は、

grep -Po '\d+\.\d+\.\d+'

の箇所を

grep -Po 'v\d+\.\d+\.\d+'

に修正すればOKです。

実行してみる

まずは、composer.json内のversionが既存タグ内にある場合です。

リポジトリ内のパーミッション設定をいちいち行うのも

面倒なので、筆者はbash経由で実行します。

bash ./bin/CheckVersion.sh

チェックにひっかかりましたね。

では、既存タグにないバージョンに更新してみましょう。

スクリプトを実行してみます。

bash ./bin/CheckVersion.sh

composer.json内のversionが既存タグに無いことが判りました。

Composerパッケージのバージョンを変更したら、

composer update

を実行して「composer.lock」を更新しておきましょう。

これで安心してコミット、プッシュできます。

コメント

タイトルとURLをコピーしました