From 5f5c1b28a48ae0ef08660e8c8648b80eeceb8d48 Mon Sep 17 00:00:00 2001
From: Dan Gillespie <dan@redspread.com>
Date: Sun, 6 Mar 2016 18:23:09 -0800
Subject: [PATCH] added makefile

---
 .travis.yml | 32 +++++++++++++-----------
 Makefile    | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 make.sh     | 16 ------------
 3 files changed, 100 insertions(+), 30 deletions(-)
 create mode 100644 Makefile
 delete mode 100755 make.sh

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
