shonen.hateblo.jp

やったこと,しらべたことを書く.

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 を探せばあるみたいです。

github.com