Skip to content

Commit

Permalink
Clean up Makefile and place Dockerfiles in subdirectory
Browse files Browse the repository at this point in the history
  • Loading branch information
munnerz committed Nov 22, 2017
1 parent e6cdbce commit 8c7eaa1
Show file tree
Hide file tree
Showing 10 changed files with 103 additions and 124 deletions.
2 changes: 0 additions & 2 deletions .dockerignore

This file was deleted.

5 changes: 1 addition & 4 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,7 +1,4 @@
.DS_Store
/.get_deps
/.generate_exes
/bin/
/_build/
/acmesolver
/controller
/hack/build/dockerfiles/cert-manager-*_*_*
4 changes: 2 additions & 2 deletions .gitlab-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ master_push:
- docker
script:
- mkdir -p ~/.docker && echo "${DOCKER_AUTH_CONFIG}" > ~/.docker/config.json && chmod 600 ~/.docker/config.json
- make all push IMAGE_TAGS="${CI_BUILD_REF_SLUG}-${CI_PIPELINE_ID} canary"
- make verify push IMAGE_TAGS="${CI_BUILD_REF_SLUG}-${CI_PIPELINE_ID} canary"
only:
- master

Expand All @@ -44,6 +44,6 @@ release_push:
- docker
script:
- mkdir -p ~/.docker && echo "${DOCKER_AUTH_CONFIG}" > ~/.docker/config.json && chmod 600 ~/.docker/config.json
- APP_VERSION=${CI_COMMIT_TAG} make all push IMAGE_TAGS="${CI_COMMIT_TAG} latest"
- APP_VERSION=${CI_COMMIT_TAG} make verify push IMAGE_TAGS="${CI_COMMIT_TAG} latest"
only:
- tags
2 changes: 1 addition & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ jobs:
- ./hack/test/setup-boulder.sh
- ./hack/test/setup-minikube.sh
# Build images while we wait for services to start
- make build image APP_VERSION=build
- make build APP_VERSION=build
# Wait for e2e service dependencies
- ./hack/test/wait-boulder.sh
- ./hack/test/wait-minikube.sh
Expand Down
198 changes: 95 additions & 103 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,130 +1,122 @@
ACCOUNT=jetstack
APP_NAME=cert-manager
REGISTRY=quay.io

PACKAGE_NAME=github.com/jetstack/cert-manager
GO_VERSION=1.8

GOOS := linux
GOARCH := amd64

DOCKER_IMAGE=${REGISTRY}/${ACCOUNT}/${APP_NAME}

BUILD_DIR=_build
TEST_DIR=_test

CONTAINER_DIR=/go/src/${PACKAGE_NAME}

BUILD_TAG := build
PACKAGE_NAME := github.com/jetstack/cert-manager
REGISTRY := quay.io/jetstack
APP_NAME := cert-manager
IMAGE_TAGS := canary
GOPATH ?= $HOME/go
HACK_DIR ?= hack
BUILD_TAG := build

PACKAGES=$(shell find . -name "*_test.go" | xargs -n1 dirname | grep -v 'vendor/' | sort -u | xargs -n1 printf "%s.test_pkg ")

BINDIR ?= bin
HACK_DIR ?= hack
TYPES_FILES = $(shell find pkg/apis -name types.go)

# Domain name to use in e2e tests. This is important for ACME HTTP01 e2e tests,
# which require a domain that resolves to the ingress controller to be used for
# e2e tests.
E2E_NGINX_CERTIFICATE_DOMAIN=

.PHONY: version

# AppVersion is set as the AppVersion to be compiled into the controller binary.
# It's used as the default version of the 'acmesolver' image to use for ACME
# challenge requests, and any other future provider that requires additional
# image dependencies will use this same tag.
ifeq ($(APP_VERSION),)
APP_VERSION := canary
endif

all: verify test build
# Get a list of all binaries to be built
CMDS := $(shell find ./cmd/ -maxdepth 1 -type d -exec basename {} \; | grep -v cmd)
# Path to dockerfiles directory
DOCKERFILES := $(HACK_DIR)/build/dockerfiles
# A list of all types.go files in pkg/apis
TYPES_FILES := $(shell find pkg/apis -name types.go)
# docker_build_controller, docker_build_apiserver etc
DOCKER_BUILD_TARGETS := $(addprefix docker_build_, $(CMDS))
# docker_push_controller, docker_push_apiserver etc
DOCKER_PUSH_TARGETS := $(addprefix docker_push_, $(CMDS))

