22
33# Set variables
44
5- dirname=$( dirname " $0 " )
6- DOCKERFILE_DIR=$( realpath " $dirname " )
7- echo " DOCKERFILE_DIR: $DOCKERFILE_DIR "
5+ dirname=$( dirname " ${0} " )
6+ DOCKERFILE_DIR=$( realpath " ${ dirname} " )
7+ echo " DOCKERFILE_DIR: ${ DOCKERFILE_DIR} "
88
9- # if parameter not passed, prompt for the environment.
9+ # if parameter not passed, prompt for the environment.
1010# Do not accept response if it is not one of the following: prod, int, ref, internal-dev
1111# loop until valid response is received
12- if [ -z " $1 " ]; then
12+ if [[ -z " ${1} " ] ]; then
1313 while true ; do
14- read -p " Enter the environment (prod, int, ref, internal-dev): " ENVIRONMENT
15- case $ ENVIRONMENT in
14+ read -r - p " Enter the environment (prod, int, ref, internal-dev): " ENVIRONMENT
15+ case " ${ ENVIRONMENT} " in
1616 prod|int|ref|internal-dev)
1717 break
1818 ;;
@@ -22,10 +22,10 @@ if [ -z "$1" ]; then
2222 esac
2323 done
2424else
25- ENVIRONMENT=$1
25+ ENVIRONMENT=" ${1} "
2626fi
2727# Check if the environment is valid
28- if [[ ! " $ENVIRONMENT " =~ ^(prod| int| ref| internal-dev)$ ]]; then
28+ if [[ ! " ${ ENVIRONMENT} " =~ ^(prod| int| ref| internal-dev)$ ]]; then
2929 echo " Invalid environment. Please enter one of: prod, int, ref, internal-dev."
3030 exit 1
3131fi
@@ -36,59 +36,57 @@ AWS_REGION="eu-west-2"
3636ACCOUNT_ID=$( aws sts get-caller-identity --query Account --output text)
3737REPOSITORY_NAME=" ${PREFIX} -grafana-app"
3838IMAGE_TAG=" 11.0.0-22.04_stable"
39- LOCAL_IMAGE_NAME=" $REPOSITORY_NAME : $ IMAGE_TAG"
40- IMAGE_NAME=" $ACCOUNT_ID .dkr.ecr.$AWS_REGION .amazonaws.com/$LOCAL_IMAGE_NAME "
39+ LOCAL_IMAGE_NAME=" ${ REPOSITORY_NAME} : ${ IMAGE_TAG} "
40+ IMAGE_NAME=" ${ ACCOUNT_ID} .dkr.ecr.${ AWS_REGION} .amazonaws.com/${ LOCAL_IMAGE_NAME} "
4141TAGS=' [
4242 {"Key": "Environment", "Value": "non-prod"},
4343 {"Key": "Project", "Value": "immunisation-fhir-api-grafana"},
44- {"Key": "Environment", "Value": "' " $ENVIRONMENT " ' "}
44+ {"Key": "Environment", "Value": "' " ${ ENVIRONMENT} " ' "}
4545]'
4646LIFECYCLE_POLICY_FILE=" lifecycle-policy.json"
4747
4848# Change to the directory containing the Dockerfile
49- cd $DOCKERFILE_DIR
49+ if ! cd " ${DOCKERFILE_DIR} " ; then
50+ echo " DOCKERFILE_DIR not found."
51+ exit 1
52+ fi
5053
5154# Check if Dockerfile exists
52- if [ ! -f Dockerfile ]; then
53- echo " Dockerfile not found in the current directory ."
55+ if [[ ! -f Dockerfile ] ]; then
56+ echo " Dockerfile not found in DOCKERFILE_DIR ."
5457 exit 1
5558fi
5659
5760# Create ECR repository if it does not exist
58- aws ecr describe-repositories --repository-names $REPOSITORY_NAME --region $AWS_REGION > /dev/null 2>&1
59-
60- if [ $? -ne 0 ]; then
61- echo " Creating ECR repository: $REPOSITORY_NAME "
62- aws ecr create-repository --repository-name $REPOSITORY_NAME --region $AWS_REGION
61+ if ! aws ecr describe-repositories --repository-names " ${REPOSITORY_NAME} " --region " ${AWS_REGION} " > /dev/null 2>&1 ; then
62+ echo " Creating ECR repository: ${REPOSITORY_NAME} "
63+ aws ecr create-repository --repository-name " ${REPOSITORY_NAME} " --region " ${AWS_REGION} "
6364 # Add tags to the repository
64- aws ecr tag-resource --resource-arn arn:aws:ecr:$AWS_REGION : $ ACCOUNT_ID :repository/$REPOSITORY_NAME --tags $ TAGS
65+ aws ecr tag-resource --resource-arn " arn:aws:ecr:${ AWS_REGION} : ${ ACCOUNT_ID} :repository/${ REPOSITORY_NAME} " --tags " ${ TAGS} "
6566fi
6667
6768# Apply lifecycle policy to the ECR repository
68- aws ecr put-lifecycle-policy --repository-name $ REPOSITORY_NAME --lifecycle-policy-text file://$LIFECYCLE_POLICY_FILE --region $ AWS_REGION
69+ aws ecr put-lifecycle-policy --repository-name " ${ REPOSITORY_NAME} " --lifecycle-policy-text " file://${ LIFECYCLE_POLICY_FILE} " --region " ${ AWS_REGION} "
6970
7071printf " Building and pushing Docker image to ECR...\n"
7172# Authenticate Docker to ECR
72- aws ecr get-login-password --region $ AWS_REGION | docker login --username AWS --password-stdin $ ACCOUNT_ID .dkr.ecr.$AWS_REGION .amazonaws.com
73+ aws ecr get-login-password --region " ${ AWS_REGION} " | docker login --username AWS --password-stdin " ${ ACCOUNT_ID} .dkr.ecr.${ AWS_REGION} .amazonaws.com"
7374
7475printf " Building Docker image...\n"
7576# Remove existing Docker image if it exists
76- docker rmi $ IMAGE_NAME --force
77+ docker rmi " ${ IMAGE_NAME} " --force
7778
7879# Pull the base image for linux/amd64 architecture
7980docker pull --platform linux/amd64 grafana/grafana:latest
8081
8182# Build Docker image for linux/amd64 architecture and push to ECR
8283docker buildx create --use
83- docker buildx build --platform linux/amd64 -t $IMAGE_NAME --push .
84-
85- # Check if the build was successful
86- if [ $? -ne 0 ]; then
84+ if ! docker buildx build --platform linux/amd64 -t " ${IMAGE_NAME} " --push . ; then
8785 echo " Docker build failed."
8886 exit 1
8987fi
9088
9189# Inspect the built image
92- echo " Image: $LOCAL_IMAGE_NAME "
90+ echo " Image: ${ LOCAL_IMAGE_NAME} "
9391
94- echo " Docker image built and pushed to ECR successfully."
92+ echo " Docker image built and pushed to ECR successfully."
0 commit comments