agileware-jp/redmine-pluginのinstall_pluginコマンドにcheckout-circle-branchオプションを追加した

バージョン0.0.24でリリースしています。

github.com

何ができるようになったか

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プラグイン開発で、同時に複数のリポジトリに改良を加える必要がある場合、ブランチの名前を合わせておくと自動で改良版を組み合わせてテストしてくれるようになった。便利。

いいなと思ったらKyashでお金を下さい
20191128011151
GitHubスポンサーも受け付けています
https://github.com/sponsors/hanachin/