version: 0.2 env: variables: OS_DISTRIBUTION: centos PYTHON_LOCATION: "/usr/local/bin/python3" TEST_NAME: "aws-lambda-python-rtc-centos-test" batch: build-matrix: static: ignore-failure: false env: privileged-mode: true dynamic: env: variables: DISTRO_VERSION: - "7" 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) - > if [[ "$ARCHITECTURE" == "x86_64" ]]; then RIE="aws-lambda-rie" elif [[ "$ARCHITECTURE" == "aarch64" ]]; then RIE="aws-lambda-rie-arm64" else echo "Architecture $ARCHITECTURE is not currently supported." exit 1 fi - tar -xvf tests/integration/resources/${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}/${RIE} /usr/bin/${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 \ --name "${TEST_NAME}-app" \ --network "${TEST_NAME}-network" \ --entrypoint="" \ "${IMAGE_TAG}" \ sh -c "/usr/bin/${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" exit -1 fi finally: - | 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 "---------------------------------------------------" - 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