# Go build flags
GOOS := linux
GOARCH := amd64
GOLDFLAGS := -ldflags "-X $(PACKAGE_NAME)/pkg/util.AppGitState=${GIT_STATE} -X $(PACKAGE_NAME)/pkg/util.AppGitCommit=${GIT_COMMIT} -X $(PACKAGE_NAME)/pkg/util.AppVersion=${APP_VERSION}"

.PHONY: verify build docker_build push generate generate_verify $(CMDS) go_test go_fmt $(DOCKER_BUILD_TARGETS) $(DOCKER_PUSH_TARGETS)

.hack_verify:
@echo Running repo-infra verify scripts
@echo Running href checker:
@${HACK_DIR}/verify-links.sh
@echo Running errexit checker:
@${HACK_DIR}/verify-errexit.sh
@echo Running generated client checker:
@${HACK_DIR}/verify-client-gen.sh
# Alias targets
###############

depend:
rm -rf $(TEST_DIR)/
rm -rf ${BUILD_DIR}/
mkdir $(TEST_DIR)/
mkdir $(BUILD_DIR)/
verify: generate_verify hack_verify go_verify
build: $(CMDS) docker_build
docker_build: $(DOCKER_BUILD_TARGETS)
docker_push: $(DOCKER_PUSH_TARGETS)
push: build docker_push

verify: go_fmt .hack_verify
test: go_test
# Code generation
#################
# This target runs all required generators against our API types.
generate: $(TYPES_FILES)
$(HACK_DIR)/update-codegen.sh

version:
$(eval GIT_STATE := $(shell if test -z "`git status --porcelain 2> /dev/null`"; then echo "clean"; else echo "dirty"; fi))
$(eval GIT_COMMIT := $(shell git rev-parse HEAD))
generate_verify:
$(HACK_DIR)/verify-codegen.sh

build_%: depend version
# Hack targets
##############
hack_verify:
@echo Running href checker
$(HACK_DIR)/verify-links.sh
@echo Running errexit checker
$(HACK_DIR)/verify-errexit.sh

# Go targets
#################
go_verify: go_fmt go_test

$(CMDS):
CGO_ENABLED=0 GOOS=$(GOOS) GOARCH=$(GOARCH) go build \
-a -tags netgo \
-o ${BUILD_DIR}/${APP_NAME}-$*-$(GOOS)-$(GOARCH) \
-ldflags "-X github.com/jetstack/cert-manager/pkg/util.AppGitState=${GIT_STATE} -X github.com/jetstack/cert-manager/pkg/util.AppGitCommit=${GIT_COMMIT} -X github.com/jetstack/cert-manager/pkg/util.AppVersion=${APP_VERSION}" \
./cmd/$*

go_fmt:
$(eval FMT_OUTPUT := $(shell go fmt ./pkg/... ./cmd/... ./test/... | wc -l))
@if [ "$(FMT_OUTPUT)" != "0" ]; then echo "Please run go fmt"; exit 1; fi
-o $(DOCKERFILES)/${APP_NAME}-$@_$(GOOS)_$(GOARCH) \
$(GOLDFLAGS) \
./cmd/$@

go_test:
go test -v $$(go list ./... | grep -v '/vendor/' | grep -v '/test/e2e' | grep -v '/pkg/client' | grep -v '/third_party' )
go test -v \
$$(go list ./... | \
grep -v '/vendor/' | \
grep -v '/test/e2e' | \
grep -v '/pkg/client' | \
grep -v '/third_party' \
)

go_fmt:
@set -e; \
GO_FMT=$$(git ls-files *.go | grep -v 'vendor/' | xargs gofmt -d); \
if [ -n "$${GO_FMT}" ] ; then \
echo "Please run go fmt"; \
echo "$$GO_FMT"; \
exit 1; \
fi

e2e_test:
# Build the e2e tests
go test -o e2e-tests -c ./test/e2e
# TODO: make these paths configurable
# Run e2e tests
KUBECONFIG=$$HOME/.kube/config CERTMANAGERCONFIG=$$HOME/.kube/config \
./e2e-tests \
-cert-manager-image-pull-policy=Never \
-cert-manager-image=$(DOCKER_IMAGE)-controller:$(BUILD_TAG) \
-cert-manager-image=$(REGISTRY)/$(APP_NAME)-controller:$(BUILD_TAG) \
-acme-nginx-certificate-domain=$(E2E_NGINX_CERTIFICATE_DOMAIN)

build: build_controller build_acmesolver

docker: docker_all

