|
| 1 | +#!/usr/bin/env bash |
| 2 | + |
| 3 | +set -eo pipefail |
| 4 | + |
| 5 | +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" |
| 6 | +SCRIPTS_DIR=$DIR |
| 7 | +ROOT_DIR=$DIR/.. |
| 8 | +DOCKERFILE_PATH=$ROOT_DIR/Dockerfile |
| 9 | +ACK_DIR=$ROOT_DIR/.. |
| 10 | +DOCKERFILE=${DOCKERFILE:-"$DOCKERFILE_PATH"} |
| 11 | +LOCAL_MODULES=${LOCAL_MODULES:-"false"} |
| 12 | +BUILD_DATE=$(date +%Y-%m-%dT%H:%M) |
| 13 | +QUIET=${QUIET:-"false"} |
| 14 | + |
| 15 | +export DOCKER_BUILDKIT=${DOCKER_BUILDKIT:-1} |
| 16 | + |
| 17 | +source $SCRIPTS_DIR/lib/common.sh |
| 18 | + |
| 19 | +check_is_installed docker |
| 20 | + |
| 21 | +USAGE=" |
| 22 | +Usage: |
| 23 | + $(basename "$0") <aws_service> |
| 24 | +
|
| 25 | +Builds the Docker image for an ACK service controller. |
| 26 | +
|
| 27 | +Example: $(basename "$0") ecr |
| 28 | +
|
| 29 | +<aws_service> should be an AWS Service name (ecr, sns, sqs, petstore, bookstore) |
| 30 | +
|
| 31 | +Environment variables: |
| 32 | + QUIET: Build controller container image quietly (<true|false>) |
| 33 | + Default: false |
| 34 | + LOCAL_MODULES: Enables use of local modules during AWS Service controller docker image build |
| 35 | + Default: false |
| 36 | + AWS_SERVICE_DOCKER_IMG: Controller container image tag |
| 37 | + Default: aws-controllers-k8s:\$AWS_SERVICE-\$VERSION |
| 38 | + SERVICE_CONTROLLER_SOURCE_PATH: Directory to find the service controller to build an image for. |
| 39 | + Default: ../\$AWS_SERVICE-controller |
| 40 | +" |
| 41 | + |
| 42 | +if [ $# -ne 1 ]; then |
| 43 | + echo "AWS_SERVICE is not defined. Script accepts one parameter, the <AWS_SERVICE> to build a container image of that service" 1>&2 |
| 44 | + echo "${USAGE}" |
| 45 | + exit 1 |
| 46 | +fi |
| 47 | + |
| 48 | +AWS_SERVICE=$(echo "$1" | tr '[:upper:]' '[:lower:]') |
| 49 | + |
| 50 | +# Source code for the controller will be in a separate repo, typically in |
| 51 | +# $GOPATH/src/github.com/aws-controllers-k8s/$AWS_SERVICE-controller/ |
| 52 | +DEFAULT_SERVICE_CONTROLLER_SOURCE_PATH="$ROOT_DIR/../$AWS_SERVICE-controller" |
| 53 | +SERVICE_CONTROLLER_SOURCE_PATH=${SERVICE_CONTROLLER_SOURCE_PATH:-$DEFAULT_SERVICE_CONTROLLER_SOURCE_PATH} |
| 54 | + |
| 55 | +if [[ ! -d $SERVICE_CONTROLLER_SOURCE_PATH ]]; then |
| 56 | + echo "Error evaluating SERVICE_CONTROLLER_SOURCE_PATH environment variable:" 1>&2 |
| 57 | + echo "$SERVICE_CONTROLLER_SOURCE_PATH is not a directory." 1>&2 |
| 58 | + echo "${USAGE}" |
| 59 | + exit 1 |
| 60 | +fi |
| 61 | + |
| 62 | +pushd $SERVICE_CONTROLLER_SOURCE_PATH 1>/dev/null |
| 63 | + |
| 64 | +SERVICE_CONTROLLER_GIT_VERSION=`git describe --tags --always --dirty || echo "unknown"` |
| 65 | +SERVICE_CONTROLLER_GIT_COMMIT=`git rev-parse HEAD` |
| 66 | + |
| 67 | +popd 1>/dev/null |
| 68 | + |
| 69 | +DEFAULT_AWS_SERVICE_DOCKER_IMG="aws-controllers-k8s:$AWS_SERVICE-$SERVICE_CONTROLLER_GIT_VERSION" |
| 70 | +AWS_SERVICE_DOCKER_IMG=${AWS_SERVICE_DOCKER_IMG:-"$DEFAULT_AWS_SERVICE_DOCKER_IMG"} |
| 71 | + |
| 72 | +if [[ $QUIET = "false" ]]; then |
| 73 | + echo "building '$AWS_SERVICE' controller docker image with tag: ${AWS_SERVICE_DOCKER_IMG}" |
| 74 | + echo " git commit: $SERVICE_CONTROLLER_GIT_COMMIT" |
| 75 | +fi |
| 76 | + |
| 77 | +# if local build |
| 78 | +# then use Dockerfile which allows references to local modules from service controller |
| 79 | +DOCKER_BUILD_CONTEXT="$ACK_DIR" |
| 80 | +if [[ "$LOCAL_MODULES" = "true" ]]; then |
| 81 | + DOCKERFILE="${ROOT_DIR}"/Dockerfile.local |
| 82 | +fi |
| 83 | + |
| 84 | +docker build \ |
| 85 | + --quiet=${QUIET} \ |
| 86 | + -t "${AWS_SERVICE_DOCKER_IMG}" \ |
| 87 | + -f "${DOCKERFILE}" \ |
| 88 | + --build-arg service_alias=${AWS_SERVICE} \ |
| 89 | + --build-arg service_controller_git_version="$SERVICE_CONTROLLER_GIT_VERSION" \ |
| 90 | + --build-arg service_controller_git_commit="$SERVICE_CONTROLLER_GIT_COMMIT" \ |
| 91 | + --build-arg build_date="$BUILD_DATE" \ |
| 92 | + "${DOCKER_BUILD_CONTEXT}" |
| 93 | + |
| 94 | +if [ $? -ne 0 ]; then |
| 95 | + exit 2 |
| 96 | +fi |
0 commit comments