Thanks Driven Life

日々是感謝

TravisCI 上で「(GNU, BSD) sed & 各 shell」の組み合わせでテストする

成果物

雰囲気こんな感じです。

github.com/gongo/tpdiff/.travis.yml

経緯

gongo.hatenablog.com

  1. 先日書いた sed を、せっかくなので GitHub に置いておこう
  2. せっかく GitHub に置くのだからテストでも書こう

というところから始まりました。

https://github.com/gongo/tpdiff

さてテストを書くぞ!といったところで、何を重点的に見れば良いか:

  1. 使用する shell も人それぞれ違うはず
  2. sed には GNU 版 と BSD 版がある

この2点が特に注意すべきところと考えました。

1番に関しては「POSIX 準拠かどうか」みたいなのを ShellCheck を用いて確認はしているのですが、 やっぱり実際に動作した結果を見たいという気持ちがあります。

2番については、ユーザの使用マシンが Linux だったり OS X (macOS) だったりで sed にも違いが出てくるはずなので、ここも気をつけないといけません。

TraviCI ではこうしました

上記の注意点を踏まえ、TravisCI でテストを実行してもらうために

  1. 実行環境を Linux(Ubuntu) と OS X の2つを指定する
  2. テストしたい Shell をテスト前にインストールする

こんな感じにしました。

os:
  - linux
  - osx

env:
  - SH=mksh
  - SH=dash
  - SH=bash
  - SH=zsh

BSD sed が (TravisCI が用意する) Ubuntu 環境に簡単に用意できれば話は早かったのですが、なかなか難しそうだったので BSD sed を標準で持つ OSX 環境を用意してもらうことで、そこを補うことにしました。

refs: The Build Environment - Travis CI

env に定義したテスト対象のシェル選定理由なんですが、まあ特にこれといった理由はないんですけど、これぐらいカバーしてればいいかなーと。

ちょっとした問題点

TracisCI で OS X を使用すると、さすがに起動が遅くて全体的なテスト実行時間はそこそこ掛かってしまいます。

例えば https://travis-ci.org/gongo/tpdiff/builds/156956287 を見ると

> Elapsed time 21 min 12 sec
> Total time 3 min 51 sec

テストそのものの実行時間は短いのですが、環境を用意するのも併せると 20分ぐらい掛かっているのがわかります。 まあいいかってことで今は気にしてないです。

まとめ

どなたか UbuntuGNU/BSD sed を用意できる方法知りませんか

参考