diff --git a/.travis.yml b/.travis.yml index bf666a5..2d20cf7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,27 +2,31 @@ language: go sudo: false go: - 1.6 -env: - - SPREAD="./pkg/... ./cli/... ./cmd/..." go_import_path: rsprd.com/spread install: - # install golint - - go get -u github.com/golang/lint/golint + # install build dependencies + - make deps before_script: - - go vet $SPREAD + - make validate script: - - go test -v $SPREAD + - make test after_success: - - | - while IFS=' ' read -ra PKG; do - for i in "${PKG[@]}"; do - echo "Running golint on $i:" - golint $i - printf "#########################\n\n\n" - done - done <<< "$SPREAD" + # If release then crosscompile + - if [ -n "$TRAVIS_TAG" ]; then make crossbuild; else echo "Skipping release build..."; fi + +deploy: + provider: releases + api_key: + secure: Jqzgb1hVOHhXAtzr1CaYtz9Ws8VGbyTP5qdWr9Dobg69hCTQDLg8Yuc/pJBIMtajxiQnrNmcI5ZpSdrPd1mxUKQBxr6ra3A8G/Utnfs8ilO0qDR4/pF+G+dVZlIUT/8iAfvpEiCkEckndrB/fVgR1p3o4R7kceHsjduTy+dX0j1v9jN1FA901o2C6tz3OYGn85q7p0wYXOd6l4WhtRK2EShvcPMG7Hs5Vz9Ihb7cznH1Lxpst2zohXz45O0vzfyFLXJp4RftAvg/1IOl9E4OTIanL9SQckRxfFRI57AAogKdJPYrbm8L7/HxRN96lW5e8EtNZXf77Orc/9NvR4YENRUINDhaCxz+IUTtU2TLt4nyCtHCEGyqFJ4ZnK5+sO4Ha7STiPVLNZSfu6rZPo3l77o0JTLo/IK8QtTrQ6H6JyjN3brle/FoOJTxtbjZ/DZKpR4QweO2zG4sQ8sKS8KuQ4LUx9Gm4ucuI8vsWIUsSMg8mKkCCQzf2z84Ih5FxZEwzXrAH+xVrrmUQlsgF3KflT/78LnJMFhOoxO+CPW2sStxndxh2L8duLOt+Jrf4URUnrjwGyWhebPcTI/gj0wuRUFY3VahkmWAD4r/3A/62s1/mc2vYwT9VLRxtKsA16Ur5ujM4nUVfJG/nYVE07+rqrngd9OCvmM8u5WmFpMqKWc= + skip_cleanup: true + file: + - ./build/spread_linux_amd64 + - ./build/spread_darwin_amd64 + - ./build/spread_windows_amd64.exe + on: + tags: true diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..5a55ce4 --- /dev/null +++ b/Makefile @@ -0,0 +1,82 @@ +BASE := rsprd.com/spread +CMD_NAME := spread + +EXEC_PKG := $(BASE)/cmd/$(CMD_NAME) +PKGS := ./pkg/... ./cli/... ./cmd/... + +GOX_OS ?= linux darwin windows +GOX_ARCH ?= amd64 + +GO ?= go +GOX ?= gox +GOFMT ?= gofmt # eventually should add "-s" +GOLINT ?= golint + +GOFILES := find . -name '*.go' -not -path "./vendor/*" + +GOBUILD_LDFLAGS ?= +GOBUILD_FLAGS ?= +GOTEST_FLAGS ?= -v +GOX_FLAGS ?= -output="build/{{.Dir}}_{{.OS}}_{{.Arch}}" -os="${GOX_OS}" -arch="${GOX_ARCH}" + +GOX_OS ?= linux darwin windows +GOX_ARCH ?= amd64 + +.PHONY: all +all: clean validate test + +.PHONY: release +release: validate test crossbuild + +.PHONY: test +test: build + $(GO) test $(GOTEST_FLAGS) $(PKGS) + +.PHONY: validate +validate: lint checkgofmt vet + +.PHONY: build +build: + $(GO) install $(GOBUILD_FLAGS) $(GOBUILD_LDFLAGS) $(EXEC_PKG) + +.PHONY: crossbuild +crossbuild: deps gox-setup + $(GOX) $(GOX_FLAGS) -gcflags="$(GOBUILD_FLAGS)" -ldflags="$(GOBUILD_LDFLAGS)" $(EXEC_PKG) + +.PHONY: vet +vet: + $(GO) vet $(PKGS) + +lint: .golint-install + for pkg in $(PKGS); do \ + echo "Running golint on $$i:"; \ + golint $$i; \ + done; + +.PHONY: checkgofmt +checkgofmt: + # get all go files and run go fmt on them + $(GOFILES) | xargs $(GOFMT) -l + files=$$($(GOFILES) | xargs $(GOFMT) -l); echo "test $$files"; if [[ -n "$$files" ]]; then \ + echo "Error: '$(GOFMT)' needs to be run on:"; \ + echo "$${files}"; \ + exit 1; \ + fi; + +.PHONY: deps +deps: .golint-install .gox-install + +.golint-install: + $(GO) get -x github.com/golang/lint/golint > $@ + +PHONY: gox-setup +gox-setup: .gox-install + +.gox-install: + $(GO) get -x github.com/mitchellh/gox > $@ + +.PHONY: clean +clean: + rm -vf .gox-* .golint-* + rm -rfv ./build + $(GO) clean $(PKGS) || true diff --git a/make.sh b/make.sh deleted file mode 100755 index 61e27dc..0000000 --- a/make.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env bash - -# Setting up GOPATH - -# create gopath -export GOPATH="$(pwd)/.gopath" -rm -rf $GOPATH -mkdir -p $GOPATH/src/rsprd.com/spread - -# Ensure vendoring is enabled (for 1.5) -export GO15VENDOREXPERIMENT=1 - -# link source to GOPATH -cp -r * $GOPATH/src/rsprd.com/spread/ - -go build -v rsprd.com/spread/cmd/spread