You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
188 lines
4.7 KiB
188 lines
4.7 KiB
trigger:
|
|
- master
|
|
|
|
stages:
|
|
- stage: run_checks
|
|
displayName: "Check"
|
|
dependsOn: []
|
|
jobs:
|
|
- job: fmt
|
|
displayName: "fmt"
|
|
pool:
|
|
vmImage: ubuntu-latest
|
|
steps:
|
|
- task: GoTool@0
|
|
displayName: "Install Go 1.16"
|
|
inputs:
|
|
version: "1.16"
|
|
- task: Go@0
|
|
displayName: "go fmt ./..."
|
|
inputs:
|
|
command: 'custom'
|
|
customCommand: 'fmt'
|
|
arguments: './...'
|
|
- job: coverage
|
|
displayName: "coverage"
|
|
pool:
|
|
vmImage: ubuntu-latest
|
|
steps:
|
|
- task: GoTool@0
|
|
displayName: "Install Go 1.16"
|
|
inputs:
|
|
version: "1.16"
|
|
- task: Go@0
|
|
displayName: "Generate coverage"
|
|
inputs:
|
|
command: 'test'
|
|
arguments: "-race -coverprofile=coverage.txt -covermode=atomic"
|
|
- task: Bash@3
|
|
inputs:
|
|
targetType: 'inline'
|
|
script: 'bash <(curl -s https://codecov.io/bash) -t ${CODECOV_TOKEN}'
|
|
env:
|
|
CODECOV_TOKEN: $(CODECOV_TOKEN)
|
|
- job: benchmark
|
|
displayName: "benchmark"
|
|
pool:
|
|
vmImage: ubuntu-latest
|
|
steps:
|
|
- task: GoTool@0
|
|
displayName: "Install Go 1.16"
|
|
inputs:
|
|
version: "1.16"
|
|
- script: echo "##vso[task.setvariable variable=PATH]${PATH}:/home/vsts/go/bin/"
|
|
- task: Bash@3
|
|
inputs:
|
|
filePath: './benchmark.sh'
|
|
arguments: "master $(Build.Repository.Uri)"
|
|
|
|
- job: go_unit_tests
|
|
displayName: "unit tests"
|
|
strategy:
|
|
matrix:
|
|
linux 1.16:
|
|
goVersion: '1.16'
|
|
imageName: 'ubuntu-latest'
|
|
mac 1.16:
|
|
goVersion: '1.16'
|
|
imageName: 'macOS-latest'
|
|
windows 1.16:
|
|
goVersion: '1.16'
|
|
imageName: 'windows-latest'
|
|
linux 1.15:
|
|
goVersion: '1.15'
|
|
imageName: 'ubuntu-latest'
|
|
mac 1.15:
|
|
goVersion: '1.15'
|
|
imageName: 'macOS-latest'
|
|
windows 1.15:
|
|
goVersion: '1.15'
|
|
imageName: 'windows-latest'
|
|
pool:
|
|
vmImage: $(imageName)
|
|
steps:
|
|
- task: GoTool@0
|
|
displayName: "Install Go $(goVersion)"
|
|
inputs:
|
|
version: $(goVersion)
|
|
- task: Go@0
|
|
displayName: "go test ./..."
|
|
inputs:
|
|
command: 'test'
|
|
arguments: './...'
|
|
- stage: build_binaries
|
|
displayName: "Build binaries"
|
|
dependsOn: run_checks
|
|
jobs:
|
|
- job: build_binary
|
|
displayName: "Build binary"
|
|
strategy:
|
|
matrix:
|
|
linux_amd64:
|
|
GOOS: linux
|
|
GOARCH: amd64
|
|
darwin_amd64:
|
|
GOOS: darwin
|
|
GOARCH: amd64
|
|
windows_amd64:
|
|
GOOS: windows
|
|
GOARCH: amd64
|
|
pool:
|
|
vmImage: ubuntu-latest
|
|
steps:
|
|
- task: GoTool@0
|
|
displayName: "Install Go"
|
|
inputs:
|
|
version: 1.16
|
|
- task: Bash@3
|
|
inputs:
|
|
targetType: inline
|
|
script: "make dist"
|
|
env:
|
|
go.goos: $(GOOS)
|
|
go.goarch: $(GOARCH)
|
|
- task: CopyFiles@2
|
|
inputs:
|
|
sourceFolder: '$(Build.SourcesDirectory)'
|
|
contents: '*.tar.xz'
|
|
TargetFolder: '$(Build.ArtifactStagingDirectory)'
|
|
- task: PublishBuildArtifacts@1
|
|
inputs:
|
|
pathtoPublish: '$(Build.ArtifactStagingDirectory)'
|
|
artifactName: binaries
|
|
- stage: build_binaries_manifest
|
|
displayName: "Build binaries manifest"
|
|
dependsOn: build_binaries
|
|
jobs:
|
|
- job: build_manifest
|
|
displayName: "Build binaries manifest"
|
|
steps:
|
|
- task: DownloadBuildArtifacts@0
|
|
inputs:
|
|
buildType: 'current'
|
|
downloadType: 'single'
|
|
artifactName: 'binaries'
|
|
downloadPath: '$(Build.SourcesDirectory)'
|
|
- task: Bash@3
|
|
inputs:
|
|
targetType: inline
|
|
script: "cd binaries && sha256sum --binary *.tar.xz | tee $(Build.ArtifactStagingDirectory)/sha256sums.txt"
|
|
- task: PublishBuildArtifacts@1
|
|
inputs:
|
|
pathtoPublish: '$(Build.ArtifactStagingDirectory)'
|
|
artifactName: manifest
|
|
|
|
- stage: build_docker_image
|
|
displayName: "Build Docker image"
|
|
dependsOn: run_checks
|
|
jobs:
|
|
- job: build
|
|
displayName: "Build"
|
|
pool:
|
|
vmImage: ubuntu-latest
|
|
steps:
|
|
- task: Docker@2
|
|
inputs:
|
|
command: 'build'
|
|
Dockerfile: 'Dockerfile'
|
|
buildContext: '.'
|
|
addPipelineData: false
|
|
|
|
- stage: publish_docker_image
|
|
displayName: "Publish Docker image"
|
|
dependsOn: build_docker_image
|
|
condition: and(succeeded(), eq(variables['Build.SourceBranchName'], 'master'))
|
|
jobs:
|
|
- job: publish
|
|
displayName: "Publish"
|
|
pool:
|
|
vmImage: ubuntu-latest
|
|
steps:
|
|
- task: Docker@2
|
|
inputs:
|
|
containerRegistry: 'DockerHub'
|
|
repository: 'pelletier/go-toml'
|
|
command: 'buildAndPush'
|
|
Dockerfile: 'Dockerfile'
|
|
buildContext: '.'
|
|
tags: 'latest'
|
|
|