@@ -1,3 +1,29 @@
4+# Makefile with some common workflow for dev, build and test
9+# The help target prints out all targets with their descriptions organized
10+# beneath their categories. The categories are represented by '##@' and the
11+# target descriptions by '##'. The awk command is responsible for reading the
12+# entire set of makefiles included in this invocation, looking for lines of the
13+# file as xyz: ## something, and then pretty-format the target and help. Then,
14+# if there's a line with ##@ something, that gets pretty-printed as a category.
15+# More info on the usage of ANSI control characters for terminal formatting:
16+# https://en.wikipedia.org/wiki/ANSI_escape_code#SGR_parameters
17+# More info on the awk command:
18+# http://linuxcommand.org/lc3_adv_awk.php
20+# The following help command is Licensed under the Apache License, Version 2.0 (the "License")
21+# Copyright 2023 The Kubernetes Authors.
23+help: ## Display this help
24+ @awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n make \033[36m<target>\033[0m\n"} /^[a-zA-Z_0-9-]+:.*?##/ { printf " \033[36m%-15s\033[0m %s\n", $$1, $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST)
2GOLANGCILINT ?= golangci-lint
28GOLANGCILINT ?= golangci-lint
@@ -22,24 +48,10 @@ ifeq ($(COVER),true)
22TESTCOVER ?= -coverprofile c.out
48TESTCOVER ?= -coverprofile c.out
25−.PHONY: all
51+##@ Build
38−lint: validate-go-version
39− GO111MODULE=on $(GOLANGCILINT) run
41.PHONY: build
53.PHONY: build
42−build: validate-go-version clean $(BINARY)
54+build: validate-go-version clean $(BINARY) ## Build and create oauth2-proxy binary from current source code
45 CGO_ENABLED=0 $(GO) build -a -installsuffix cgo -ldflags="-X github.com/oauth2-proxy/oauth2-proxy/v7/pkg/version.VERSION=${VERSION}" -o $@ github.com/oauth2-proxy/oauth2-proxy/v7
57 CGO_ENABLED=0 $(GO) build -a -installsuffix cgo -ldflags="-X github.com/oauth2-proxy/oauth2-proxy/v7/pkg/version.VERSION=${VERSION}" -o $@ github.com/oauth2-proxy/oauth2-proxy/v7
@@ -60,60 +72,92 @@ DOCKER_BUILDX_ARGS_ALPINE ?= --build-arg RUNTIME_IMAGE=${DOCKER_BUILD
60DOCKER_BUILDX_X_PLATFORM_ALPINE := docker buildx build ${DOCKER_BUILDX_ARGS_ALPINE} --platform ${DOCKER_BUILD_PLATFORM_ALPINE}
72DOCKER_BUILDX_X_PLATFORM_ALPINE := docker buildx build ${DOCKER_BUILDX_ARGS_ALPINE} --platform ${DOCKER_BUILD_PLATFORM_ALPINE}
61DOCKER_BUILDX_PUSH_X_PLATFORM_ALPINE := $(DOCKER_BUILDX_X_PLATFORM_ALPINE) --push
73DOCKER_BUILDX_PUSH_X_PLATFORM_ALPINE := $(DOCKER_BUILDX_X_PLATFORM_ALPINE) --push
63−.PHONY: docker
75+.PHONY: build-docker
64−docker:
76+build-docker: build-distroless build-alpine ## Build multi architecture docker images in both flavours (distroless / alpine)
78+.PHONY: build-distroless
79+build-distroless: ## Build multi architecture distroless based docker image
65 $(DOCKER_BUILDX_X_PLATFORM) -t $(REGISTRY)/$(REPOSITORY):latest -t $(REGISTRY)/$(REPOSITORY):${VERSION} .
80 $(DOCKER_BUILDX_X_PLATFORM) -t $(REGISTRY)/$(REPOSITORY):latest -t $(REGISTRY)/$(REPOSITORY):${VERSION} .
66− $(DOCKER_BUILDX_X_PLATFORM_ALPINE) -t $(REGISTRY)/$(REPOSITORY):latest-alpine -t $(REGISTRY)/$(REPOSITORY):${VERSION}-alpine .
68−.PHONY: docker-push
82+.PHONY: build-alpine
69−docker-push:
83+build-alpine: ## Build multi architecture alpine based docker image
70− $(DOCKER_BUILDX_PUSH_X_PLATFORM) -t $(REGISTRY)/$(REPOSITORY):latest -t $(REGISTRY)/$(REPOSITORY):${VERSION} .
71− $(DOCKER_BUILDX_PUSH_X_PLATFORM_ALPINE) -t $(REGISTRY)/$(REPOSITORY):latest-alpine -t $(REGISTRY)/$(REPOSITORY):${VERSION}-alpine .
84+ $(DOCKER_BUILDX_X_PLATFORM_ALPINE) -t $(REGISTRY)/$(REPOSITORY):latest-alpine -t $(REGISTRY)/$(REPOSITORY):${VERSION}-alpine .
73−.PHONY: docker-all
86+.PHONY: build-docker-all
74−docker-all: docker
87+build-docker-all: build-docker ## Build docker images for all supported architectures in both flavours (distroless / alpine)
75 $(DOCKER_BUILDX) --platform linux/amd64 -t $(REGISTRY)/$(REPOSITORY):latest-amd64 -t $(REGISTRY)/$(REPOSITORY):${VERSION}-amd64 .
88 $(DOCKER_BUILDX) --platform linux/amd64 -t $(REGISTRY)/$(REPOSITORY):latest-amd64 -t $(REGISTRY)/$(REPOSITORY):${VERSION}-amd64 .
76 $(DOCKER_BUILDX) --platform linux/arm64 -t $(REGISTRY)/$(REPOSITORY):latest-arm64 -t $(REGISTRY)/$(REPOSITORY):${VERSION}-arm64 .
89 $(DOCKER_BUILDX) --platform linux/arm64 -t $(REGISTRY)/$(REPOSITORY):latest-arm64 -t $(REGISTRY)/$(REPOSITORY):${VERSION}-arm64 .
77 $(DOCKER_BUILDX) --platform linux/ppc64le -t $(REGISTRY)/$(REPOSITORY):latest-ppc64le -t $(REGISTRY)/$(REPOSITORY):${VERSION}-ppc64le .
90 $(DOCKER_BUILDX) --platform linux/ppc64le -t $(REGISTRY)/$(REPOSITORY):latest-ppc64le -t $(REGISTRY)/$(REPOSITORY):${VERSION}-ppc64le .
78 $(DOCKER_BUILDX) --platform linux/arm/v7 -t $(REGISTRY)/$(REPOSITORY):latest-armv7 -t $(REGISTRY)/$(REPOSITORY):${VERSION}-armv7 .
91 $(DOCKER_BUILDX) --platform linux/arm/v7 -t $(REGISTRY)/$(REPOSITORY):latest-armv7 -t $(REGISTRY)/$(REPOSITORY):${VERSION}-armv7 .
79 $(DOCKER_BUILDX) --platform linux/s390x -t $(REGISTRY)/$(REPOSITORY):latest-s390x -t $(REGISTRY)/$(REPOSITORY):${VERSION}-s390x .
92 $(DOCKER_BUILDX) --platform linux/s390x -t $(REGISTRY)/$(REPOSITORY):latest-s390x -t $(REGISTRY)/$(REPOSITORY):${VERSION}-s390x .
81−.PHONY: docker-push-all
97+.PHONY: push-docker
82−docker-push-all: docker-push
98+push-docker: push-distroless push-alpine ## Push multi architecture docker images for both flavours (distroless / alpine)
100+.PHONY: push-distroless
101+push-distroless: ## Push multi architecture distroless based docker image
102+ $(DOCKER_BUILDX_PUSH_X_PLATFORM) -t $(REGISTRY)/$(REPOSITORY):latest -t $(REGISTRY)/$(REPOSITORY):${VERSION} .
105+push-alpine: ## Push multi architecture alpine based docker image
106+ $(DOCKER_BUILDX_PUSH_X_PLATFORM_ALPINE) -t $(REGISTRY)/$(REPOSITORY):latest-alpine -t $(REGISTRY)/$(REPOSITORY):${VERSION}-alpine .
108+.PHONY: push-docker-all
109+push-docker-all: push-docker ## Push docker images for all supported architectures for both flavours (distroless / alpine)
83 $(DOCKER_BUILDX_PUSH) --platform linux/amd64 -t $(REGISTRY)/$(REPOSITORY):latest-amd64 -t $(REGISTRY)/$(REPOSITORY):${VERSION}-amd64 .
110 $(DOCKER_BUILDX_PUSH) --platform linux/amd64 -t $(REGISTRY)/$(REPOSITORY):latest-amd64 -t $(REGISTRY)/$(REPOSITORY):${VERSION}-amd64 .
84 $(DOCKER_BUILDX_PUSH) --platform linux/arm64 -t $(REGISTRY)/$(REPOSITORY):latest-arm64 -t $(REGISTRY)/$(REPOSITORY):${VERSION}-arm64 .
111 $(DOCKER_BUILDX_PUSH) --platform linux/arm64 -t $(REGISTRY)/$(REPOSITORY):latest-arm64 -t $(REGISTRY)/$(REPOSITORY):${VERSION}-arm64 .
85 $(DOCKER_BUILDX_PUSH) --platform linux/ppc64le -t $(REGISTRY)/$(REPOSITORY):latest-ppc64le -t $(REGISTRY)/$(REPOSITORY):${VERSION}-ppc64le .
112 $(DOCKER_BUILDX_PUSH) --platform linux/ppc64le -t $(REGISTRY)/$(REPOSITORY):latest-ppc64le -t $(REGISTRY)/$(REPOSITORY):${VERSION}-ppc64le .
86 $(DOCKER_BUILDX_PUSH) --platform linux/arm/v7 -t $(REGISTRY)/$(REPOSITORY):latest-armv7 -t $(REGISTRY)/$(REPOSITORY):${VERSION}-armv7 .
113 $(DOCKER_BUILDX_PUSH) --platform linux/arm/v7 -t $(REGISTRY)/$(REPOSITORY):latest-armv7 -t $(REGISTRY)/$(REPOSITORY):${VERSION}-armv7 .
87 $(DOCKER_BUILDX_PUSH) --platform linux/s390x -t $(REGISTRY)/$(REPOSITORY):latest-s390x -t $(REGISTRY)/$(REPOSITORY):${VERSION}-s390x .
114 $(DOCKER_BUILDX_PUSH) --platform linux/s390x -t $(REGISTRY)/$(REPOSITORY):latest-s390x -t $(REGISTRY)/$(REPOSITORY):${VERSION}-s390x .
117+##@ Nightly scheduling
89−.PHONY: docker-nightly-build
119+.PHONY: nightly-build
90−docker-nightly-build:
120+nightly-build: ## Nightly build command for docker images in both flavours (distroless / alpine)
91 $(DOCKER_BUILDX_X_PLATFORM) -t $(REGISTRY)/$(REPOSITORY)-nightly:latest -t $(REGISTRY)/$(REPOSITORY)-nightly:${DATE} .
121 $(DOCKER_BUILDX_X_PLATFORM) -t $(REGISTRY)/$(REPOSITORY)-nightly:latest -t $(REGISTRY)/$(REPOSITORY)-nightly:${DATE} .
92 $(DOCKER_BUILDX_X_PLATFORM_ALPINE) -t ${REGISTRY}/$(REPOSITORY)-nightly:latest-alpine -t $(REGISTRY)/$(REPOSITORY)-nightly:${DATE}-alpine .
122 $(DOCKER_BUILDX_X_PLATFORM_ALPINE) -t ${REGISTRY}/$(REPOSITORY)-nightly:latest-alpine -t $(REGISTRY)/$(REPOSITORY)-nightly:${DATE}-alpine .
94−.PHONY: docker-nightly-push
124+.PHONY: nightly-push
95−docker-nightly-push:
125+nightly-push: ## Nightly push command for docker images in both flavours (distroless / alpine)
96 $(DOCKER_BUILDX_PUSH_X_PLATFORM) -t $(REGISTRY)/$(REPOSITORY)-nightly:latest -t $(REGISTRY)/$(REPOSITORY)-nightly:${DATE} .
126 $(DOCKER_BUILDX_PUSH_X_PLATFORM) -t $(REGISTRY)/$(REPOSITORY)-nightly:latest -t $(REGISTRY)/$(REPOSITORY)-nightly:${DATE} .
97 $(DOCKER_BUILDX_PUSH_X_PLATFORM_ALPINE) -t ${REGISTRY}/$(REPOSITORY)-nightly:latest-alpine -t $(REGISTRY)/$(REPOSITORY)-nightly:${DATE}-alpine .
127 $(DOCKER_BUILDX_PUSH_X_PLATFORM_ALPINE) -t ${REGISTRY}/$(REPOSITORY)-nightly:latest-alpine -t $(REGISTRY)/$(REPOSITORY)-nightly:${DATE}-alpine .
99.PHONY: generate
132.PHONY: generate
100−generate:
133+generate: ## Generate alpha config docs from golang structs
101 go generate ./pkg/...
134 go generate ./pkg/...
103.PHONY: verify-generate
136.PHONY: verify-generate
104−verify-generate: generate
137+verify-generate: generate ## Verify command to check if alpha config docs are in line with golang struct changes
105 git diff --exit-code
138 git diff --exit-code
107.PHONY: test
142.PHONY: test
108−test: lint
143+test: lint ## Run all Go tests
109 GO111MODULE=on $(GO) test $(TESTCOVER) -v -race ./...
144 GO111MODULE=on $(GO) test $(TESTCOVER) -v -race ./...
111.PHONY: release
146.PHONY: release
112−release: validate-go-version lint test
147+release: validate-go-version lint test ## Create a full release for all architectures (binaries and checksums)
113 BINARY=${BINARY} VERSION=${VERSION} ./dist.sh
148 BINARY=${BINARY} VERSION=${VERSION} ./dist.sh
151+clean: ## Cleanup release and build files
156+lint: validate-go-version ## Lint all files using golangci-lint
157+ GO111MODULE=on $(GOLANGCILINT) run
115.PHONY: validate-go-version
159.PHONY: validate-go-version
116−validate-go-version:
160+validate-go-version: ## Validate Go environment requirements
117 @if [ $(GO_MAJOR_VERSION) -gt $(MINIMUM_SUPPORTED_GO_MAJOR_VERSION) ]; then \
161 @if [ $(GO_MAJOR_VERSION) -gt $(MINIMUM_SUPPORTED_GO_MAJOR_VERSION) ]; then \
118 exit 0 ;\
162 exit 0 ;\
119 elif [ $(GO_MAJOR_VERSION) -lt $(MINIMUM_SUPPORTED_GO_MAJOR_VERSION) ]; then \
163 elif [ $(GO_MAJOR_VERSION) -lt $(MINIMUM_SUPPORTED_GO_MAJOR_VERSION) ]; then \