diff --git a/Dockerfile b/Dockerfile index b27e98dc1d029b5c50f84827d3b069beff0b233d..31e9571dd4314d68abce98db0666afcd97bb29b7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,9 +1,9 @@ -FROM golang:1.13 +FROM golang:1.15 WORKDIR /go/src/github.com/mccutchen/go-httpbin -COPY Makefile . -RUN make deps +# Manually implement the subset of `make deps` we need to build the image +RUN cd /tmp && go get -u github.com/kevinburke/go-bindata/... COPY . . RUN make build buildtests diff --git a/Makefile b/Makefile index bac4336e2e018879bb1e766df32ac93565b11ccf..d22faeefebecd94e24c6eda652dde23cf1eca24f 100644 --- a/Makefile +++ b/Makefile @@ -2,15 +2,24 @@ # The version that will be used in docker tags (e.g. to push a # go-httpbin:latest image use `make imagepush VERSION=latest)` -VERSION ?= $(shell git rev-parse --short HEAD) +VERSION ?= $(shell git rev-parse --short HEAD) -# Override these values to deploy to a different App Engine project +# Override these values to deploy to a different Cloud Run project GCLOUD_PROJECT ?= httpbingo GCLOUD_ACCOUNT ?= mccutchen@gmail.com +GCLOUD_REGION ?= us-central1 + +# The version tag for the Cloud Run deployment (override this to adjust +# pre-production URLs) +GCLOUD_TAG ?= "v-$(VERSION)" # Run gcloud in a container to avoid needing to install the SDK locally GCLOUD_COMMAND ?= ./bin/gcloud +# We push docker images to both docker hub and gcr.io +DOCKER_TAG_DOCKERHUB ?= mccutchen/go-httpbin:$(VERSION) +DOCKER_TAG_GCLOUD ?= gcr.io/$(GCLOUD_PROJECT)/go-httpbin:$(VERSION) + # Built binaries will be placed here DIST_PATH ?= dist @@ -81,19 +90,41 @@ lint: $(TOOL_GOLINT) $(TOOL_STATICCHECK) # ============================================================================= -# deploy & run locally +# run locally # ============================================================================= -deploy: build gcloud-auth - $(GCLOUD_COMMAND) --account=$(GCLOUD_ACCOUNT) app deploy --quiet --project=$(GCLOUD_PROJECT) --version=$(VERSION) --promote +run: build + $(DIST_PATH)/go-httpbin + -stagedeploy: build gcloud-auth - $(GCLOUD_COMMAND) --account=$(GCLOUD_ACCOUNT) app deploy --quiet --project=$(GCLOUD_PROJECT) --version=$(VERSION) --no-promote +# ============================================================================= +# deploy to google cloud run +# ============================================================================= +deploy: gcloud-auth imagepush + $(GCLOUD_COMMAND) beta run deploy \ + $(GCLOUD_PROJECT) \ + --image=$(DOCKER_TAG_GCLOUD) \ + --revision-suffix=$(VERSION) \ + --tag=$(GCLOUD_TAG) \ + --project=$(GCLOUD_PROJECT) \ + --region=$(GCLOUD_REGION) \ + --allow-unauthenticated \ + --platform=managed + +stagedeploy: gcloud-auth imagepush + $(GCLOUD_COMMAND) beta run deploy \ + $(GCLOUD_PROJECT) \ + --image=$(DOCKER_TAG_GCLOUD) \ + --revision-suffix=$(VERSION) \ + --tag=$(GCLOUD_TAG) \ + --project=$(GCLOUD_PROJECT) \ + --region=$(GCLOUD_REGION) \ + --allow-unauthenticated \ + --platform=managed \ + --no-traffic gcloud-auth: @$(GCLOUD_COMMAND) auth list | grep '^\*' | grep -q $(GCLOUD_ACCOUNT) || $(GCLOUD_COMMAND) auth login $(GCLOUD_ACCOUNT) - -run: build - $(DIST_PATH)/go-httpbin + @$(GCLOUD_COMMAND) auth print-access-token | docker login -u oauth2accesstoken --password-stdin https://gcr.io watch: $(TOOL_REFLEX) reflex -s -r '\.(go|html)$$' make run @@ -103,10 +134,11 @@ watch: $(TOOL_REFLEX) # docker images # ============================================================================= image: - docker build -t mccutchen/go-httpbin:$(VERSION) . + docker build -t $(DOCKER_TAG_DOCKERHUB) -t $(DOCKER_TAG_GCLOUD) . imagepush: image - docker push mccutchen/go-httpbin:$(VERSION) + docker push $(DOCKER_TAG_GCLOUD) + docker push $(DOCKER_TAG_GCLOUD) # ============================================================================= diff --git a/bin/gcloud b/bin/gcloud index 0c3b367c638c88291a946e58816a14552dfd490d..9f1ec9f500d14454c45cc7d248fea3bd65fb52f1 100755 --- a/bin/gcloud +++ b/bin/gcloud @@ -6,10 +6,12 @@ # Adapted from this helpful blog post: # https://blog.scottlowe.org/2018/09/13/running-gcloud-cli-in-a-docker-container/ +GCLOUD_SDK_TAG="312.0.0" + exec docker run \ - --rm \ - -ti \ + --rm -it \ --workdir /code \ -v $PWD:/code \ -v $HOME/.config/gcloud:/root/.config/gcloud \ - google/cloud-sdk gcloud $* + google/cloud-sdk:$GCLOUD_SDK_TAG \ + gcloud $*