Skip to content

Commit

Permalink
add build-and-push-images.sh script (#693)
Browse files Browse the repository at this point in the history
  • Loading branch information
cjerad authored Sep 27, 2022
1 parent e9614ff commit 25f28d4
Show file tree
Hide file tree
Showing 2 changed files with 79 additions and 0 deletions.
8 changes: 8 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ KODATA = \
cmd/webhook/kodata/refs
CODECOVERAGE_OUT = $(PROJECT_DIR)/coverprofile.out
GITHUB_REPO_FULL_NAME = "aws/aws-node-termination-handler"
ECR_PUBLIC_REGISTRY ?= "public.ecr.aws/aws-ec2"
ECR_PUBLIC_REPOSITORY_ROOT = "aws-node-termination-handler-2"

# Image URL to use all building/pushing image targets
IMG ?= controller:latest
Expand Down Expand Up @@ -125,6 +127,10 @@ delete: ## Delete controller from current kubernetes cluster.

##@ Release

.PHONY: build-and-push-images
build-and-push-images: $(KO) $(KODATA) ## Build controller and webhook images and push to ECR public repository.
@PATH="$(BIN_DIR):$(PATH)" $(PROJECT_DIR)/scripts/build-and-push-images.sh -r "$(ECR_PUBLIC_REGISTRY)/$(ECR_PUBLIC_REPOSITORY_ROOT)"

.PHONY: create-release-prep-pr
create-release-prep-pr: $(GUM) ## Update version numbers in documents and open a PR.
@PATH="$(BIN_DIR):$(PATH)" $(PROJECT_DIR)/scripts/prepare-for-release.sh
Expand All @@ -141,3 +147,5 @@ latest-release-tag: ## Get tag of most recent release.
repo-full-name: ## Get the full name of the GitHub repository for Node Termination Handler.
@echo "$(GITHUB_REPO_FULL_NAME)"

.PHONY: version
version: latest-release-tag ## Get the most recent release version.
71 changes: 71 additions & 0 deletions scripts/build-and-push-images.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
#!/usr/bin/env bash

set -euo pipefail

repo_root_path="$(cd "$(dirname "$0")"; cd ..; pwd -P)"
makefile_path="${repo_root_path}/Makefile"

if ! command -v ko >/dev/null; then
echo "error: required executable 'ko' not found" >&2
exit 1
fi

version="$(make -s -f "${makefile_path}" version)"
platforms="linux/amd64"
image_repository="${KO_DOCKER_REPO}"
goproxy="direct|https://proxy.golang.org"

usage=$(cat << EOM
usage: $(basename $0) -h | [-p PLATFORMS] [-r REPOSITORY] [-v VERSION]
Build and push Docker images for each platform.
Optional:
-h Display this help message then exit.
-g GOPROXY See documentation in "go help environment". Defaults to "${goproxy}".
-p PLATFORMS Comma separated list of OS and Arch identifiers, e.g. "linux/amd64,linux/arm64". Defaults to "${platforms}".
-r REPOSITORY Image repository to push the built images. Defaults to "${image_repository}".
-v VERSION Version to include in tag of docker image. Defaults "${version}".
EOM
)

while getopts "g:p:r:v:h" opt; do
case "${opt}" in
g ) goproxy="${OPTARG}"
;;
p ) platforms="${OPTARG}"
;;
r ) image_repository="${OPTARG}"
;;
v ) version="${OPTARG}"
;;
h ) echo "${usage}"
exit 0
;;
\?) echo "${usage}" >&2
exit 1
;;
esac
done

assert_not_empty() {
if [[ -z "${!1}" ]]; then
echo "error: missing argument ${1}" >&2
echo "${usage}" >&2
exit 1
fi
}

assert_not_empty goproxy
assert_not_empty platforms
assert_not_empty image_repository
assert_not_empty version

for app in "controller" "webhook"; do
GOPROXY="${goproxy}" KO_DOCKER_REPO="${image_repository}" ko publish \
--base-import-paths \
--tags "${version}" \
--platform "${platforms}" \
"github.com/aws/aws-node-termination-handler/cmd/${app}"
done

0 comments on commit 25f28d4

Please sign in to comment.