From 1bd8183af1cc78f289a1f4682b2d9dd2eebb7ed1 Mon Sep 17 00:00:00 2001 From: Nick Craig-Wood Date: Thu, 24 Jan 2019 11:14:37 +0000 Subject: [PATCH] build: use matrix build for travis This makes the build more efficient, the .travis.yml file more comprehensible and reduces the Makefile spaghetti. Windows support is commented out for the moment as it isn't very reliable yet. --- .travis.yml | 107 ++++++++++++++++++++++++++++++++++++++-------------- Makefile | 22 ++++------- 2 files changed, 85 insertions(+), 44 deletions(-) diff --git a/.travis.yml b/.travis.yml index cf7d15e17..dd9fa80bc 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,27 +1,33 @@ +--- language: go sudo: required dist: trusty os: -- linux -go: -- 1.8.x -- 1.9.x -- 1.10.x -- 1.11.x -- 1.12.x -- tip + - linux go_import_path: github.com/ncw/rclone before_install: -- if [[ $TRAVIS_OS_NAME == linux ]]; then sudo modprobe fuse ; sudo chmod 666 /dev/fuse ; sudo chown root:$USER /etc/fuse.conf ; fi -- if [[ $TRAVIS_OS_NAME == osx ]]; then brew update && brew tap caskroom/cask && brew cask install osxfuse ; fi + - git fetch --unshallow --tags + - | + if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then + sudo modprobe fuse + sudo chmod 666 /dev/fuse + sudo chown root:$USER /etc/fuse.conf + fi + if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then + brew update + brew tap caskroom/cask + brew cask install osxfuse + fi + if [[ "$TRAVIS_OS_NAME" == "windows" ]]; then + choco install -y winfsp zip make + cd ../.. # fix crlf in git checkout + mv $TRAVIS_REPO_SLUG _old + git config --global core.autocrlf false + git clone _old $TRAVIS_REPO_SLUG + cd $TRAVIS_REPO_SLUG + fi install: -- git fetch --unshallow --tags -- make vars -- make build_dep -script: -- make check -- make quicktest -- make compile_all + - make vars env: global: - GOTAGS=cmount @@ -32,23 +38,66 @@ env: addons: apt: packages: - - fuse - - libfuse-dev - - rpm - - pkg-config + - fuse + - libfuse-dev + - rpm + - pkg-config cache: directories: - $HOME/.cache/go-build matrix: allow_failures: - - go: tip + - go: tip include: - - os: osx - go: 1.12.x - env: GOTAGS="" - cache: - directories: - - $HOME/Library/Caches/go-build + - go: 1.8.x + script: + - make quicktest + - go: 1.9.x + script: + - make quicktest + - go: 1.10.x + script: + - make quicktest + - go: 1.11.x + script: + - make quicktest + - go: 1.12.x + env: + - GOTAGS=cmount + script: + - make build_dep + - make check + - make quicktest + - make racequicktest + - make compile_all + - os: osx + go: 1.12.x + env: + - GOTAGS= # cmount doesn't work on osx travis for some reason + cache: + directories: + - $HOME/Library/Caches/go-build + script: + - make + - make quicktest + - make racequicktest + # - os: windows + # go: 1.12.x + # env: + # - GOTAGS=cmount + # - CPATH='C:\Program Files (x86)\WinFsp\inc\fuse' + # #filter_secrets: false # works around a problem with secrets under windows + # cache: + # directories: + # - ${LocalAppData}/go-build + # script: + # - make + # - make quicktest + # - make racequicktest + - go: tip + script: + - make quicktest + deploy: provider: script script: make travis_beta @@ -57,4 +106,4 @@ deploy: repo: ncw/rclone all_branches: true go: 1.12.x - condition: $TRAVIS_PULL_REQUEST == false + condition: $TRAVIS_PULL_REQUEST == false && $TRAVIS_OS_NAME != "windows" diff --git a/Makefile b/Makefile index 5ea9d7201..e3c454a2e 100644 --- a/Makefile +++ b/Makefile @@ -17,8 +17,6 @@ ifneq ($(TAG),$(LAST_TAG)) endif GO_VERSION := $(shell go version) GO_FILES := $(shell go list ./... | grep -v /vendor/ ) -# Run full tests if go >= go1.12 -FULL_TESTS := $(shell go version | perl -lne 'print "go$$1.$$2" if /go(\d+)\.(\d+)/ && ($$1 > 1 || $$2 >= 12)') BETA_PATH := $(BRANCH_PATH)$(TAG) BETA_URL := https://beta.rclone.org/$(BETA_PATH)/ BETA_UPLOAD_ROOT := memstore:beta-rclone-org @@ -42,7 +40,6 @@ vars: @echo LAST_TAG="'$(LAST_TAG)'" @echo NEW_TAG="'$(NEW_TAG)'" @echo GO_VERSION="'$(GO_VERSION)'" - @echo FULL_TESTS="'$(FULL_TESTS)'" @echo BETA_URL="'$(BETA_URL)'" version: @@ -57,28 +54,22 @@ test: rclone # Quick test quicktest: RCLONE_CONFIG="/notfound" go test $(BUILDTAGS) $(GO_FILES) -ifdef FULL_TESTS + +racequicktest: RCLONE_CONFIG="/notfound" go test $(BUILDTAGS) -cpu=2 -race $(GO_FILES) -endif # Do source code quality checks check: rclone -ifdef FULL_TESTS @# we still run go vet for -printfuncs which golangci-lint doesn't do yet @# see: https://github.com/golangci/golangci-lint/issues/204 @echo "-- START CODE QUALITY REPORT -------------------------------" @go vet $(BUILDTAGS) -printfuncs Debugf,Infof,Logf,Errorf ./... @golangci-lint run ./... @echo "-- END CODE QUALITY REPORT ---------------------------------" -else - @echo Skipping source quality tests as version of go too old -endif # Get the build dependencies build_dep: -ifdef FULL_TESTS go run bin/get-github-release.go -extract golangci-lint golangci/golangci-lint 'golangci-lint-.*\.tar\.gz' -endif # Get the release dependencies release_dep: @@ -162,11 +153,7 @@ log_since_last_release: git log $(LAST_TAG).. compile_all: -ifdef FULL_TESTS go run bin/cross-compile.go -parallel 8 -compile-only $(BUILDTAGS) $(TAG) -else - @echo Skipping compile all as version of go too old -endif appveyor_upload: rclone --config bin/travis.rclone.conf -v copy --exclude '*beta-latest*' build/ $(BETA_UPLOAD) @@ -186,6 +173,11 @@ BUILD_FLAGS := -exclude "^(windows|darwin)/" ifeq ($(TRAVIS_OS_NAME),osx) BUILD_FLAGS := -include "^darwin/" -cgo endif +ifeq ($(TRAVIS_OS_NAME),windows) +# BUILD_FLAGS := -include "^windows/" -cgo +# 386 doesn't build yet + BUILD_FLAGS := -include "^windows/amd64" -cgo +endif travis_beta: ifeq ($(TRAVIS_OS_NAME),linux)