Golang のプロダクトで Travis CI を使ってみる(初心者用) #golang


以前作ったGolang と Line Notify を利用して API の証明書期限切れチェックで Travis CI に対応して、git に push したタイミングで自動的に goimports / golint / go vet を実行できるようにする。

Travis CI をセットアップ

Travis CI

「Sign Up」ボタンをクリック

内容を確認し「Authorize travis-ci」ボタンをクリック

パスワードを入力

連携完了

ダッシュボードでリポジトリが表示されていることを確認

※ 表示されない場合は「Sync account」ボタンをクリック

CI 対象のレポジトリにチェック

これで Travis CI の準備は完了

Git に Travis CI の設定を行う

プロジェクトのルートディレクトリに「.travis.yml」を作成

travis.yml
language: go

install:
 - go get -u golang.org/x/tools/cmd/goimports
 - go get -u github.com/golang/lint/golint

script:
 - go vet ./...
 - diff <(goimports -d .) <(printf "")
 - diff <(golint ./...) <(printf "")

追加したファイルを Git に push

$ git push origin master

結果を確認

エラーになっているので、原因を確認する

実行結果を log で確認

$ diff <(goimports -d .) <(printf "")
1,29d0
< diff -u apichecker.go.orig apichecker.go
< --- apichecker.go.orig    2017-10-04 15:47:01.829005000 +0000
< +++ apichecker.go 2017-10-04 15:47:01.829005000 +0000
< @@ -1,13 +1,13 @@
<  package main
<  
<  import (
< - "fmt"
< - "net/http"
<   "flag"
< + "fmt"
< + "io/ioutil"
<   "log"
< + "net/http"
<   "net/url"
<   "strings"
< - "io/ioutil"
<   "time"
<  )
<  
< @@ -37,7 +37,7 @@
<       expire := "-"
<       if len(resp.TLS.PeerCertificates) > 0 {
<           expireUTCTime := resp.TLS.PeerCertificates[0].NotAfter
< -         expireJSTTime := expireUTCTime.In(time.FixedZone("Asia/Tokyo", 9 * 60 * 60))
< +         expireJSTTime := expireUTCTime.In(time.FixedZone("Asia/Tokyo", 9*60*60))
<           expire = expireJSTTime.Format("06/01/02 15:04")
<       }
<       result = fmt.Sprintf("OK (expire=%s)\n%s", expire, endpoint)


The command "diff <(goimports -d .) <(printf "")" exited with 1.

goimports で diff が出ているのが原因なのが判明

goimports を実行して Git に再度 Push

$ goimports -w .

goimports 以外も問題なく実行できていルことを確認
```sh
$ go vet ./...

The command "go vet ./..." exited with 0.
$ diff <(goimports -d .) <(printf "")

The command "diff <(goimports -d .) <(printf "")" exited with 0.
$ diff <(golint ./...) <(printf "")

The command "diff <(golint ./...) <(printf "")" exited with 0.
```

おまけ(README.md に Travis CI の結果を表示)

「build:pass」ステータスアイコンをクリック

形式を Markdown に変更

README.md に追記

Appendix