node-webkitアプリをTravis CI経由でGitHub Releaseにバイナリ登録する
Travis CIからデプロイ
Travis CIにはDeploymentという機能があり、Heroku等色々なサービスに対応しています。
その一つとして、GitHub Releasesに対してファイルをデプロイする事が出来ます。
- Travis CI: GitHub Releases Uploading
- Git tagとGitHub ReleasesとCHANGELOG.mdの自動化について | Web Scratch
- GitHub Releasesの使い方に関して
zipファイルならなんでも登録でき、登録するファイルサイズはリポジトリにpushするより大きくても問題ないので、バイナリサイズがでかいnode-webkitアプリには向いていると言えます。
この記事は基本的にはTravis-CI で Go の Windows 用バイナリを Github release に登録する - Qiitaと同じなので、先に読んでおくといいかと思います。
node-webkitアプリの実行ファイルの作成
node-webkitアプリの実行ファイル(バイナリ)の作成方法といっても基本的にランタイムを丸ごと入れた実行ファイルを作るだけです。
これはmllrsohn/node-webkit-builderを使うと簡単に行うことができます。
以下のように対応したいプラットフォームと、node-webkitアプリのrootディレクトリを指定するだけでプラットフォームごとの実行ファイルを作ってくれます。(デフォルトではbuild/
ディレクトリに作られる)
nwbuild -p 'win,osx,linux32,linux64' ./"
Macなら.app
、Windowsなら.exe
のようなファイルがそれぞれ、build/win/github-reader.exe
のような感じで作成されます。
ビルドスクリプト
GitHub Releasesに登録するためにはzipファイルでないと行けないので、ビルドしたものをzip化する必要があります。
azu/github-reader でのビルドスクリプトは以下のような感じです。
#!/bin/bash
if [[ "$TRAVIS_TAG" ]]; then
rm -rf build
nwbuild -p 'win,osx,linux32,linux64' ./ -o ./build
cd build
# ziped in build/
zip -q github-reader-osx.zip -r github-reader/osx
zip -q github-reader-win.zip -r github-reader/win
zip -q github-reader-linux32.zip -r github-reader/linux32
zip -q github-reader-linux64.zip -r github-reader/linux64
cd -
echo "ziped!"
else
echo "Not Release"
fi
このスクリプトをtravis.yml
でdeployする前に設定しておくと、ビルドした実行ファイルのzipファイルがプロジェクトのrootに並びます。
$TRAVIS_TAG
はTravis CIがつけてくれる環境変数で、git tagのコミットの時に値が入る変数となっています。値があるときのみビルドスクリプトを走らせる感じです。
(このzipを展開するとgithub-reader/osx/github-reader.app
のような無駄な階層が含まれるのを削るオプションはあるのかな?)
Travis CIの設定
Travis-CI で Go の Windows 用バイナリを Github release に登録する - Qiitaと全く同じことなので、簡単に解説します。
travis setup releases
を行うとGitHub Releasesへ登録するためのAPIキー等発行されて.travis.yml
に登録されます。
gem install travis
travis setup releases
ただし、上記の記事で書かれているようにall_branches: true
がないと正しく動かないバグあることに注意して下さい。
on:
repo: azu/github-reader
tags: true
all_branches: true
最終的な.travis.yml
は以下のようになりました。
deploy:
provider: releases
api_key:
secure: qS2igPviHIlN6zGVUPa9s5lh/TnYH/nELBxb9EfjXQzhaScV1/R3csjg0AI28Bh0ReSp1xhRWc7I5EiKLsS5wqYM821MfTiyrjoKneAjDYy5XeW4+kFKXaqvMgYK+v5f1CoiuJVKtJwVv5uEVb3NsXpX5qUGcLmIvmWmUoRrjik=
file:
- build/github-reader-osx.zip
- build/github-reader-win.zip
- build/github-reader-linux32.zip
- build/github-reader-linux64.zip
on:
repo: azu/github-reader
tags: true
all_branches: true
skip_cleanup: true
tags: true
にしておくと、git tagをつけたコミットに対してのみdeploy
が動作するようになります。(スクリプト側では$TRAVIS_TAG
を見てビルド)
このように設定したら後はgit tag
をはってpushするだけで、自動的に最新のタグにバイナリが登録されます。(Travis CIの回線結構早いのでローカルでやるより楽な気がします)
Tips
GitHub Releasesでは最新のタグにリンクを貼る方法が存在します。
https://github.com/azu/github-reader/releases/latest
という感じでバージョンではなく、latest
という指定をすると最新バージョンへリダイレクトされます。(添付したダウンロードファイルでは使えないのが不便…)
おわりに
Travis CIのDeploymentを使ってGitHub Releaseにnode-webkitアプリのバイナリを登録する方法について紹介しました。
node-webkitアプリはランタイムも含む都合上(含めない方法もありnwファイルがそれです)、ファイルサイズが数十から数百MBとなったりします。
GitHubにはpush出来るファイルにサイズ制限があるため、node-webkitアプリのバイナリをリポジトリに置くのは難しいと思います。
そのため、大きなファイルを配布する場合は、別の所におくか、GitHub Releaseを使うのが一般的です。
Travis CIはただのテストだけではなく、こういったデプロイの用途にも使えて便利だと思います。
GitHub Releaseでのバイナリ配布は以下から実例を見られます。
お知らせ欄
JavaScript Primerの書籍版がAmazonで購入できます。
JavaScriptに関する最新情報は週一でJSer.infoを更新しています。
GitHub Sponsorsでの支援を募集しています。