1jobs:
2  - job: Build_Test
3    strategy:
4      matrix:
5        Linux_Go112:
6          vm.image: 'ubuntu-18.04'
7          go.version: '1.12'
8          GOROOT: '/usr/local/go$(go.version)'
9        Linux_Go113:
10          vm.image: 'ubuntu-18.04'
11          go.version: '1.13'
12          GOROOT: '/usr/local/go$(go.version)'
13
14    pool:
15      vmImage: $(vm.image)
16
17    variables:
18      GOPATH: '$(system.defaultWorkingDirectory)/work'
19      sdkPath: '$(GOPATH)/src/github.com/$(build.repository.name)'
20      IGNORE_BREAKING_CHANGES: true
21
22    steps:
23    - script: |
24        set -e
25        mkdir -p '$(GOPATH)/bin'
26        mkdir -p '$(sdkPath)'
27        shopt -s dotglob extglob
28        mv !(work) '$(sdkPath)'
29        echo '##vso[task.prependpath]$(GOROOT)/bin'
30        echo '##vso[task.prependpath]$(GOPATH)/bin'
31      displayName: 'Create Go Workspace'
32    - script: |
33        set -e
34        go version
35        curl -sSL https://raw.githubusercontent.com/golang/dep/master/install.sh | sh
36        dep ensure -v
37        go get -u golang.org/x/lint/golint
38      workingDirectory: '$(sdkPath)'
39      displayName: 'Install Dependencies'
40    - script: go vet $(go list ./... | grep -v vendor)
41      workingDirectory: '$(sdkPath)'
42      displayName: 'Vet'
43    - script: go build -v $(go list ./... | grep -v vendor)
44      workingDirectory: '$(sdkPath)'
45      displayName: 'Build'
46    - script: go test $(dirname $(find . -path ./vendor -prune -o -name '*_test.go' -print) | sort -u)
47      workingDirectory: '$(sdkPath)'
48      displayName: 'Run Tests'
49    - script: go run ./tools/apidiff/main.go packages ./services FETCH_HEAD~1 FETCH_HEAD --copyrepo --breakingchanges || $IGNORE_BREAKING_CHANGES
50      workingDirectory: '$(sdkPath)'
51      displayName: 'Display Breaking Changes'
52    - script: go run ./tools/pkgchk/main.go ./services --exceptions ./tools/pkgchk/exceptions.txt
53      workingDirectory: '$(sdkPath)'
54      displayName: 'Verify Package Directory'
55    - script: grep -L -r --include *.go --exclude-dir vendor -P "Copyright (\d{4}|\(c\)) Microsoft" ./ | tee >&2
56      workingDirectory: '$(sdkPath)'
57      displayName: 'Copyright Header Check'
58      failOnStderr: true
59      condition: succeededOrFailed()
60    - script: gofmt -s -l -w $(find . -path ./vendor -prune -o -name '*.go' -print) >&2
61      workingDirectory: '$(sdkPath)'
62      displayName: 'Format Check'
63      failOnStderr: true
64      condition: succeededOrFailed()
65    - script: |
66        golint ./storage/... >&2
67        golint ./tools/... >&2
68      workingDirectory: '$(sdkPath)'
69      displayName: 'Linter Check'
70      failOnStderr: true
71      condition: succeededOrFailed()
72