version: 0.2 env: variables: OS_DISTRIBUTION: amazonlinux PYTHON_LOCATION: "/usr/local/bin/python3" TEST_NAME: "aws-lambda-python-rtc-amazonlinux-test" batch: build-matrix: static: ignore-failure: false env: privileged-mode: true dynamic: env: variables: DISTRO_VERSION: - "1" RUNTIME_VERSION: - "3.7" - "3.8" - "3.9" - "3.10" - "3.11" phases: pre_build: commands: - export IMAGE_TAG="python-${OS_DISTRIBUTION}-${DISTRO_VERSION}:${RUNTIME_VERSION}" - echo "Extracting and including the Runtime Interface Emulator" - SCRATCH_DIR=".scratch" - mkdir "${SCRATCH_DIR}" - ARCHITECTURE=$(arch) - tar -xvf tests/integration/resources/aws-lambda-rie.tar.gz --directory "${SCRATCH_DIR}" - > cp "tests/integration/docker/Dockerfile.echo.${OS_DISTRIBUTION}" \ "${SCRATCH_DIR}/Dockerfile.echo.${OS_DISTRIBUTION}.tmp" - > echo "COPY ${SCRATCH_DIR}/aws-lambda-rie /usr/bin/aws-lambda-rie" >> \ "${SCRATCH_DIR}/Dockerfile.echo.${OS_DISTRIBUTION}.tmp" - > if [[ -z "${DOCKERHUB_USERNAME}" && -z "${DOCKERHUB_PASSWORD}" ]]; then echo "DockerHub credentials not set as CodeBuild environment variables. Continuing without docker login." else echo "Performing DockerHub login . . ." docker login -u $DOCKERHUB_USERNAME -p $DOCKERHUB_PASSWORD fi - echo "Building image ${IMAGE_TAG}" - > docker build . \ -f "${SCRATCH_DIR}/Dockerfile.echo.${OS_DISTRIBUTION}.tmp" \ -t "${IMAGE_TAG}" \ --build-arg RUNTIME_VERSION="${RUNTIME_VERSION}" \ --build-arg DISTRO_VERSION="${DISTRO_VERSION}" \ --build-arg ARCHITECTURE="${ARCHITECTURE}" build: commands: - set -x - echo "Running Image ${IMAGE_TAG}" - docker network create "${TEST_NAME}-network" - > docker run \ --detach \ -e "PYTHON_LOCATION=${PYTHON_LOCATION}" \ --name "${TEST_NAME}-app" \ --network "${TEST_NAME}-network" \ --entrypoint="" \ "${IMAGE_TAG}" \ sh -c '/usr/bin/aws-lambda-rie ${PYTHON_LOCATION} -m awslambdaric app.handler' - sleep 2 - > docker run \ --name "${TEST_NAME}-tester" \ --env "TARGET=${TEST_NAME}-app" \ --network "${TEST_NAME}-network" \ --entrypoint="" \ "${IMAGE_TAG}" \ sh -c 'curl -X POST "http://${TARGET}:8080/2015-03-31/functions/function/invocations" -d "{}" --max-time 10' - actual="$(docker logs --tail 1 "${TEST_NAME}-tester" | xargs)" - expected='success' - | echo "Response: ${actual}" if [[ "$actual" != "$expected" ]]; then echo "fail! runtime: $RUNTIME - expected output $expected - got $actual" echo "---------Container Logs: ${TEST_NAME}-app----------" echo docker logs "${TEST_NAME}-app" || true echo echo "---------------------------------------------------" echo "--------Container Logs: ${TEST_NAME}-tester--------" echo docker logs "${TEST_NAME}-tester" || true echo echo "---------------------------------------------------" exit -1 fi finally: - echo "Cleaning up..." - docker stop "${TEST_NAME}-app" || true - docker rm --force "${TEST_NAME}-app" || true - docker stop "${TEST_NAME}-tester" || true - docker rm --force "${TEST_NAME}-tester" || true - docker network rm "${TEST_NAME}-network" || true