この記事の目的
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」を更新しておきましょう。
これで安心してコミット、プッシュできます。
コメント