From 37a98dbd7e8caf2e2681acef035e663edcfd5cf9 Mon Sep 17 00:00:00 2001
From: Dave Tucker
Date: Sat, 21 Nov 2015 21:56:28 +0000
Subject: [PATCH 1/2] Refactor to single Go daemon
- Refactor proxy and setup to single `dockercraft` daemon
- Automatically download the latest Docker release, remove the Docker
binary from the repo
- Use Golang 1.6
- Update to Docker 1.11.1 in the Dockerfile
- Dockerize all the testing
- Add test targets for checking our golang code
- Build and Serve targets for testing changes
- Address comments from go fmt and go lint
- Add simple circle.yml for CircleCI
Signed-off-by: Dave Tucker
---
Dockerfile | 19 +-
Makefile | 44 +
circle.yml | 12 +
docker/docker-1.9.1 | Bin 30222575 -> 0 bytes
go/src/github.com/Sirupsen/logrus/.gitignore | 1 -
go/src/github.com/Sirupsen/logrus/.travis.yml | 7 -
.../github.com/Sirupsen/logrus/CHANGELOG.md | 53 -
go/src/github.com/Sirupsen/logrus/README.md | 356 --
.../github.com/Sirupsen/logrus/entry_test.go | 77 -
.../Sirupsen/logrus/formatter_bench_test.go | 98 -
.../formatters/logstash/logstash_test.go | 52 -
.../github.com/Sirupsen/logrus/hook_test.go | 122 -
.../Sirupsen/logrus/hooks/bugsnag/bugsnag.go | 68 -
.../logrus/hooks/bugsnag/bugsnag_test.go | 64 -
.../logrus/hooks/papertrail/README.md | 28 -
.../logrus/hooks/papertrail/papertrail.go | 55 -
.../hooks/papertrail/papertrail_test.go | 26 -
.../Sirupsen/logrus/hooks/syslog/README.md | 39 -
.../logrus/hooks/syslog/syslog_test.go | 26 -
.../Sirupsen/logrus/json_formatter_test.go | 120 -
.../github.com/Sirupsen/logrus/logrus_test.go | 301 --
.../Sirupsen/logrus/text_formatter_test.go | 61 -
go/src/github.com/Sirupsen/logrus/writer.go | 31 -
.../docker/docker/pkg/units/duration_test.go | 46 -
.../docker/docker/pkg/units/size_test.go | 108 -
.../samalba/dockerclient/.gitignore | 22 -
.../github.com/samalba/dockerclient/README.md | 98 -
.../samalba/dockerclient/auth_test.go | 15 -
.../samalba/dockerclient/dockerclient_test.go | 241 --
.../samalba/dockerclient/engine_mock_test.go | 245 --
.../dockerclient/mockclient/mock_test.go | 32 -
go/src/gosetup/main.go | 67 -
main.go | 54 +
go/src/goproxy/main.go => proxy.go | 153 +-
setup.go | 50 +
start.sh | 10 +-
.../github.com/Sirupsen/logrus/LICENSE | 0
.../github.com/Sirupsen/logrus/doc.go | 0
.../github.com/Sirupsen/logrus/entry.go | 2 +-
.../Sirupsen/logrus/examples/basic/basic.go | 0
.../Sirupsen/logrus/examples/hook/hook.go | 0
.../github.com/Sirupsen/logrus/exported.go | 0
.../github.com/Sirupsen/logrus/formatter.go | 15 +-
.../logrus/formatters/logstash/logstash.go | 29 +-
.../github.com/Sirupsen/logrus/hooks.go | 0
.../Sirupsen/logrus/hooks/syslog/syslog.go | 11 +-
.../Sirupsen/logrus/hooks/test/test.go | 67 +
.../Sirupsen/logrus/json_formatter.go | 0
.../github.com/Sirupsen/logrus/logger.go | 6 +
.../github.com/Sirupsen/logrus/logrus.go | 47 +-
.../Sirupsen/logrus/terminal_bsd.go | 0
.../Sirupsen/logrus/terminal_linux.go | 0
.../Sirupsen/logrus/terminal_notwindows.go | 4 +-
.../Sirupsen/logrus/terminal_solaris.go | 15 +
.../Sirupsen/logrus/terminal_windows.go | 4 +-
.../Sirupsen/logrus/text_formatter.go | 8 +-
vendor/github.com/Sirupsen/logrus/writer.go | 53 +
.../github.com/davecgh/go-spew/spew/LICENSE | 13 +
.../github.com/davecgh/go-spew/spew/bypass.go | 151 +
.../davecgh/go-spew/spew/bypasssafe.go | 37 +
.../github.com/davecgh/go-spew/spew/common.go | 341 ++
.../github.com/davecgh/go-spew/spew/config.go | 297 ++
vendor/github.com/davecgh/go-spew/spew/doc.go | 202 ++
.../github.com/davecgh/go-spew/spew/dump.go | 509 +++
.../github.com/davecgh/go-spew/spew/format.go | 419 +++
.../github.com/davecgh/go-spew/spew/spew.go | 148 +
.../github.com/docker/go-units}/duration.go | 0
.../github.com/docker/go-units}/size.go | 12 +-
vendor/github.com/docker/go-units/ulimit.go | 118 +
.../pmezard/go-difflib/difflib/LICENSE | 27 +
.../pmezard/go-difflib/difflib/difflib.go | 772 +++++
.../github.com/samalba/dockerclient/LICENSE | 0
.../github.com/samalba/dockerclient/auth.go | 7 +-
.../samalba/dockerclient/dockerclient.go | 136 +-
.../samalba/dockerclient/example_responses.go | 2 +
.../samalba/dockerclient/examples/events.go | 0
.../dockerclient/examples/stats/stats.go | 2 +-
.../samalba/dockerclient/interface.go | 12 +-
.../samalba/dockerclient/mockclient/mock.go | 23 +-
.../samalba/dockerclient/nopclient/nop.go | 16 +-
vendor/github.com/samalba/dockerclient/tls.go | 38 +
.../github.com/samalba/dockerclient/types.go | 240 +-
.../github.com/samalba/dockerclient/utils.go | 12 +-
vendor/github.com/stretchr/objx/LICENSE.md | 23 +
vendor/github.com/stretchr/objx/accessors.go | 179 +
vendor/github.com/stretchr/objx/constants.go | 13 +
.../github.com/stretchr/objx/conversions.go | 117 +
vendor/github.com/stretchr/objx/doc.go | 72 +
vendor/github.com/stretchr/objx/map.go | 222 ++
vendor/github.com/stretchr/objx/mutations.go | 81 +
vendor/github.com/stretchr/objx/security.go | 14 +
vendor/github.com/stretchr/objx/tests.go | 17 +
.../stretchr/objx/type_specific_codegen.go | 2881 +++++++++++++++++
vendor/github.com/stretchr/objx/value.go | 56 +
.../stretchr/testify/assert/LICENCE.txt | 22 +
.../stretchr/testify/assert/LICENSE | 22 +
.../testify/assert/assertion_forward.go | 387 +++
.../stretchr/testify/assert/assertions.go | 1004 ++++++
.../github.com/stretchr/testify/assert/doc.go | 45 +
.../stretchr/testify/assert/errors.go | 10 +
.../testify/assert/forward_assertions.go | 16 +
.../testify/assert/http_assertions.go | 106 +
.../stretchr/testify/mock/LICENCE.txt | 22 +
.../github.com/stretchr/testify/mock/LICENSE | 22 +
.../github.com/stretchr/testify/mock/doc.go | 44 +
.../github.com/stretchr/testify/mock/mock.go | 693 ++++
vendor/gopkg.in/airbrake/gobrake.v2/LICENSE | 27 +
.../gopkg.in/airbrake/gobrake.v2/gobrake.go | 16 +
vendor/gopkg.in/airbrake/gobrake.v2/notice.go | 78 +
.../gopkg.in/airbrake/gobrake.v2/notifier.go | 238 ++
vendor/gopkg.in/airbrake/gobrake.v2/util.go | 59 +
.../gemnasium/logrus-airbrake-hook.v2/LICENSE | 21 +
.../logrus-airbrake-hook.v2/airbrake.go | 80 +
vendor/manifest | 89 +
world/Plugins/Docker/docker.lua | 12 +-
115 files changed, 10584 insertions(+), 2700 deletions(-)
create mode 100644 Makefile
create mode 100644 circle.yml
delete mode 100644 docker/docker-1.9.1
delete mode 100644 go/src/github.com/Sirupsen/logrus/.gitignore
delete mode 100644 go/src/github.com/Sirupsen/logrus/.travis.yml
delete mode 100644 go/src/github.com/Sirupsen/logrus/CHANGELOG.md
delete mode 100644 go/src/github.com/Sirupsen/logrus/README.md
delete mode 100644 go/src/github.com/Sirupsen/logrus/entry_test.go
delete mode 100644 go/src/github.com/Sirupsen/logrus/formatter_bench_test.go
delete mode 100644 go/src/github.com/Sirupsen/logrus/formatters/logstash/logstash_test.go
delete mode 100644 go/src/github.com/Sirupsen/logrus/hook_test.go
delete mode 100644 go/src/github.com/Sirupsen/logrus/hooks/bugsnag/bugsnag.go
delete mode 100644 go/src/github.com/Sirupsen/logrus/hooks/bugsnag/bugsnag_test.go
delete mode 100644 go/src/github.com/Sirupsen/logrus/hooks/papertrail/README.md
delete mode 100644 go/src/github.com/Sirupsen/logrus/hooks/papertrail/papertrail.go
delete mode 100644 go/src/github.com/Sirupsen/logrus/hooks/papertrail/papertrail_test.go
delete mode 100644 go/src/github.com/Sirupsen/logrus/hooks/syslog/README.md
delete mode 100644 go/src/github.com/Sirupsen/logrus/hooks/syslog/syslog_test.go
delete mode 100644 go/src/github.com/Sirupsen/logrus/json_formatter_test.go
delete mode 100644 go/src/github.com/Sirupsen/logrus/logrus_test.go
delete mode 100644 go/src/github.com/Sirupsen/logrus/text_formatter_test.go
delete mode 100644 go/src/github.com/Sirupsen/logrus/writer.go
delete mode 100755 go/src/github.com/docker/docker/pkg/units/duration_test.go
delete mode 100755 go/src/github.com/docker/docker/pkg/units/size_test.go
delete mode 100755 go/src/github.com/samalba/dockerclient/.gitignore
delete mode 100755 go/src/github.com/samalba/dockerclient/README.md
delete mode 100755 go/src/github.com/samalba/dockerclient/auth_test.go
delete mode 100755 go/src/github.com/samalba/dockerclient/dockerclient_test.go
delete mode 100755 go/src/github.com/samalba/dockerclient/engine_mock_test.go
delete mode 100755 go/src/github.com/samalba/dockerclient/mockclient/mock_test.go
delete mode 100644 go/src/gosetup/main.go
create mode 100644 main.go
rename go/src/goproxy/main.go => proxy.go (63%)
create mode 100644 setup.go
rename {go/src => vendor}/github.com/Sirupsen/logrus/LICENSE (100%)
rename {go/src => vendor}/github.com/Sirupsen/logrus/doc.go (100%)
rename {go/src => vendor}/github.com/Sirupsen/logrus/entry.go (99%)
rename {go/src => vendor}/github.com/Sirupsen/logrus/examples/basic/basic.go (100%)
rename {go/src => vendor}/github.com/Sirupsen/logrus/examples/hook/hook.go (100%)
rename {go/src => vendor}/github.com/Sirupsen/logrus/exported.go (100%)
rename {go/src => vendor}/github.com/Sirupsen/logrus/formatter.go (85%)
rename {go/src => vendor}/github.com/Sirupsen/logrus/formatters/logstash/logstash.go (60%)
rename {go/src => vendor}/github.com/Sirupsen/logrus/hooks.go (100%)
rename {go/src => vendor}/github.com/Sirupsen/logrus/hooks/syslog/syslog.go (89%)
create mode 100644 vendor/github.com/Sirupsen/logrus/hooks/test/test.go
rename {go/src => vendor}/github.com/Sirupsen/logrus/json_formatter.go (100%)
rename {go/src => vendor}/github.com/Sirupsen/logrus/logger.go (96%)
rename {go/src => vendor}/github.com/Sirupsen/logrus/logrus.go (66%)
rename {go/src => vendor}/github.com/Sirupsen/logrus/terminal_bsd.go (100%)
rename {go/src => vendor}/github.com/Sirupsen/logrus/terminal_linux.go (100%)
rename {go/src => vendor}/github.com/Sirupsen/logrus/terminal_notwindows.go (83%)
create mode 100644 vendor/github.com/Sirupsen/logrus/terminal_solaris.go
rename {go/src => vendor}/github.com/Sirupsen/logrus/terminal_windows.go (85%)
rename {go/src => vendor}/github.com/Sirupsen/logrus/text_formatter.go (97%)
create mode 100644 vendor/github.com/Sirupsen/logrus/writer.go
create mode 100644 vendor/github.com/davecgh/go-spew/spew/LICENSE
create mode 100644 vendor/github.com/davecgh/go-spew/spew/bypass.go
create mode 100644 vendor/github.com/davecgh/go-spew/spew/bypasssafe.go
create mode 100644 vendor/github.com/davecgh/go-spew/spew/common.go
create mode 100644 vendor/github.com/davecgh/go-spew/spew/config.go
create mode 100644 vendor/github.com/davecgh/go-spew/spew/doc.go
create mode 100644 vendor/github.com/davecgh/go-spew/spew/dump.go
create mode 100644 vendor/github.com/davecgh/go-spew/spew/format.go
create mode 100644 vendor/github.com/davecgh/go-spew/spew/spew.go
rename {go/src/github.com/docker/docker/pkg/units => vendor/github.com/docker/go-units}/duration.go (100%)
mode change 100755 => 100644
rename {go/src/github.com/docker/docker/pkg/units => vendor/github.com/docker/go-units}/size.go (90%)
mode change 100755 => 100644
create mode 100644 vendor/github.com/docker/go-units/ulimit.go
create mode 100644 vendor/github.com/pmezard/go-difflib/difflib/LICENSE
create mode 100644 vendor/github.com/pmezard/go-difflib/difflib/difflib.go
rename {go/src => vendor}/github.com/samalba/dockerclient/LICENSE (100%)
mode change 100755 => 100644
rename {go/src => vendor}/github.com/samalba/dockerclient/auth.go (82%)
mode change 100755 => 100644
rename {go/src => vendor}/github.com/samalba/dockerclient/dockerclient.go (86%)
mode change 100755 => 100644
rename {go/src => vendor}/github.com/samalba/dockerclient/example_responses.go (66%)
mode change 100755 => 100644
rename {go/src => vendor}/github.com/samalba/dockerclient/examples/events.go (100%)
mode change 100755 => 100644
rename {go/src => vendor}/github.com/samalba/dockerclient/examples/stats/stats.go (92%)
mode change 100755 => 100644
rename {go/src => vendor}/github.com/samalba/dockerclient/interface.go (78%)
mode change 100755 => 100644
rename {go/src => vendor}/github.com/samalba/dockerclient/mockclient/mock.go (88%)
mode change 100755 => 100644
rename {go/src => vendor}/github.com/samalba/dockerclient/nopclient/nop.go (88%)
mode change 100755 => 100644
create mode 100644 vendor/github.com/samalba/dockerclient/tls.go
rename {go/src => vendor}/github.com/samalba/dockerclient/types.go (68%)
mode change 100755 => 100644
rename {go/src => vendor}/github.com/samalba/dockerclient/utils.go (62%)
mode change 100755 => 100644
create mode 100644 vendor/github.com/stretchr/objx/LICENSE.md
create mode 100644 vendor/github.com/stretchr/objx/accessors.go
create mode 100644 vendor/github.com/stretchr/objx/constants.go
create mode 100644 vendor/github.com/stretchr/objx/conversions.go
create mode 100644 vendor/github.com/stretchr/objx/doc.go
create mode 100644 vendor/github.com/stretchr/objx/map.go
create mode 100644 vendor/github.com/stretchr/objx/mutations.go
create mode 100644 vendor/github.com/stretchr/objx/security.go
create mode 100644 vendor/github.com/stretchr/objx/tests.go
create mode 100644 vendor/github.com/stretchr/objx/type_specific_codegen.go
create mode 100644 vendor/github.com/stretchr/objx/value.go
create mode 100644 vendor/github.com/stretchr/testify/assert/LICENCE.txt
create mode 100644 vendor/github.com/stretchr/testify/assert/LICENSE
create mode 100644 vendor/github.com/stretchr/testify/assert/assertion_forward.go
create mode 100644 vendor/github.com/stretchr/testify/assert/assertions.go
create mode 100644 vendor/github.com/stretchr/testify/assert/doc.go
create mode 100644 vendor/github.com/stretchr/testify/assert/errors.go
create mode 100644 vendor/github.com/stretchr/testify/assert/forward_assertions.go
create mode 100644 vendor/github.com/stretchr/testify/assert/http_assertions.go
create mode 100644 vendor/github.com/stretchr/testify/mock/LICENCE.txt
create mode 100644 vendor/github.com/stretchr/testify/mock/LICENSE
create mode 100644 vendor/github.com/stretchr/testify/mock/doc.go
create mode 100644 vendor/github.com/stretchr/testify/mock/mock.go
create mode 100644 vendor/gopkg.in/airbrake/gobrake.v2/LICENSE
create mode 100644 vendor/gopkg.in/airbrake/gobrake.v2/gobrake.go
create mode 100644 vendor/gopkg.in/airbrake/gobrake.v2/notice.go
create mode 100644 vendor/gopkg.in/airbrake/gobrake.v2/notifier.go
create mode 100644 vendor/gopkg.in/airbrake/gobrake.v2/util.go
create mode 100644 vendor/gopkg.in/gemnasium/logrus-airbrake-hook.v2/LICENSE
create mode 100644 vendor/gopkg.in/gemnasium/logrus-airbrake-hook.v2/airbrake.go
create mode 100644 vendor/manifest
diff --git a/Dockerfile b/Dockerfile
index 109e4268..1efc559c 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,20 +1,25 @@
-FROM golang:1.5.1
+FROM golang:1.6
+
+ENV DOCKER_VERSION 1.11.1
# Copy latest docker client(s)
-COPY ./docker/docker-1.9.1 /bin/docker-1.9.1
-RUN chmod +x /bin/docker-*
+RUN curl -sSL -o docker.tgz https://get.docker.com/builds/Linux/x86_64/docker-${DOCKER_VERSION}.tgz &&\
+ tar -xvf docker.tgz --strip-components=1 -C /bin && rm docker.tgz &&\
+ chmod +x /bin/docker-* &&\
+ ln -s /bin/docker /bin/docker-${DOCKER_VERSION}
# Copy Go code and install applications
-COPY ./go /go
-RUN cd /go/src/goproxy; go install
-RUN cd /go/src/gosetup; go install
+WORKDIR /go/src/github.com/docker/dockercraft
+COPY . .
+RUN go install
# Download Cuberite server (Minecraft C++ server)
# and load up a special empty world for Dockercraft
WORKDIR /srv
RUN sh -c "$(wget -qO - https://raw.githubusercontent.com/cuberite/cuberite/master/easyinstall.sh)" && mv Server cuberite_server
+RUN ln -s /srv/cuberite_server/Cuberite /usr/bin/cuberite
COPY ./world world
COPY ./docs/img/logo64x64.png logo.png
COPY ./start.sh start.sh
-CMD ["/bin/bash","/srv/start.sh"]
+CMD ["/bin/sh", "/srv/start.sh"]
diff --git a/Makefile b/Makefile
new file mode 100644
index 00000000..4a24c479
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,44 @@
+.PHONY: all test test-local install-deps lint fmt vet build serve
+
+REPO_NAME = dockercraft
+REPO_OWNER = docker
+PKG_NAME = github.com/${REPO_OWNER}/${REPO_NAME}
+IMAGE = golang:1.6
+IMAGE_NAME = dockercraft-dev
+CONTAINER_NAME = dockercraft-dev-container
+
+all: test
+
+test-local: install-deps fmt lint vet
+ @echo "+ $@"
+ @go test -v .
+
+test:
+ @docker run -v ${shell pwd}:/go/src/${PKG_NAME} -w /go/src/${PKG_NAME} ${IMAGE} make test-local
+
+install-deps:
+ @echo "+ $@"
+ @go get -u github.com/golang/lint/golint
+
+lint:
+ @echo "+ $@"
+ @test -z "$$(golint ./... | grep -v vendor/ | tee /dev/stderr)"
+
+fmt:
+ @echo "+ $@"
+ @test -z "$$(gofmt -s -l . | grep -v vendor/ | tee /dev/stderr)"
+
+vet:
+ @echo "+ $@"
+ @go vet .
+
+build:
+ @echo "+ $@"
+ @docker build -t ${IMAGE_NAME} .
+
+serve:
+ @docker run -it --rm \
+ --name ${CONTAINER_NAME} \
+ -p 25566:25565 \
+ -v /var/run/docker.sock:/var/run/docker.sock \
+ ${IMAGE_NAME}
diff --git a/circle.yml b/circle.yml
new file mode 100644
index 00000000..d7d8e41b
--- /dev/null
+++ b/circle.yml
@@ -0,0 +1,12 @@
+---
+machine:
+ services:
+ - docker
+
+dependencies:
+ override:
+ - echo "Nothing to see here.."
+
+test:
+ override:
+ - make test
diff --git a/docker/docker-1.9.1 b/docker/docker-1.9.1
deleted file mode 100644
index 8090020c99d609b19cc7553d5e0f2f2d7acbb407..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 30222575
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