agileware-jp/redmine-pluginのinstall_pluginコマンドにcheckout-circle-branchオプションを追加した
バージョン0.0.24でリリースしています。
何ができるようになったか
Redmineプラグインの改良を行う際にプラグインが依存している他のプラグインも同時に改良が必要なとき自動テストしやすくなった。
具体的には現在テストしているブランチと同じ名前のブランチが依存プラグインのGitリポジトリに存在している場合、依存プラグインをインストールする際に、そのブランチからインストールするようになった。
install_pluginは何をするコマンドか
プラグインをテストするために必要な依存プラグインを入れるコマンドです。
gitリポジトリをplugins
ディレクトリ以下にコピーしてきます。
checkout-circle-branch
は何をするオプションか
CircleCIではデフォルトで設定されている環境変数がいくつかあります。
CIRCLE_BRANCH
はそのうちの1つです。
この環境変数には現在ビルド中のGitのブランチの名前が入ってます。
The name of the Git branch currently being built. https://circleci.com/docs/2.0/env-vars/
checkout-circle-branch
はbooleanのパラメータです。デフォルト値はtrue
です。これがtrue
の場合、依存プラグインのリポジトリに同じ名前のブランチが存在するとそのブランチをチェックアウトします。
例えばプラグインAのfoobarブランチをビルドしていて、プラグインBを install_plugin
コマンドで入れている場合、プラグインBのリポジトリのfoobarブランチの内容がインストールされます。foobarブランチがない場合masterブランチがインストールされます。
やっていること
こんな感じです。 parameters.branch
のデフォルト値は空文字列です。
branch="<< parameters.branch >>" if [ -z "$branch" ]; then branch='master' <<# parameters.checkout-circle-branch >> if [ -n "$(git ls-remote -h << parameters.redmine_plugin_repository >> $CIRCLE_BRANCH)" ]; then branch=$CIRCLE_BRANCH fi <</ parameters.checkout-circle-branch >> fi git clone --depth 1 --branch $branch << parameters.redmine_plugin_repository >>
実装上ハマったこと
タグを打ってビルドした際に他のブランチの意図せぬタグがチェックアウトされてしまった。
git ls-remote
に -h
オプションをつけてタグはチェックアウト対象に含まないようにして解決した。
まとめ
Redmineプラグイン開発で、同時に複数のリポジトリに改良を加える必要がある場合、ブランチの名前を合わせておくと自動で改良版を組み合わせてテストしてくれるようになった。便利。