読者です 読者をやめる 読者になる 読者になる

CureApp開発者ブログ

アプリで治療する未来を創造するCureApp, Inc. のエンジニアブログです

CircleCIでリリースタグを自動生成する node-circleci-autorelease

いよいよ明日からiOSプロジェクトのビルドが有料になるCircleCI。 皆さんは活用していますか。CureAppはすべてのプロジェクトでCircleCIを活用しています。

そのなかで共通して欲しい処理をライブラリ化しましたので今回ご紹介します。

git commit -m 'release 1.2.3'
git push origin master

これで v1.2.3タグが発行されるようになる node-circleci-autorelease です。(nodeプロジェクト限定)

インストール

npm install --save-dev node-circleci-autorelease

プロジェクト内で上記コマンドを実行し、インストールします。 package.jsonのscriptsにいくつかコマンドが追加されます。

CircleCIにgithubのwrite権限を付与する

Continuous Integration and Deploymentを参考に、 githubにpush出来る権限をCircleCIに与えておきます。 これで準備は完了です!

circle.ymlの作成

npm run circle

これでcircle.ymlが作成され、

masterブランチの最新コミットが 'release X.Y.Z'という形式である場合に、 'vX.Y.Z'というタグを作ってくれます。

基本は以上ですが、カスタマイズしてみましょう。

hookを利用

post-dependencies

例えば、 「テストの前には毎回JS, CSSをbuildしたいが、バージョン管理はしたくない。しかしリリースタグには含めたい」 という要件があるかと思います。

babelやcoffee、scssなどのプリコンパイルをしたいが、それは管理したくないよと。

そういう場合、package.json

"scripts": {
    "post-dependencies": "grunt build"
}

こんな感じにビルドコマンドをpost-dependenciesに書くと、

CircleCIのdependenciesの最後に、つまりテストを走らせる直前に、このコマンドが走ります。

pre-release

一方、テストが走った後、リリースタグ発行前に実行したいコマンドがあれば

"scripts": {
    "pre-release": "grunt build"
}

のようにします。

.releaseignore

release前に、.gitignore.releaseignoreに差し替えられます。 たとえばspecなどの、リリース用には必要ないファイル/ディレクトリを指定しておくとよいでしょう。

gh-pages

github pagesも作ることができます。

この際、

"scripts": {
    "gh-pages": "grunt yuidoc"
}

のようにすると、gh-pagesブランチを生成する直前にgrunt yuidocが実行されます。

特定のディレクトリのみ公開したい場合には、 package.jsonに下記のように記述します。

{
  "node-circleci-autorelease": {
    "config": {
      "create-gh-pages": true,
      "gh-pages-dir": "doc"
    }
  }
}

より詳しい使い方は README にあります。

チェックしてみてください。