--- # Azure pipelines build for rclone # Parts stolen shamelessly from all round the Internet, especially Caddy trigger: tags: include: - '*' strategy: matrix: go1.9: imageName: ubuntu-16.04 gorootDir: /usr/local GO_VERSION: go1.9.7 MAKE_QUICKTEST: true go1.10: imageName: ubuntu-16.04 gorootDir: /usr/local GO_VERSION: go1.10.8 MAKE_QUICKTEST: true go1.11: imageName: ubuntu-16.04 gorootDir: /usr/local GO_VERSION: go1.11.8 MAKE_QUICKTEST: true linux: imageName: ubuntu-16.04 gorootDir: /usr/local GO_VERSION: latest GOTAGS: cmount BUILD_FLAGS: '-include "^linux/"' MAKE_CHECK: true MAKE_QUICKTEST: true DEPLOY: true other_os: imageName: ubuntu-16.04 gorootDir: /usr/local GO_VERSION: latest BUILD_FLAGS: '-exclude "^(windows|darwin|linux)/"' MAKE_COMPILE_ALL: true DEPLOY: true modules_race: imageName: ubuntu-16.04 gorootDir: /usr/local GO_VERSION: latest GO111MODULE: on GOPROXY: https://proxy.golang.org MAKE_QUICKTEST: true RACEMAKE_QUICKTEST: true mac: imageName: macos-10.13 gorootDir: /usr/local GO_VERSION: latest GOTAGS: "" # cmount doesn't work on osx travis for some reason BUILD_FLAGS: '-include "^darwin/" -cgo' MAKE_QUICKTEST: true RACEMAKE_QUICKTEST: true DEPLOY: true windows: imageName: windows-2019 gorootDir: C:\ GO_VERSION: latest BUILD_FLAGS: '-include "^windows/amd64" -cgo' # 386 doesn't build yet MAKE_QUICKTEST: true DEPLOY: true pool: vmImage: $(imageName) variables: GOROOT: $(gorootDir)/go GOPATH: $(system.defaultWorkingDirectory)/gopath GOBIN: $(GOPATH)/bin modulePath: '$(GOPATH)/src/github.com/$(build.repository.name)' GO111MODULE: 'off' GOTAGS: cmount GO_LATEST: false CPATH: '' steps: - bash: | latestGo=$(curl "https://golang.org/VERSION?m=text") echo "##vso[task.setvariable variable=GO_VERSION]$latestGo" echo "##vso[task.setvariable variable=GO_LATEST]true" echo "Latest Go version: $latestGo" condition: eq( variables['GO_VERSION'], 'latest' ) 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 Libraries (varies by platform) - bash: | sudo modprobe fuse sudo chmod 666 /dev/fuse sudo chown root:$USER /etc/fuse.conf sudo apt-get install fuse libfuse-dev rpm pkg-config condition: eq( variables['Agent.OS'], 'Linux' ) displayName: Install Libraries on Linux - bash: | brew update brew tap caskroom/cask brew cask install osxfuse condition: eq( variables['Agent.OS'], 'Darwin' ) displayName: Install Libraries on macOS - powershell: | choco install -y winfsp zip make Write-Host "##vso[task.setvariable variable=CPATH]C:\Program Files\WinFsp\inc\fuse;C:\Program Files (x86)\WinFsp\inc\fuse" condition: eq( variables['Agent.OS'], 'Windows_NT' ) displayName: Install Libraries on Windows # Install Go (this varies by platform) - bash: | wget "https://dl.google.com/go/$(GO_VERSION).linux-amd64.tar.gz" sudo mkdir $(gorootDir) sudo chown ${USER}:${USER} $(gorootDir) tar -C $(gorootDir) -xzf "$(GO_VERSION).linux-amd64.tar.gz" condition: eq( variables['Agent.OS'], 'Linux' ) displayName: Install Go on Linux - bash: | wget "https://dl.google.com/go/$(GO_VERSION).darwin-amd64.tar.gz" sudo tar -C $(gorootDir) -xzf "$(GO_VERSION).darwin-amd64.tar.gz" condition: eq( variables['Agent.OS'], 'Darwin' ) displayName: Install Go on macOS - powershell: | Write-Host "Downloading Go... (please be patient, I am very slow)" (New-Object System.Net.WebClient).DownloadFile("https://dl.google.com/go/$(GO_VERSION).windows-amd64.zip", "$(GO_VERSION).windows-amd64.zip") Write-Host "Extracting Go... (I'm slow too)" Expand-Archive "$(GO_VERSION).windows-amd64.zip" -DestinationPath "$(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 printf "\n\nRclone environment:\n\n" make vars workingDirectory: '$(modulePath)' displayName: Print Go version and environment - script: | make make quicktest workingDirectory: '$(modulePath)' displayName: Run tests condition: eq( variables['MAKE_QUICKTEST'], 'true' ) - bash: | make racequicktest workingDirectory: '$(modulePath)' displayName: Race test condition: eq( variables['RACEMAKE_QUICKTEST'], 'true' ) - bash: | make build_dep make check workingDirectory: '$(modulePath)' displayName: Code quality test condition: eq( variables['MAKE_CHECK'], 'true' ) - bash: | make compile_all workingDirectory: '$(modulePath)' displayName: Compile all architectures test condition: eq( variables['MAKE_COMPILE_ALL'], 'true' ) - bash: | make vars # FIXME travis_beta workingDirectory: '$(modulePath)' displayName: Deploy built binaries condition: and( eq( variables['DEPLOY'], 'true' ), ne( variables['Build.Reason'], 'PullRequest' ) )