diff --git a/.gitignore b/.gitignore index 167e7d16..60eb0b9d 100644 --- a/.gitignore +++ b/.gitignore @@ -27,6 +27,8 @@ _testmain.go build/ release/ cover/ +/vendor/ +/Godeps/_workspace/ examples/**/opt/containerbuddy/containerbuddy *.tar.gz .godeps diff --git a/.travis.yml b/.travis.yml index d6893197..238ef3c8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,6 +11,7 @@ services: ## Need docker-compose 1.5.x for Variable Interpolation env: DOCKER_COMPOSE_VERSION: 1.5.2 + GO15VENDOREXPERIMENT: 1 before_install: - sudo rm /usr/local/bin/docker-compose @@ -18,7 +19,10 @@ before_install: - chmod +x docker-compose - sudo mv docker-compose /usr/local/bin +install: + - make vendor + script: - - make clean lint build + - make lint build - make test - make integration diff --git a/Dockerfile b/Dockerfile index e00a6fef..85f5c3b2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,8 @@ FROM golang -RUN go get -u github.com/golang/lint/golint +RUN go get github.com/golang/lint/golint \ + && go get github.com/tools/godep ENV CGO_ENABLED 0 +ENV GO15VENDOREXPERIMENT 1 ENTRYPOINT ["make"] diff --git a/Godeps/Godeps.json b/Godeps/Godeps.json new file mode 100644 index 00000000..69dba679 --- /dev/null +++ b/Godeps/Godeps.json @@ -0,0 +1,52 @@ +{ + "ImportPath": "github.com/joyent/containerbuddy", + "GoVersion": "go1.5", + "Packages": [ + "./..." + ], + "Deps": [ + { + "ImportPath": "github.com/coreos/etcd/Godeps/_workspace/src/github.com/ugorji/go/codec", + "Comment": "v2.2.5-1-g6bc9b6e", + "Rev": "6bc9b6e4edf44b59bb99b3761e4461a1ba608b0b" + }, + { + "ImportPath": "github.com/coreos/etcd/Godeps/_workspace/src/golang.org/x/net/context", + "Comment": "v2.2.5-1-g6bc9b6e", + "Rev": "6bc9b6e4edf44b59bb99b3761e4461a1ba608b0b" + }, + { + "ImportPath": "github.com/coreos/etcd/client", + "Comment": "v2.2.5-1-g6bc9b6e", + "Rev": "6bc9b6e4edf44b59bb99b3761e4461a1ba608b0b" + }, + { + "ImportPath": "github.com/coreos/etcd/pkg/pathutil", + "Comment": "v2.2.5-1-g6bc9b6e", + "Rev": "6bc9b6e4edf44b59bb99b3761e4461a1ba608b0b" + }, + { + "ImportPath": "github.com/coreos/etcd/pkg/types", + "Comment": "v2.2.5-1-g6bc9b6e", + "Rev": "6bc9b6e4edf44b59bb99b3761e4461a1ba608b0b" + }, + { + "ImportPath": "github.com/docker/go-units", + "Comment": "v0.1.0-23-g5d2041e", + "Rev": "5d2041e26a699eaca682e2ea41c8f891e1060444" + }, + { + "ImportPath": "github.com/hashicorp/consul/api", + "Comment": "v0.5.2-461-g158eabd", + "Rev": "158eabdd6f2408067c1d7656fa10e49434f96480" + }, + { + "ImportPath": "github.com/samalba/dockerclient", + "Rev": "4278ba330b9475a8fa85520226479697f6c84482" + }, + { + "ImportPath": "golang.org/x/net/context", + "Rev": "7f88271ea9913b72aca44fa7fc8af919eacc17ce" + } + ] +} diff --git a/Godeps/Readme b/Godeps/Readme new file mode 100644 index 00000000..4cdaa53d --- /dev/null +++ b/Godeps/Readme @@ -0,0 +1,5 @@ +This directory tree is generated automatically by godep. + +Please do not edit. + +See https://github.com/tools/godep for more information. diff --git a/Makefile.docker b/Makefile.docker index 87890fc9..6dfa9ea8 100644 --- a/Makefile.docker +++ b/Makefile.docker @@ -5,35 +5,31 @@ SHELL := /bin/bash .SHELLFLAGS = -o pipefail -euc .DEFAULT_GOAL := build -.PHONY: all build check test cover +.PHONY: all build check test cover update-deps vendor -CONSUL_REF := 158eabdd6f2408067c1d7656fa10e49434f96480 -ETCD_REF := release-2.2 - -ROOT := /go -CDWD := cd ${ROOT}/src/containerbuddy +PACKAGE := github.com/joyent/containerbuddy +SRC := /go/src/${PACKAGE} +CDWD := cd ${SRC} +NO_VENDOR:= $(shell cd ${SRC} && go list ./... | grep -v /vendor/) +GO15VENDOREXPERIMENT := 1 +export GO15VENDOREXPERIMENT all: build cover -build: /go/src/github.com - ${CDWD} && go build -a -o /build/containerbuddy -ldflags "$(LDFLAGS)" - chmod 755 /build/containerbuddy +vendor: + ${CDWD} && godep restore -/go/src/github.com: - mkdir -p "${ROOT}/src/github.com/hashicorp" - git clone https://github.com/hashicorp/consul.git ${ROOT}/src/github.com/hashicorp/consul - cd ${ROOT}/src/github.com/hashicorp/consul && git checkout ${CONSUL_REF} - mkdir -p "${ROOT}/src/github.com/coreos" - git clone https://github.com/coreos/etcd.git ${ROOT}/src/github.com/coreos/etcd - cd ${ROOT}/src/github.com/coreos/etcd && git checkout ${ETCD_REF} +build: vendor + ${CDWD} && go build -a -o /build/containerbuddy -ldflags "$(LDFLAGS)" ./ + chmod 755 /build/containerbuddy lint: - ${CDWD} && go vet - ${CDWD} && go fmt - golint ${ROOT}/src/containerbuddy + ${CDWD} && go vet ${NO_VENDOR} + ${CDWD} && go fmt ${NO_VENDOR} + golint ${SRC} -test: /go/src/github.com - ${CDWD} && go test -v -coverprofile=/cover/coverage.out +test: + ${CDWD} && go test -v -coverprofile=/cover/coverage.out ./containerbuddy cover: test go tool cover -html=/cover/coverage.out -o /cover/coverage.html diff --git a/src/containerbuddy/config.go b/containerbuddy/config.go similarity index 99% rename from src/containerbuddy/config.go rename to containerbuddy/config.go index 97ad01db..6a1f3927 100644 --- a/src/containerbuddy/config.go +++ b/containerbuddy/config.go @@ -1,4 +1,4 @@ -package main +package containerbuddy import ( "bufio" diff --git a/src/containerbuddy/config_test.go b/containerbuddy/config_test.go similarity index 99% rename from src/containerbuddy/config_test.go rename to containerbuddy/config_test.go index 5fa36256..f1374155 100644 --- a/src/containerbuddy/config_test.go +++ b/containerbuddy/config_test.go @@ -1,4 +1,4 @@ -package main +package containerbuddy import ( "encoding/json" diff --git a/src/containerbuddy/consul.go b/containerbuddy/consul.go similarity index 99% rename from src/containerbuddy/consul.go rename to containerbuddy/consul.go index 301b6eea..eda64259 100644 --- a/src/containerbuddy/consul.go +++ b/containerbuddy/consul.go @@ -1,4 +1,4 @@ -package main +package containerbuddy import ( "fmt" diff --git a/src/containerbuddy/consul_test.go b/containerbuddy/consul_test.go similarity index 99% rename from src/containerbuddy/consul_test.go rename to containerbuddy/consul_test.go index 94cdb67d..bdf8e551 100644 --- a/src/containerbuddy/consul_test.go +++ b/containerbuddy/consul_test.go @@ -1,4 +1,4 @@ -package main +package containerbuddy import ( "testing" diff --git a/src/containerbuddy/discovery.go b/containerbuddy/discovery.go similarity index 92% rename from src/containerbuddy/discovery.go rename to containerbuddy/discovery.go index 9356d8ce..cf3783e0 100644 --- a/src/containerbuddy/discovery.go +++ b/containerbuddy/discovery.go @@ -1,4 +1,4 @@ -package main +package containerbuddy // DiscoveryService is an interface // which all service discovery backends must implement diff --git a/src/containerbuddy/etcd.go b/containerbuddy/etcd.go similarity index 98% rename from src/containerbuddy/etcd.go rename to containerbuddy/etcd.go index 72da9d6b..523fae02 100644 --- a/src/containerbuddy/etcd.go +++ b/containerbuddy/etcd.go @@ -1,4 +1,4 @@ -package main +package containerbuddy import ( "fmt" @@ -8,8 +8,8 @@ import ( "encoding/json" - "github.com/coreos/etcd/Godeps/_workspace/src/golang.org/x/net/context" "github.com/coreos/etcd/client" + "golang.org/x/net/context" ) // Etcd is a service discovery backend for CoreOS etcd diff --git a/src/containerbuddy/etcd_test.go b/containerbuddy/etcd_test.go similarity index 99% rename from src/containerbuddy/etcd_test.go rename to containerbuddy/etcd_test.go index 90a0d826..e94febe2 100644 --- a/src/containerbuddy/etcd_test.go +++ b/containerbuddy/etcd_test.go @@ -1,4 +1,4 @@ -package main +package containerbuddy import ( "testing" diff --git a/src/containerbuddy/ips.go b/containerbuddy/ips.go similarity index 99% rename from src/containerbuddy/ips.go rename to containerbuddy/ips.go index 49ce6d17..7e1383f7 100644 --- a/src/containerbuddy/ips.go +++ b/containerbuddy/ips.go @@ -1,4 +1,4 @@ -package main +package containerbuddy import ( "bytes" diff --git a/src/containerbuddy/ips_test.go b/containerbuddy/ips_test.go similarity index 99% rename from src/containerbuddy/ips_test.go rename to containerbuddy/ips_test.go index 3392560f..8a640bf5 100644 --- a/src/containerbuddy/ips_test.go +++ b/containerbuddy/ips_test.go @@ -1,4 +1,4 @@ -package main +package containerbuddy import ( "encoding/json" diff --git a/src/containerbuddy/main.go b/containerbuddy/main.go similarity index 97% rename from src/containerbuddy/main.go rename to containerbuddy/main.go index 9f1ba94d..f098e1ac 100644 --- a/src/containerbuddy/main.go +++ b/containerbuddy/main.go @@ -1,4 +1,4 @@ -package main +package containerbuddy import ( "flag" @@ -10,7 +10,8 @@ import ( "time" ) -func main() { +// Main executes the containerbuddy CLI +func Main() { // make sure we use only a single CPU so as not to cause // contention on the main application runtime.GOMAXPROCS(1) diff --git a/src/containerbuddy/main_test.go b/containerbuddy/main_test.go similarity index 98% rename from src/containerbuddy/main_test.go rename to containerbuddy/main_test.go index ff70a09e..b6f7474b 100644 --- a/src/containerbuddy/main_test.go +++ b/containerbuddy/main_test.go @@ -1,4 +1,4 @@ -package main +package containerbuddy import ( "testing" diff --git a/src/containerbuddy/signals.go b/containerbuddy/signals.go similarity index 99% rename from src/containerbuddy/signals.go rename to containerbuddy/signals.go index 48454e08..a2935844 100644 --- a/src/containerbuddy/signals.go +++ b/containerbuddy/signals.go @@ -1,4 +1,4 @@ -package main +package containerbuddy import ( "log" diff --git a/src/containerbuddy/signals_test.go b/containerbuddy/signals_test.go similarity index 99% rename from src/containerbuddy/signals_test.go rename to containerbuddy/signals_test.go index 99fe1c3c..06b987e6 100644 --- a/src/containerbuddy/signals_test.go +++ b/containerbuddy/signals_test.go @@ -1,4 +1,4 @@ -package main +package containerbuddy import ( "flag" diff --git a/src/containerbuddy/template.go b/containerbuddy/template.go similarity index 98% rename from src/containerbuddy/template.go rename to containerbuddy/template.go index 114f9beb..7d4bac94 100644 --- a/src/containerbuddy/template.go +++ b/containerbuddy/template.go @@ -1,4 +1,4 @@ -package main +package containerbuddy import ( "bytes" diff --git a/src/containerbuddy/template_test.go b/containerbuddy/template_test.go similarity index 98% rename from src/containerbuddy/template_test.go rename to containerbuddy/template_test.go index ddec089a..c34d7db3 100644 --- a/src/containerbuddy/template_test.go +++ b/containerbuddy/template_test.go @@ -1,4 +1,4 @@ -package main +package containerbuddy import ( "reflect" diff --git a/main.go b/main.go new file mode 100644 index 00000000..f4d66432 --- /dev/null +++ b/main.go @@ -0,0 +1,7 @@ +package main + +import "github.com/joyent/containerbuddy/containerbuddy" + +func main() { + containerbuddy.Main() +} diff --git a/makefile b/makefile index 5b12e6bc..0a163e2c 100644 --- a/makefile +++ b/makefile @@ -6,18 +6,22 @@ SHELL := /bin/bash .PHONY: clean test integration consul etcd run-consul run-etcd example example-consul example-etcd ship dockerfile docker cover lint VERSION ?= dev-build-not-for-release -LDFLAGS := '-X main.GitHash=$(shell git rev-parse --short HEAD) -X main.Version=${VERSION}' +LDFLAGS := '-X containerbuddy.GitHash=$(shell git rev-parse --short HEAD) -X containerbuddy.Version=${VERSION}' ROOT := $(shell pwd) +PACKAGE := github.com/joyent/containerbuddy +GO15VENDOREXPERIMENT := 1 +export GO15VENDOREXPERIMENT COMPOSE_PREFIX_ETCD := exetcd COMPOSE_PREFIX_CONSUL := exconsul + DOCKERMAKE := docker run --rm \ --link containerbuddy_consul:consul \ --link containerbuddy_etcd:etcd \ - -v ${ROOT}/src/containerbuddy:/go/src/containerbuddy \ - -v ${ROOT}/.godeps:/go/src \ + -v ${ROOT}/vendor:/go/src \ + -v ${ROOT}:/go/src/${PACKAGE} \ -v ${ROOT}/build:/build \ -v ${ROOT}/cover:/cover \ -v ${ROOT}/examples:/root/examples:ro \ @@ -26,7 +30,7 @@ DOCKERMAKE := docker run --rm \ containerbuddy_build clean: - rm -rf build release cover .godeps + rm -rf build release cover vendor docker rmi -f containerbuddy_build > /dev/null 2>&1 || true docker rm -f containerbuddy_consul > /dev/null 2>&1 || true docker rm -f containerbuddy_etcd > /dev/null 2>&1 || true @@ -46,6 +50,9 @@ docker: build/containerbuddy_build consul etcd build: docker ${DOCKERMAKE} build +vendor: docker + ${DOCKERMAKE} vendor + # ---------------------------------------------- # develop and test