Платформа ЦРНП "Мирокод" для разработки проектов
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.
111 lines
3.3 KiB
111 lines
3.3 KiB
trigger: |
|
- master |
|
|
|
strategy: |
|
matrix: |
|
linux: |
|
imageName: ubuntu-18.04 |
|
gorootDir: /usr/local |
|
mac: |
|
# Mojave |
|
imageName: macos-10.14 |
|
gorootDir: /usr/local |
|
windows: |
|
imageName: windows-2019 |
|
gorootDir: C:\ |
|
|
|
pool: |
|
vmImage: $(imageName) |
|
|
|
variables: |
|
GOROOT: $(gorootDir)/go |
|
GOPATH: $(system.defaultWorkingDirectory)/gopath |
|
GOBIN: $(GOPATH)/bin |
|
modulePath: '$(GOPATH)/src/github.com/$(build.repository.name)' |
|
# TODO: Enable modules after upstream dependency zstd supports them |
|
# TODO: modules should be the default in Go 1.13, so this won't be needed |
|
#GO111MODULE: on |
|
|
|
steps: |
|
|
|
- bash: git config --global core.autocrlf false |
|
displayName: "Disable line ending conversion for git to" |
|
|
|
- checkout: self |
|
|
|
- bash: | |
|
latestGo=$(curl "https://golang.org/VERSION?m=text") |
|
echo "##vso[task.setvariable variable=LATEST_GO]$latestGo" |
|
echo "Latest Go version: $latestGo" |
|
displayName: "Get latest Go version" |
|
|
|
- bash: | |
|
sudo rm -f $(which go) |
|
echo '##vso[task.prependpath]$(GOBIN)' |
|
echo '##vso[task.prependpath]$(GOROOT)/bin' |
|
mkdir -p '$(modulePath)' |
|
shopt -s extglob |
|
shopt -s dotglob |
|
mv !(gopath) '$(modulePath)' |
|
displayName: Remove old Go, set GOBIN/GOROOT, and move project into GOPATH |
|
|
|
# Install Go (this varies by platform) |
|
|
|
- bash: | |
|
wget "https://dl.google.com/go/$(LATEST_GO).linux-amd64.tar.gz" |
|
sudo tar -C $(gorootDir) -xzf "$(LATEST_GO).linux-amd64.tar.gz" |
|
condition: eq( variables['Agent.OS'], 'Linux' ) |
|
displayName: Install Go on Linux |
|
|
|
- bash: | |
|
wget "https://dl.google.com/go/$(LATEST_GO).darwin-amd64.tar.gz" |
|
sudo tar -C $(gorootDir) -xzf "$(LATEST_GO).darwin-amd64.tar.gz" |
|
condition: eq( variables['Agent.OS'], 'Darwin' ) |
|
displayName: Install Go on macOS |
|
|
|
- powershell: | |
|
echo "Downloading Go..." |
|
# Windows comes with BSD curl, which is MUCH faster than the native Windows HTTP |
|
curl.exe -fsSL -o "$(LATEST_GO).windows-amd64.zip" "https://dl.google.com/go/$(LATEST_GO).windows-amd64.zip" |
|
echo "Extracting Go..." |
|
# Yes, Windows tar (BSD tar) handles zip files. Who knew!? |
|
# (and it's MUCH, MUCH, MUCH faster than the native Windows expander) |
|
tar.exe xf "$(LATEST_GO).windows-amd64.zip" -C "$(gorootDir)" |
|
condition: eq( variables['Agent.OS'], 'Windows_NT' ) |
|
displayName: Install Go on Windows |
|
|
|
- bash: | |
|
printf "Using go at: $(which go)\n" |
|
printf "Go version: $(go version)\n" |
|
printf "\n\nGo environment:\n\n" |
|
go env |
|
printf "\n\nSystem environment:\n\n" |
|
env |
|
displayName: Print Go version and environment |
|
|
|
- script: | |
|
curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s v1.31.0 |
|
./bin/golangci-lint run -E gofmt -E goimports -E misspell ./... |
|
workingDirectory: '$(modulePath)' |
|
condition: eq( variables['Agent.OS'], 'Linux' ) |
|
displayName: Run Lint |
|
|
|
- bash: | |
|
go mod tidy |
|
if [ ! -z "$(git status --porcelain go.mod)" ]; then |
|
printf "go.mod has modifications\n" |
|
git diff go.mod |
|
exit 1 |
|
fi |
|
if [ ! -z "$(git status --porcelain go.sum)" ]; then |
|
printf "go.sum has modifications\n" |
|
git diff go.sum |
|
exit 1 |
|
fi |
|
workingDirectory: '$(modulePath)' |
|
displayName: Ensure that module definition and checksums are correct |
|
|
|
- script: | |
|
go test -race ./... |
|
workingDirectory: '$(modulePath)' |
|
displayName: Run tests
|
|
|