Gitリポジトリでgit release majorなどとすると設定したターゲットのファイルの指定行にあるバージョン番号をインクリメントし、コミット、タグ付けまでやるNode.jsスクリプトを書いて使っている。汎用的でどこかに公開とかまでは面倒みないものがあればいいのになと思って、適当にNode.jsで書いて使ってる。

Download: git-release.js

インストールはパスの通ったディレクトリにコピーしておまじないするだけ。semverモジュールに依存しているので、それをあらかじめグローバルにインストールしておく必要がある。コミットとタグ付けがGit専用なことに加え、Gitがgit-*で始まる実行ファイルがあるとサブコマンドとして呼んでくれるのを利用したり、設定をGitのローカル設定ファイルに書いたりして使うので、他のVCSではまったく使えない。

設定はgit configサブコマンドを使い、release.targetに対して、コロン区切りで対象ファイルと行番号を指定する。Gitのローカル設定ファイルに保存されることになる。

$ git config release.target package.json:4

複数のファイルを一気に書き換えたい場合は--addオプションを使って追加する。

$ git config --add release.target index.js:10
$ git config --add release.target README.md:1

releaseサブコマンドになっているはずなので、インクリメントする時には以下のようにインクリメント対象をmajor/minor/patchのいずれかで指定する。プリリリースやビルドには対応していない。

$ git release major

ちゃんと設定されていると、対象ファイルが書き換えられた上で、ステージングされ、簡単なメッセージが入力済みの状態でコミットのためにエディタが立ち上がる。エディタは-aevmというオプションで立ち上がるので、ちゃんとステージングされていること(-a)・実際に書き換わっているかの確認(-v)・コミット・メッセージの編集(-e)が行える安心仕様。入力済みのコミット・メッセージを削除してからエディタを閉じればそこで停止できたりもする。

エディタを閉じるとコミットが実行され、そのコミットにタグ付けを行い終了する。タグはv1.0.3という形で付けられる。カスタマイズする設定必要そう。

当初はこの後git pushgit push --tags、更には設定によりnpm publishgrunt deployまでを行えるようにしようかと考えていたけど、怖いのでそこまではやらないことにした。


シェル・スクリプトで書かれていた方がポータブルで便利そうだけど、そんなスキルはない。

追記

async使って書き直した。使い方は同じ。