# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
#!/bin/bash
#
# This assumes all of the OS-level configuration has been completed and git repo has already been cloned
#
# This script should be run from the repo's deployment directory
# cd deployment
# ./build-s3-dist.sh source-bucket-base-name solution-name version-code
#
# Paramenters:
# - source-bucket-base-name: Name for the S3 bucket location where the template will source the Lambda
# code from. The template will append '-[region_name]' to this bucket name.
# For example: ./build-s3-dist.sh solutions my-solution v1.0.0
# The template will then expect the source code to be located in the solutions-[region_name] bucket
#
# - solution-name: name of the solution for consistency
#
# - version-code: version of the package
# Check to see if input has been provided:
if [ -z "$1" ]; then
echo "usage: $0 [] [] []"
echo
echo "Please provide the base source bucket name, trademark approved solution name and version where the lambda code will eventually reside."
echo "For example: ./build-s3-dist.sh solutions trademarked-solution-name v1.0.0 us-east-1"
exit 1
fi
OUT_DIR="../out"
export RELEASE_S3_BUCKET_BASE="$1"
export RELEASE_S3_PREFIX="${2:-artifacts/lca/genesys-audiohook}"
if [ ! -z "$3" ]; then
export RELEASE_VERSION="${3}"
fi
if [ -z "$4" ]; then
export AWS_REGION=${AWS_REGION:-us-east-1}
else
export AWS_REGION="$4"
fi
[ -d ${OUT_DIR} ] && rm -fr ${OUT_DIR}
mkdir -p ${OUT_DIR}
cd ..
zip -r out/audiohooksrc.zip source/ -x source/app/node_modules/**\* source/app/dist/**\*
cd deployment
# git ls-files .. | xargs zip -@ --filesync ${OUT_DIR}/audiohooksrc.zip
export RELEASE_S3_BUCKET=${RELEASE_S3_BUCKET_BASE}-${AWS_REGION}
aws s3 cp ${OUT_DIR}/audiohooksrc.zip s3://${RELEASE_S3_BUCKET}/${RELEASE_S3_PREFIX}/${RELEASE_VERSION}/audiohooksrc.zip
TEMPLATE_FILE="./genesys-audiohook.yaml"
RELEASE_S3_PREFIX_SUB=${RELEASE_S3_PREFIX////_}
PACKAGE_RELEASE_REPLACE_OUT_FILE=${OUT_DIR}/template-replaced-${RELEASE_S3_BUCKET}-${RELEASE_S3_PREFIX_SUB}-${RELEASE_VERSION}.yaml
sed -E \
" \
/^ {2,}BootstrapBucketBaseName:/ , /^ {2,}Default:/ s@^(.*Default: {1,})(.*)@\1 ${RELEASE_S3_BUCKET_BASE}@ ; \
/^ {2,}BootstrapS3Prefix:/ , /^ {2,}Default:/ s@^(.*Default: {1,})(.*)@\1 ${RELEASE_S3_PREFIX}@ ; \
/^ {2,}BootstrapVersion:/ , /^ {2,}Default:/ s@^(.*Default: {1,})(.*)@\1 ${RELEASE_VERSION}@ ; \
" \
${TEMPLATE_FILE} > ${PACKAGE_RELEASE_REPLACE_OUT_FILE}
PACKAGE_RELEASE_FILE_NAME=template-packaged-${RELEASE_S3_BUCKET}-${RELEASE_S3_PREFIX_SUB}-${RELEASE_VERSION}.yaml
PACKAGE_RELEASE_OUT_FILE=${OUT_DIR}/${PACKAGE_RELEASE_FILE_NAME}
echo "[INFO] sam building template file for release ${RELEASE_VERSION}"
sam build \
--use-container \
--parallel \
--cached \
--template-file ${PACKAGE_RELEASE_REPLACE_OUT_FILE}
echo "[INFO] sam packaging for release ${RELEASE_VERSION}"
sam package \
--s3-bucket ${RELEASE_S3_BUCKET} \
--s3-prefix ${RELEASE_S3_PREFIX}/${RELEASE_VERSION} \
--output-template-file ${PACKAGE_RELEASE_OUT_FILE}
RELEASE_TEMPLATE_S3_URL=s3://${RELEASE_S3_BUCKET}/${RELEASE_S3_PREFIX}/${RELEASE_VERSION}/template.yaml
RELEASE_UPLOAD_FILE=${OUT_DIR}/release-upload-${PACKAGE_RELEASE_FILE_NAME}.txt
echo "[INFO] uploading ${PACKAGE_RELEASE_OUT_FILE} to ${RELEASE_TEMPLATE_S3_URL}"
aws s3 cp ${PACKAGE_RELEASE_OUT_FILE} ${RELEASE_TEMPLATE_S3_URL} | tee ${RELEASE_UPLOAD_FILE}
echo "[INFO] CloudFormation template URL: https://${RELEASE_S3_BUCKET}.s3.amazonaws.com/${RELEASE_S3_PREFIX}/${RELEASE_VERSION}/template.yaml"