cmd/pubsubhelper: change Dockerfile to FROM scratch
Before:
REPOSITORY SIZE
gcr.io/go-dashboard-dev/pubsubhelper 834MB
After:
REPOSITORY SIZE
gcr.io/go-dashboard-dev/pubsubhelper 12.3MB
Updates golang/go#18817
Change-Id: Ibf1f33a04043c0defddd7fe6b8d0455092044ac0
Reviewed-on: https://go-review.googlesource.com/40574
Reviewed-by: Kevin Burke <kev@inburke.com>
diff --git a/cmd/pubsubhelper/.gitignore b/cmd/pubsubhelper/.gitignore
new file mode 100644
index 0000000..06ee9ac
--- /dev/null
+++ b/cmd/pubsubhelper/.gitignore
@@ -0,0 +1,2 @@
+pubsubhelper
+ca-certificates.crt
diff --git a/cmd/pubsubhelper/Dockerfile b/cmd/pubsubhelper/Dockerfile
index 16d2ecb..402677d 100644
--- a/cmd/pubsubhelper/Dockerfile
+++ b/cmd/pubsubhelper/Dockerfile
@@ -1,50 +1,9 @@
# Copyright 2017 The Go Authors. All rights reserved.
# Use of this source code is governed by a BSD-style
# license that can be found in the LICENSE file.
-
-# Note that OpenSSH 6.5+ is required for the Github SSH private key, which requires
-# at least Debian Jessie (not Wheezy). This uses Jessie:
-FROM golang:1.8
+FROM scratch
LABEL maintainer "golang-dev@googlegroups.com"
-# TODO(bradfitz): remove duplication between this, gitmirror, and coordinator?
-# Maybe make both derive FROM "golang_org:buildbase" or something. But
-# then I want to make sure that FROM base is rebuilt always when things in
-# x/build change.
-
-COPY /cmd/gitmirror/install-apt-deps.sh /scripts/install-apt-deps.sh
-RUN /scripts/install-apt-deps.sh
-
-RUN go get -d cloud.google.com/go/compute/metadata && \
- cd /go/src/cloud.google.com/go/compute/metadata && \
- git reset --hard cd0da878c66091060d2e7403abd62192b3e387e0
-
-RUN go get -d golang.org/x/time/rate && \
- cd /go/src/golang.org/x/time/rate && \
- git reset --hard f51c12702a4d776e4c1fa9b0fabab841babae631
-
-RUN go get -d golang.org/x/oauth2 && \
- cd /go/src/golang.org/x/oauth2 && \
- git reset --hard 314dd2c0bf3ebd592ec0d20847d27e79d0dbe8dd
-
-RUN go get -d github.com/bradfitz/go-smtpd/smtpd && \
- cd /go/src/github.com/bradfitz/go-smtpd/smtpd && \
- git reset --hard deb6d623762522f8ad4a55b952001e4215a76cf4
-
-RUN go get -d github.com/jellevandenhooff/dkim && \
- cd /go/src/github.com/jellevandenhooff/dkim && \
- git reset --hard f50fe3d243e1a9c9369eea29813517f3af190518
-
-RUN go get -d golang.org/x/crypto/acme/autocert && \
- cd /go/src/golang.org/x/crypto/acme/autocert && \
- git reset --hard 573951cbe80bb6352881271bb276f48749eab6f4
-
-RUN go get -d go4.org/types && \
- cd /go/src/go4.org && \
- git reset --hard d7e10a7752d55a1f81e384fe49a6a5b417a9a6dd
-
-COPY . /go/src/golang.org/x/build/
-
-RUN go install golang.org/x/build/cmd/pubsubhelper
-
-ENTRYPOINT ["/go/bin/pubsubhelper"]
+COPY ca-certificates.crt /etc/ssl/certs/
+COPY pubsubhelper /
+ENTRYPOINT ["/pubsubhelper"]
diff --git a/cmd/pubsubhelper/Dockerfile.0 b/cmd/pubsubhelper/Dockerfile.0
new file mode 100644
index 0000000..44aad9e
--- /dev/null
+++ b/cmd/pubsubhelper/Dockerfile.0
@@ -0,0 +1,41 @@
+# Copyright 2017 The Go Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style
+# license that can be found in the LICENSE file.
+FROM golang:1.8
+LABEL maintainer "golang-dev@googlegroups.com"
+
+RUN go get -d cloud.google.com/go/compute/metadata && \
+ cd /go/src/cloud.google.com/go/compute/metadata && \
+ git reset --hard cd0da878c66091060d2e7403abd62192b3e387e0
+
+RUN go get -d golang.org/x/time/rate && \
+ cd /go/src/golang.org/x/time/rate && \
+ git reset --hard f51c12702a4d776e4c1fa9b0fabab841babae631
+
+RUN go get -d golang.org/x/oauth2 && \
+ cd /go/src/golang.org/x/oauth2 && \
+ git reset --hard 314dd2c0bf3ebd592ec0d20847d27e79d0dbe8dd
+
+RUN go get -d github.com/bradfitz/go-smtpd/smtpd && \
+ cd /go/src/github.com/bradfitz/go-smtpd/smtpd && \
+ git reset --hard deb6d623762522f8ad4a55b952001e4215a76cf4
+
+RUN go get -d github.com/jellevandenhooff/dkim && \
+ cd /go/src/github.com/jellevandenhooff/dkim && \
+ git reset --hard f50fe3d243e1a9c9369eea29813517f3af190518
+
+RUN go get -d golang.org/x/crypto/acme/autocert && \
+ cd /go/src/golang.org/x/crypto/acme/autocert && \
+ git reset --hard 573951cbe80bb6352881271bb276f48749eab6f4
+
+RUN go get -d go4.org/types && \
+ cd /go/src/go4.org && \
+ git reset --hard d7e10a7752d55a1f81e384fe49a6a5b417a9a6dd
+
+RUN go get -d github.com/googleapis/gax-go && \
+ cd /go/src/github.com/googleapis/gax-go && \
+ git reset --hard 9af46dd5a1713e8b5cd71106287eba3cefdde50b
+
+COPY . /go/src/golang.org/x/build/
+
+RUN go install -ldflags "-linkmode=external -extldflags '-static -pthread'" golang.org/x/build/cmd/pubsubhelper
diff --git a/cmd/pubsubhelper/Makefile b/cmd/pubsubhelper/Makefile
index 920b160..1c67b5b 100644
--- a/cmd/pubsubhelper/Makefile
+++ b/cmd/pubsubhelper/Makefile
@@ -2,14 +2,34 @@
# Use of this source code is governed by a BSD-style
# license that can be found in the LICENSE file.
-VERSION=v1
+VERSION=v2
+DOCKER_IMAGE_STAGE0=stage0/pubsubhelper:latest
+DOCKER_CTR_STAGE0=pubsubhelper-stage0
-docker-prod: Dockerfile
- docker build -f Dockerfile --tag=gcr.io/symbolic-datum-552/pubsubhelper:$(VERSION) ../..
-docker-dev: Dockerfile
- docker build -f Dockerfile --tag=gcr.io/go-dashboard-dev/pubsubhelper:latest ../..
+stage0: *.go Dockerfile.0
+ docker build --force-rm -f Dockerfile.0 --tag=$(DOCKER_IMAGE_STAGE0) ../..
+
+pubsubhelper: stage0
+ docker create --name $(DOCKER_CTR_STAGE0) $(DOCKER_IMAGE_STAGE0)
+ docker cp $(DOCKER_CTR_STAGE0):/go/bin/$@ $@
+ docker rm $(DOCKER_CTR_STAGE0)
+
+ca-certificates.crt:
+ docker create --name $(DOCKER_CTR_STAGE0) $(DOCKER_IMAGE_STAGE0)
+ docker cp $(DOCKER_CTR_STAGE0):/etc/ssl/certs/$@ $@
+ docker rm $(DOCKER_CTR_STAGE0)
+
+docker-prod: Dockerfile pubsubhelper ca-certificates.crt
+ docker build --force-rm --tag=gcr.io/symbolic-datum-552/pubsubhelper:$(VERSION) .
+docker-dev: Dockerfile pubsubhelper ca-certificates.crt
+ docker build --force-rm --tag=gcr.io/go-dashboard-dev/pubsubhelper:latest .
push-prod: docker-prod
gcloud docker -- push gcr.io/symbolic-datum-552/pubsubhelper:$(VERSION)
push-dev: docker-dev
gcloud docker -- push gcr.io/go-dashboard-dev/pubsubhelper:latest
+
+.PHONY: clean
+clean:
+ $(RM) pubsubhelper
+ $(RM) ca-certificates.crt
diff --git a/cmd/pubsubhelper/README b/cmd/pubsubhelper/README
new file mode 100644
index 0000000..d20742b
--- /dev/null
+++ b/cmd/pubsubhelper/README
@@ -0,0 +1,7 @@
+## Running with Docker locally
+
+docker run --rm -it \
+ -p 80:80 \
+ -p 25:25 \
+ -p 443:443 \
+ gcr.io/go-dashboard-dev/pubsubhelper:latest [any additional pubsubhelper flags]
diff --git a/cmd/pubsubhelper/install-apt-deps.sh b/cmd/pubsubhelper/install-apt-deps.sh
deleted file mode 100755
index e685de2..0000000
--- a/cmd/pubsubhelper/install-apt-deps.sh
+++ /dev/null
@@ -1,11 +0,0 @@
-# Copyright 2017 The Go Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style
-# license that can be found in the LICENSE file.
-
-set -ex
-
-apt-get update
-apt-get install -y --no-install-recommends ca-certificates
-
-apt-get clean
-rm -fr /var/lib/apt/lists