#!/bin/bash
set -e -o pipefail
TMPDIR=${TMPDIR:-/tmp}
docker_dir="$PWD"
base_image="python-lambda"
example_image="example-lambda-image"
header() { printf '=%.0s' {1..79}; echo; echo $@; printf '=%.0s' {1..79}; echo; }
declare -a dockerfiles=( "$@" )
if [[ $# == 0 ]]; then
dockerfiles=( Dockerfile-* )
fi
for dockerfile in "${dockerfiles[@]}"; do
ver=$(echo "$dockerfile" | cut -d '-' -f 2)
tag="$ver-test"
base_image_tag="$base_image:$tag"
example_image_tag="$example_image:$tag"
example_image_tmp="$TMPDIR/$example_image-$tag"
header "Build base image - $ver"
set -x
cd $docker_dir
docker build --tag $base_image_tag --file $dockerfile .
set +x
header "Copy derived project - $ver"
set -x
rm -rvf $example_image_tmp &>/dev/null || true
cp -rv $docker_dir/example/ $example_image_tmp/
cd $example_image_tmp
sed -i "1s/.*/FROM $base_image_tag/" Dockerfile
sed -i "s/runtime: .*/runtime: python$ver/" config.yaml
test -d ~/.aws && cp -rv ~/.aws $example_image_tmp
set +x
header "Build derived docker - $ver"
set -x
docker build --tag $example_image_tag .
set +x
header "Invoke lambda in container - $ver"
set -x
docker run $example_image_tag lambda invoke
set +x
header "Run tests - $ver"
set -x
docker run $example_image_tag ./run_tests
set +x
header "Build lambda - $ver"
set -x
docker run $example_image_tag lambda build
set +x
header "Deploy lambda - $ver"
set -x
docker run --rm $example_image_tag lambda deploy
set +x
header "Invoke lambda on AWS - $ver"
set -x
aws lambda invoke --function-name=example-lambda --payload "`cat event.json`" output.json 2>result.json
cat result.json
cat output.json
[[ `grep Error result.json | wc -l` -ne 0 ]] && exit 1
if [[ `cat output.json | md5sum | cut -d ' ' -f 1` != 'f5fc1910251a0497f1edf58cccbfc7b6' ]]; then
echo 'ERROR: md5sum of output returned by lambda invoke on AWS did not match expected results' 1&>2
exit 2
fi
aws lambda delete-function --function-name=example-lambda
set +x
header "Cleanup - $ver"
set -x
docker rmi -f $example_image_tag
docker rmi -f $base_image_tag
rm -rvf $example_image_tmp
set +x
done