Платформа ЦРНП "Мирокод" для разработки проектов
https://git.mirocod.ru
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.
230 lines
5.9 KiB
230 lines
5.9 KiB
trigger: |
|
- master |
|
|
|
stages: |
|
- stage: fuzzit |
|
displayName: "Run Fuzzit" |
|
dependsOn: [] |
|
condition: and(succeeded(), eq(variables['Build.SourceBranchName'], 'master')) |
|
jobs: |
|
- job: submit |
|
displayName: "Submit" |
|
pool: |
|
vmImage: ubuntu-latest |
|
steps: |
|
- task: GoTool@0 |
|
displayName: "Install Go 1.15" |
|
inputs: |
|
version: "1.15" |
|
- script: echo "##vso[task.setvariable variable=PATH]${PATH}:/home/vsts/go/bin/" |
|
- script: mkdir -p ${HOME}/go/src/github.com/pelletier/go-toml |
|
- script: cp -R . ${HOME}/go/src/github.com/pelletier/go-toml |
|
- task: Bash@3 |
|
inputs: |
|
filePath: './fuzzit.sh' |
|
env: |
|
TYPE: fuzzing |
|
FUZZIT_API_KEY: $(FUZZIT_API_KEY) |
|
|
|
- stage: run_checks |
|
displayName: "Check" |
|
dependsOn: [] |
|
jobs: |
|
- job: fmt |
|
displayName: "fmt" |
|
pool: |
|
vmImage: ubuntu-latest |
|
steps: |
|
- task: GoTool@0 |
|
displayName: "Install Go 1.15" |
|
inputs: |
|
version: "1.15" |
|
- 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.15" |
|
inputs: |
|
version: "1.15" |
|
- 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.15" |
|
inputs: |
|
version: "1.15" |
|
- 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: fuzzing |
|
displayName: "fuzzing" |
|
pool: |
|
vmImage: ubuntu-latest |
|
steps: |
|
- task: GoTool@0 |
|
displayName: "Install Go 1.15" |
|
inputs: |
|
version: "1.15" |
|
- script: echo "##vso[task.setvariable variable=PATH]${PATH}:/home/vsts/go/bin/" |
|
- script: mkdir -p ${HOME}/go/src/github.com/pelletier/go-toml |
|
- script: cp -R . ${HOME}/go/src/github.com/pelletier/go-toml |
|
- task: Bash@3 |
|
inputs: |
|
filePath: './fuzzit.sh' |
|
env: |
|
TYPE: local-regression |
|
|
|
- job: go_unit_tests |
|
displayName: "unit tests" |
|
strategy: |
|
matrix: |
|
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' |
|
linux 1.14: |
|
goVersion: '1.14' |
|
imageName: 'ubuntu-latest' |
|
mac 1.14: |
|
goVersion: '1.14' |
|
imageName: 'macOS-latest' |
|
windows 1.14: |
|
goVersion: '1.14' |
|
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.15 |
|
- 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'
|
|
|