From 2154c77c38196c6866cb7f9c8bb13a8604ad6e96 Mon Sep 17 00:00:00 2001 From: Daniel Nephin Date: Thu, 11 May 2017 18:52:17 -0400 Subject: [PATCH] Support building a dynbinary Signed-off-by: Daniel Nephin --- .gitignore | 2 +- Makefile | 3 +++ docker.Makefile | 11 +++++++++++ dockerfiles/Dockerfile.build | 2 +- dockerfiles/Dockerfile.cross | 8 ++++++++ scripts/build/binary | 4 +++- scripts/build/dynbinary | 10 ++++++++++ scripts/build/ldflags | 10 +++++++--- 8 files changed, 44 insertions(+), 6 deletions(-) create mode 100644 dockerfiles/Dockerfile.cross create mode 100755 scripts/build/dynbinary diff --git a/.gitignore b/.gitignore index 30944692f3e9..896ffb3ad8bf 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ .DS_Store -build +./build diff --git a/Makefile b/Makefile index 932568bf731a..20014af154b8 100644 --- a/Makefile +++ b/Makefile @@ -28,6 +28,9 @@ lint: cross: clean @./scripts/build/cross +dynbinary: clean + @./scripts/build/dynbinary + # download dependencies (vendor/) listed in vendor.conf .PHONY: vendor vendor: vendor.conf diff --git a/docker.Makefile b/docker.Makefile index e0d8643da77e..d502ff2e735e 100644 --- a/docker.Makefile +++ b/docker.Makefile @@ -6,6 +6,7 @@ DEV_DOCKER_IMAGE_NAME = docker-cli-dev LINTER_IMAGE_NAME = docker-cli-lint +CROSS_IMAGE_NAME = docker-cli-cross MOUNTS = -v `pwd`:/go/src/github.com/docker/cli # build docker image (dockerfiles/Dockerfile.build) @@ -18,6 +19,11 @@ build_docker_image: build_linter_image: @docker build -q -t $(LINTER_IMAGE_NAME) -f ./dockerfiles/Dockerfile.lint . +.PHONY: build_cross_image +build_cross_image: + @docker build -t $(CROSS_IMAGE_NAME) -f ./dockerfiles/Dockerfile.cross . + + # build executable using a container .PHONY: build build: build_docker_image @@ -44,6 +50,8 @@ cross: build_docker_image dev: build_docker_image @docker run -ti $(MOUNTS) -v /var/run/docker.sock:/var/run/docker.sock $(DEV_DOCKER_IMAGE_NAME) ash +shell: dev + # run linters in a container .PHONY: lint lint: build_linter_image @@ -53,3 +61,6 @@ lint: build_linter_image .PHONY: vendor vendor: build_docker_image vendor.conf @docker run -ti --rm $(MOUNTS) $(DEV_DOCKER_IMAGE_NAME) make vendor + +dynbinary: build_cross_image + @docker run -ti --rm $(MOUNTS) $(CROSS_IMAGE_NAME) make dynbinary diff --git a/dockerfiles/Dockerfile.build b/dockerfiles/Dockerfile.build index 13ee07f25292..5d09e18c4ee7 100644 --- a/dockerfiles/Dockerfile.build +++ b/dockerfiles/Dockerfile.build @@ -1,7 +1,7 @@ FROM golang:1.8-alpine -RUN apk add -U git make +RUN apk add -U git make bash RUN go get github.com/LK4D4/vndr && \ cp /go/bin/vndr /usr/bin && \ diff --git a/dockerfiles/Dockerfile.cross b/dockerfiles/Dockerfile.cross new file mode 100644 index 000000000000..6f77d88b0441 --- /dev/null +++ b/dockerfiles/Dockerfile.cross @@ -0,0 +1,8 @@ + +FROM golang:1.8.1 + +# allow replacing httpredir or deb mirror +ARG APT_MIRROR=deb.debian.org +RUN sed -ri "s/(httpredir|deb).debian.org/$APT_MIRROR/g" /etc/apt/sources.list + +WORKDIR /go/src/github.com/docker/cli diff --git a/scripts/build/binary b/scripts/build/binary index 9f6f47281220..cdc2f2e7f5eb 100755 --- a/scripts/build/binary +++ b/scripts/build/binary @@ -1,4 +1,6 @@ -#!/usr/bin/env sh +#!/usr/bin/env bash + +set -eu -o pipefail source ./scripts/build/ldflags diff --git a/scripts/build/dynbinary b/scripts/build/dynbinary new file mode 100755 index 000000000000..ca973a193a05 --- /dev/null +++ b/scripts/build/dynbinary @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +set -eu -o pipefail + +source ./scripts/build/ldflags + +go build \ + -o ./build/docker \ + --ldflags "${LDFLAGS}" \ + github.com/docker/cli/cmd/docker diff --git a/scripts/build/ldflags b/scripts/build/ldflags index a0c5e1f9e63c..7dc94147baa7 100755 --- a/scripts/build/ldflags +++ b/scripts/build/ldflags @@ -4,6 +4,10 @@ VERSION=${VERSION:-"unknown-version"} GITCOMMIT=${GITCOMMIT:-$(git rev-parse --short HEAD 2> /dev/null || true)} BUILDTIME=${BUILDTIME:-$(date --utc --rfc-3339 ns 2> /dev/null | sed -e 's/ /T/')} -export LDFLAGS="-X github.com/docker/cli/cli.GitCommit=${GITCOMMIT} \ - -X github.com/docker/cli/cli.BuildTime=${BUILDTIME} \ - -X github.com/docker/cli/cli.Version=${VERSION} ${LDFLAGS}" +export LDFLAGS="\ + -w \ + -X github.com/docker/cli/cli.GitCommit=${GITCOMMIT} \ + -X github.com/docker/cli/cli.BuildTime=${BUILDTIME} \ + -X github.com/docker/cli/cli.Version=${VERSION} \ + ${LDFLAGS:-} \ +"