2019/08/19

如何在 AppVeyor 建置 golang 的 repository

最近因為工作關係開始學習 golang
同時也要練習寫 golang 的 unit test
所以想起了之前寫過兩篇文章
這篇文章就記錄一下怎麼用 AppVeyor 建置 golang 的 repository 吧

其實比想像中的簡單
一開始也是從 NEW PROJECT 的按鈕
把你用 golang 寫的 repository 加進來

AppVeyor 主畫面 [截圖自www.appveyor.com]

然後 AppVeyor 的官網文件有教你怎麼寫 yaml 來 build golang repository
照抄就可以了

# appveyor.yml
build: off

clone_folder: c:\gopath\src\github.com\$username\$project

environment:
  GOPATH: c:\gopath

stack: go 1.10

before_test:
  - go vet ./...

test_script:
  - go test ./...

這次也是第一次用 AppVeyor 的 yaml 檔
其實比想像中容易很多
而且網頁上的 Settings 裡面
也有 Export YAML 的功能
你可以利用網頁 UI 設定好一些內容後
透過 Export YAML 輸出 appveyor.yml
再放入你自己的 repository 內

Export YAML 畫面 [截圖自www.appveyor.com]

接下來就是測試看看 build 的結果啦

成功的 build 好與執行 unit tests [截圖自www.appveyor.com]

不過 golang 的 unit tests 輸出並非是 AppVeyor 支援的格式
所以我們得透過一個工具 go-junit-report 來做轉換
我查了一下
最後是在我的 appveyor.yml 檔加了兩個部分
一個是 install 的地方先抓下 go-junit-report
接著在執行 unit tests 的地方透過參數把輸出開成 verbose
然後利用 pipe 傳給 go-junit-report
當然最後要用到之前文章學到的
把 report 透過 API 傳到 AppVeyor 上

build: off

clone_folder: c:\gopath\src\github.com\LaurenceCheng\testutils

environment:
  GOPATH: c:\gopath

stack: go 1.12

install:
  - go get -u -v github.com/jstemmer/go-junit-report

before_test:
  - go vet ./...

test_script:
  - go test -v ./... 2>&1 | c:\gopath\bin\go-junit-report > tests_report.xml

on_finish:
- ps: (new-object net.webclient).UploadFile("https://ci.appveyor.com/api/testresults/junit/$($env:APPVEYOR_JOB_ID)", (Resolve-Path .\tests_report.xml))

之後就能成功在 Tests 頁面看到失敗與成功的案例了

unit test 成功與失敗的 report [截圖自www.appveyor.com]