diff --git a/.gitignore b/.gitignore index e43b0f9889..68fc691841 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ .DS_Store +/build diff --git a/Makefile b/Makefile new file mode 100644 index 0000000000..d8a54239b6 --- /dev/null +++ b/Makefile @@ -0,0 +1,19 @@ +# +# github.com/docker/cli +# + +.PHONY: build clean cross + +# build the CLI +build: clean + @go build -o ./build/docker ./cmd/docker + +# remove build artifacts +clean: + @rm -rf ./build + +# build the CLI for multiple architectures +cross: clean + @gox -output build/docker-{{.OS}}-{{.Arch}} \ + -osarch="linux/arm linux/amd64 darwin/amd64 windows/amd64" \ + ./cmd/docker diff --git a/README.md b/README.md index 5608b5d390..f3967a75a7 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,57 @@ It's composed of 3 main folders * `/client` - the API client, used by `/cli`. * `/cmd/docker` - the entrypoint of the cli, aka the main. +Development +=========== + +### Build locally + +``` +$ make build +``` + +``` +$ make clean +``` + +You will need [gox](https://github.com/mitchellh/gox) for this one: + +``` +$ make cross +``` + +If you don't have [gox](https://github.com/mitchellh/gox), you can use the "in-container" version of `make cross`, listed below. + +### Build inside container + +``` +$ make -f docker.Makefile build +``` + +``` +$ make -f docker.Makefile clean +``` + +``` +$ make -f docker.Makefile cross +``` + +### In-container development environment + +``` +$ make -f docker.Makefile dev +``` + +Then you can use the [build locally](#build-locally) commands: + +``` +$ make build +``` + +``` +$ make clean +``` + Legal ===== *Brought to you courtesy of our legal counsel. For more context, diff --git a/docker.Makefile b/docker.Makefile new file mode 100644 index 0000000000..66b48c4036 --- /dev/null +++ b/docker.Makefile @@ -0,0 +1,30 @@ +# +# github.com/docker/cli +# +# Makefile for developing using Docker +# + ++.PHONY: build_docker_image build clean cross dev + +DEV_DOCKER_IMAGE_NAME = docker_cli_dev + +# build docker image (dockerfiles/Dockerfile.build) +build_docker_image: + @docker build -t $(DEV_DOCKER_IMAGE_NAME) -f ./dockerfiles/Dockerfile.build . > /dev/null + +# build executable using a container +build: build_docker_image + @echo "WARNING: this will drop a Linux executable on your host (not a macOS of Windows one)" + @docker run --rm -v `pwd`:/go/src/github.com/docker/cli $(DEV_DOCKER_IMAGE_NAME) make build + +# clean build artifacts using a container +clean: build_docker_image + @docker run --rm -v `pwd`:/go/src/github.com/docker/cli $(DEV_DOCKER_IMAGE_NAME) make clean + +# build the CLI for multiple architectures using a container +cross: build_docker_image + @docker run --rm -v `pwd`:/go/src/github.com/docker/cli $(DEV_DOCKER_IMAGE_NAME) make cross + +# start container in interactive mode for in-container development +dev: build_docker_image + @docker run -ti -v `pwd`:/go/src/github.com/docker/cli $(DEV_DOCKER_IMAGE_NAME) ash \ No newline at end of file diff --git a/dockerfiles/Dockerfile.build b/dockerfiles/Dockerfile.build index 863d59d7a5..f6f10472fa 100644 --- a/dockerfiles/Dockerfile.build +++ b/dockerfiles/Dockerfile.build @@ -1,7 +1,7 @@ FROM golang:1.8-alpine -RUN apk add -U git +RUN apk add -U git make RUN go get github.com/LK4D4/vndr && \ cp /go/bin/vndr /usr/bin && \