先日、werckerを試してみて、なかなか良かったので早速SwiftでのCIをやってみることにしました。
今回やること
今回、やろうとしているのは、とりあえずGithubにプッシュされた時にwercker上でSwiftのテストコードをビルドし実行させるということのみです。
また、ソースコードはGithubに一式置いています。
https://github.com/d-abe/swift_spectre_wercker
Swiftのテストライブラリには、Spectreを選びました。
BDDスタイルなのと、Swift Package Manager(以下SPM)に準拠していて使い方がわかりやすかったことから決めました。
Spectreの使い方
SPMから使うので、spectre-buildというのを入れます。Package.swiftは以下のようになります。
テストの書き方は、
という感じです(公式サイトのサンプルまんま)。
これを、以下のように動かします。
# ビルドして $ swift build # テストコードを起動 $ .build/debug/spectre-build
werckerのDocker環境
werckerは以前説明したようにDockerで動きますのでイメージが必要です。
今回、Kituraを試した時に作ったDockerfileのイメージをDocker Hubにpushしてみたのでそれを使います(ただし、今回はKituraは出てきません。今後使う予定!)。
ちなみにDockerfileはこんな感じです。
wercker.yml
では、これを使ってwercker.ymlを作ります。
といっても、build時にswift buildと.build/debug/spectre-buildを実行するだけなので簡単ですね。
ここで、devパイプラインも作っているのですが、私の環境が悪いのかわからないのですが以下のスクリーンショットのようなエラーが出てうまく動きませんでした。
ここには写っていませんが、golangのエラーがずらずらずら・・とこの後も出ています。原因不明です。。
ローカルでビルドしてみる
次に、ローカルで実験してみます。wercker-cliを入れていれば、
$ wercker build --> Executing pipeline --> Running step: setup environment Pulling from dabe/kitura-ubuntu: latest :(省略) Linking Library: .build/debug/Commander.a Compiling Swift Module 'spectrebuild' (2 sources) Linking Executable: .build/debug/spectre-build Compiling Swift Module 'swift_spectre_wercker' (1 sources) Linking Executable: .build/debug/swift_spectre_wercker -> a person -> has a name -> returns the name as description 2 passes and 0 failures --> Steps passed: 36.11s --> Pipeline finished: 37.25s
と、出て成功するはずです。
wercker上でビルド
ここまできたら、werckerのアプリケーションを作成してビルドさせてみます。先ほどのソース一式をコミットしたら、werckerで取り込んでアプリケーションを作成します。wercker.ymlは既にあるので早速ビルド!
どうやらうまくいきました。
終わりに
今後はKituraを使ってBDDでテストをしつつまずはシンプルなWebアプリケーションを作ってみたいです。
なお今回残念だったのが、MacのローカルでKituraのライブラリを入れてspectre-buildを動かそうとするとpcre2関連のライブラリエラーが出てしまってうまく動きませんでした。。