Github Actions を nodejs(npm) の repository で試してみた。
Github Actions とは?
ソフトウェアの品質を担保するために、定期的にビルドを行ったり、git push する前に自動的に単体テストを実行したりする 環境を整えている開発チームは少なくないと思います。
こういう環境はローカルに構築することは出来なくは無いのですが、複数人で開発しているとか、 repositoryが外部(Github)にあるとかだと、常時起動するサーバを準備して、jenkins等のCIツールを構築するのが一般的ではないでしょうか。
Github の Pull Request と連動したい場合は、Github の Webhook が便利ですが、Github から jenkins に POST できるよう、 サーバを公開しなければなりません。 趣味でさくらVPSを持っている人ならともかく、CI環境を構築するためだけにサーバを買ったり、 jenkinsをインストールしたりするのはオーバーキル感があります。
Github Actions は、上記に挙げた例をすべてGithub側で行うことが出来ます。 しかも公開repositoryなら無料で出来ます。つよい
現状
記事を書いている時点でBeta版であり、申請のようなものが必要で(といっても個人情報を入力するようなことは無いです)、 今すぐに利用開始は出来ません。
利用方法
省略
雑感
触ってみて思ったことを適当に書いていきます
ビルドを通すまで
はじめから書かれていたテンプレートを適当に書き直したのが以下です。
name: CI on: [push, pull_request] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - name: Run a one-line script run: echo Hello, world! - name: install, build, test run: | npm i -g babelify browserify mocha npm i npm run build npm run test
npm i -g babelify browserify mocha
で権限が無いよ!と失敗しました。
そして、適当に訂正してみたのが以下。
name: CI on: [push, pull_request] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - name: Run a one-line script run: echo Hello, world! - name: install, build, test run: | sudo npm i -g babelify browserify mocha npm i npm run build npm run test
sudo npm i -g babelify browserify mocha
は無事通りました。sudo
は使えるようなので、あのビルドツールが必要じゃあと思っても、
面倒な迂回策て手間を取られることは無いようです。
ちなみに npm run test
で失敗しました。これは自分がちゃんと普段からCIを回していないからですね…
失敗すると、コミットIDの横に☓と表示されます。わかりやすいですね。
4) [unit test] exec.js 標準入出力を伴う実行が出来る(spawn_fileio): Uncaught Error: spawn ruby ENOENT
Ruby は無いみたいなので sudo apt install ruby
が必要ですね
設定ファイルはrepository上に作る
ワークフローは、Actionsタブから新規作成できるのですが、.github/workflows/main.yml
なパスに作成されました。
Github Actions 以外でもつかえるようにするためでしょうか。
Github Actionsからpush出来る?
以下のように書いてみました。
- name: build, test run: | npm run build npm run test if [ `git diff | wc -l` -ne 0 ] ; then git add . git commit -m 'build by Github Actions' fi
ログはこんな感じで失敗しました。なるほどね?
*** Please tell me who you are. Run git config --global user.email "you@example.com" git config --global user.name "Your Name" to set your account's default identity. Omit --global to set the identity only in this repository.
言われたとおり、git config
する。
- name: build, test run: | git config --global user.email "you@example.com" git config --global user.name "Your Name" npm run build npm run test if [ `git diff | wc -l` -ne 0 ] ; then git add . git commit -m 'build by Github Actions' fi
テストはすべて通った。でも勝手に git push
されないよね。だよね。pushする。
- name: build, test run: | git config --global user.email "you@example.com" git config --global user.name "Your Name" npm run build npm run test if [ `git diff | wc -l` -ne 0 ] ; then git add . git commit -m 'build by Github Actions' fi git push origin
ダメでした。detached HEAD。
fatal: You are not currently on a branch. To push the history leading to the current (detached HEAD) state now, use git push origin HEAD:<name-of-remote-branch> ##[error]Process completed with exit code 128.
うーんこれは詰みかなあ。job実行をmaster push時に限定すれば git push origin HEAD:master
と書けそう。
まあ無限ループになりそうですしね。
別のjobに切るかあ…
追記
ダメでした
Run git push origin HEAD:master fatal: could not read Username for 'https://github.com': No such device or address ##[error]Process completed with exit code 128.
追記
Marketplace を探せばあるみたいです。