docker_%:
# create a container
$(eval CONTAINER_ID := $(shell docker create \
-i \
-w $(CONTAINER_DIR) \
golang:${GO_VERSION} \
/bin/bash -c "tar xf - && make $*" \
))

# run build inside container
tar cf - . | docker start -a -i $(CONTAINER_ID)

# copy artifacts over
rm -rf $(BUILD_DIR)/ $(TEST_DIR)/
docker cp $(CONTAINER_ID):$(CONTAINER_DIR)/$(BUILD_DIR)/ .
docker cp $(CONTAINER_ID):$(CONTAINER_DIR)/$(TEST_DIR)/ .

# remove container
docker rm $(CONTAINER_ID)

image_%: version
docker build -f "./Dockerfile.$*" --build-arg VCS_REF=$(GIT_COMMIT) -t "$(DOCKER_IMAGE)-$*:$(BUILD_TAG)" .

image: image_controller image_acmesolver

push_%: image_%
# Docker targets
################
$(DOCKER_BUILD_TARGETS):
$(eval DOCKER_BUILD_CMD := $(subst docker_build_,,$@))
docker build \
--build-arg VCS_REF=$(GIT_COMMIT) \
-t $(REGISTRY)/$(APP_NAME)-$(DOCKER_BUILD_CMD):$(BUILD_TAG) \
-f $(DOCKERFILES)/$(DOCKER_BUILD_CMD)/Dockerfile \
$(DOCKERFILES)

$(DOCKER_PUSH_TARGETS):
$(eval DOCKER_PUSH_CMD := $(subst docker_push_,,$@))
set -e; \
for tag in $(IMAGE_TAGS); do \
docker tag "$(DOCKER_IMAGE)-$*:$(BUILD_TAG)" "$(DOCKER_IMAGE)-$*:$${tag}" ; \
docker push "$(DOCKER_IMAGE)-$*:$${tag}"; \
for tag in $(IMAGE_TAGS); do \
docker tag $(REGISTRY)/$(APP_NAME)-$(DOCKER_PUSH_CMD):$(BUILD_TAG) $(REGISTRY)/$(APP_NAME)-$(DOCKER_PUSH_CMD):$${tag} ; \
docker push $(REGISTRY)/$(APP_NAME)-$(DOCKER_PUSH_CMD):$${tag}; \
done

push: push_controller push_acmesolver

release:
ifndef VERSION
$(error VERSION is not set)
endif
@echo "Preparing release of version $(VERSION)"
echo $(VERSION) > VERSION
find examples -name '*.yaml' -type f -exec sed -i 's/kube-lego:[0-9\.]*$$/kube-lego:$(VERSION)/g' {} \;

# Regenerate all files if the gen exes changed or any "types.go" files changed
.generate_files:
# generate all pkg/client contents
$(HACK_DIR)/update-client-gen.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ FROM alpine:3.6

RUN apk add --no-cache ca-certificates

ADD _build/cert-manager-acmesolver-linux-amd64 /usr/bin/acmesolver
ADD cert-manager-acmesolver_linux_amd64 /usr/bin/acmesolver

ENTRYPOINT ["/usr/bin/acmesolver"]
ARG VCS_REF
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ FROM alpine:3.6

RUN apk add --no-cache ca-certificates

ADD _build/cert-manager-controller-linux-amd64 /usr/bin/cert-manager
ADD cert-manager-controller_linux_amd64 /usr/bin/cert-manager

ENTRYPOINT ["/usr/bin/cert-manager"]
ARG VCS_REF
Expand Down
8 changes: 0 additions & 8 deletions hack/builder/Dockerfile

This file was deleted.

File renamed without changes.
4 changes: 2 additions & 2 deletions hack/verify-client-gen.sh → hack/verify-codegen.sh
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ cleanup
mkdir -p "${TMP_DIFFROOT}"
cp -a "${DIFFROOT}"/* "${TMP_DIFFROOT}"

"${SCRIPT_ROOT}/hack/update-client-gen.sh"
"${SCRIPT_ROOT}/hack/update-codegen.sh"
echo "diffing ${DIFFROOT} against freshly generated codegen"
ret=0
diff -Naupr "${DIFFROOT}" "${TMP_DIFFROOT}" || ret=$?
Expand All @@ -43,6 +43,6 @@ if [[ $ret -eq 0 ]]
then
echo "${DIFFROOT} up to date."
else
echo "${DIFFROOT} is out of date. Please run hack/update-client-gen.sh"
echo "${DIFFROOT} is out of date. Please run hack/update-codegen.sh"
exit 1
fi

0 comments on commit 8c7eaa1

Please sign in to comment.