azure-pipelines.yml 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. trigger:
  2. - master
  3. stages:
  4. - stage: run_checks
  5. displayName: "Check"
  6. dependsOn: []
  7. jobs:
  8. - job: fmt
  9. displayName: "fmt"
  10. pool:
  11. vmImage: ubuntu-latest
  12. steps:
  13. - task: GoTool@0
  14. displayName: "Install Go 1.16"
  15. inputs:
  16. version: "1.16"
  17. - task: Go@0
  18. displayName: "go fmt ./..."
  19. inputs:
  20. command: 'custom'
  21. customCommand: 'fmt'
  22. arguments: './...'
  23. - job: coverage
  24. displayName: "coverage"
  25. pool:
  26. vmImage: ubuntu-latest
  27. steps:
  28. - task: GoTool@0
  29. displayName: "Install Go 1.16"
  30. inputs:
  31. version: "1.16"
  32. - task: Go@0
  33. displayName: "Generate coverage"
  34. inputs:
  35. command: 'test'
  36. arguments: "-race -coverprofile=coverage.txt -covermode=atomic"
  37. - task: Bash@3
  38. inputs:
  39. targetType: 'inline'
  40. script: 'bash <(curl -s https://codecov.io/bash) -t ${CODECOV_TOKEN}'
  41. env:
  42. CODECOV_TOKEN: $(CODECOV_TOKEN)
  43. - job: benchmark
  44. displayName: "benchmark"
  45. pool:
  46. vmImage: ubuntu-latest
  47. steps:
  48. - task: GoTool@0
  49. displayName: "Install Go 1.16"
  50. inputs:
  51. version: "1.16"
  52. - script: echo "##vso[task.setvariable variable=PATH]${PATH}:/home/vsts/go/bin/"
  53. - task: Bash@3
  54. inputs:
  55. filePath: './benchmark.sh'
  56. arguments: "master $(Build.Repository.Uri)"
  57. - job: go_unit_tests
  58. displayName: "unit tests"
  59. strategy:
  60. matrix:
  61. linux 1.16:
  62. goVersion: '1.16'
  63. imageName: 'ubuntu-latest'
  64. mac 1.16:
  65. goVersion: '1.16'
  66. imageName: 'macOS-latest'
  67. windows 1.16:
  68. goVersion: '1.16'
  69. imageName: 'windows-latest'
  70. linux 1.15:
  71. goVersion: '1.15'
  72. imageName: 'ubuntu-latest'
  73. mac 1.15:
  74. goVersion: '1.15'
  75. imageName: 'macOS-latest'
  76. windows 1.15:
  77. goVersion: '1.15'
  78. imageName: 'windows-latest'
  79. pool:
  80. vmImage: $(imageName)
  81. steps:
  82. - task: GoTool@0
  83. displayName: "Install Go $(goVersion)"
  84. inputs:
  85. version: $(goVersion)
  86. - task: Go@0
  87. displayName: "go test ./..."
  88. inputs:
  89. command: 'test'
  90. arguments: './...'
  91. - stage: build_binaries
  92. displayName: "Build binaries"
  93. dependsOn: run_checks
  94. jobs:
  95. - job: build_binary
  96. displayName: "Build binary"
  97. strategy:
  98. matrix:
  99. linux_amd64:
  100. GOOS: linux
  101. GOARCH: amd64
  102. darwin_amd64:
  103. GOOS: darwin
  104. GOARCH: amd64
  105. windows_amd64:
  106. GOOS: windows
  107. GOARCH: amd64
  108. pool:
  109. vmImage: ubuntu-latest
  110. steps:
  111. - task: GoTool@0
  112. displayName: "Install Go"
  113. inputs:
  114. version: 1.16
  115. - task: Bash@3
  116. inputs:
  117. targetType: inline
  118. script: "make dist"
  119. env:
  120. go.goos: $(GOOS)
  121. go.goarch: $(GOARCH)
  122. - task: CopyFiles@2
  123. inputs:
  124. sourceFolder: '$(Build.SourcesDirectory)'
  125. contents: '*.tar.xz'
  126. TargetFolder: '$(Build.ArtifactStagingDirectory)'
  127. - task: PublishBuildArtifacts@1
  128. inputs:
  129. pathtoPublish: '$(Build.ArtifactStagingDirectory)'
  130. artifactName: binaries
  131. - stage: build_binaries_manifest
  132. displayName: "Build binaries manifest"
  133. dependsOn: build_binaries
  134. jobs:
  135. - job: build_manifest
  136. displayName: "Build binaries manifest"
  137. steps:
  138. - task: DownloadBuildArtifacts@0
  139. inputs:
  140. buildType: 'current'
  141. downloadType: 'single'
  142. artifactName: 'binaries'
  143. downloadPath: '$(Build.SourcesDirectory)'
  144. - task: Bash@3
  145. inputs:
  146. targetType: inline
  147. script: "cd binaries && sha256sum --binary *.tar.xz | tee $(Build.ArtifactStagingDirectory)/sha256sums.txt"
  148. - task: PublishBuildArtifacts@1
  149. inputs:
  150. pathtoPublish: '$(Build.ArtifactStagingDirectory)'
  151. artifactName: manifest
  152. - stage: build_docker_image
  153. displayName: "Build Docker image"
  154. dependsOn: run_checks
  155. jobs:
  156. - job: build
  157. displayName: "Build"
  158. pool:
  159. vmImage: ubuntu-latest
  160. steps:
  161. - task: Docker@2
  162. inputs:
  163. command: 'build'
  164. Dockerfile: 'Dockerfile'
  165. buildContext: '.'
  166. addPipelineData: false
  167. - stage: publish_docker_image
  168. displayName: "Publish Docker image"
  169. dependsOn: build_docker_image
  170. condition: and(succeeded(), eq(variables['Build.SourceBranchName'], 'master'))
  171. jobs:
  172. - job: publish
  173. displayName: "Publish"
  174. pool:
  175. vmImage: ubuntu-latest
  176. steps:
  177. - task: Docker@2
  178. inputs:
  179. containerRegistry: 'DockerHub'
  180. repository: 'pelletier/go-toml'
  181. command: 'buildAndPush'
  182. Dockerfile: 'Dockerfile'
  183. buildContext: '.'
  184. tags: 'latest'