version: 0.2 env: variables: OS_DISTRIBUTION: alpine NODE_BINARY_LOCATION: "/usr/local/bin/node" NPX_BINARY_LOCATION: "/usr/local/bin/npx" batch: build-matrix: static: ignore-failure: false env: type: LINUX_CONTAINER privileged-mode: true dynamic: env: variables: DISTRO_VERSION: - "3.14" - "3.15" - "3.16" RUNTIME_VERSION: - "14" - "16" - "18" phases: pre_build: commands: - export IMAGE_TAG="nodejs-${OS_DISTRIBUTION}-${DISTRO_VERSION}:${RUNTIME_VERSION}" - echo "Extracting and including the Runtime Interface Emulator" - SCRATCH_DIR=".scratch" - mkdir "${SCRATCH_DIR}" - tar -xvf test/integration/resources/aws-lambda-rie.tar.gz --directory "${SCRATCH_DIR}" - > cp "test/integration/docker/Dockerfile.programmatic.${OS_DISTRIBUTION}" \ "${SCRATCH_DIR}/Dockerfile.programmatic.${OS_DISTRIBUTION}.tmp" - > echo "RUN apk add curl" >> \ "${SCRATCH_DIR}/Dockerfile.programmatic.${OS_DISTRIBUTION}.tmp" - > echo "COPY ${SCRATCH_DIR}/aws-lambda-rie /usr/bin/aws-lambda-rie" >> \ "${SCRATCH_DIR}/Dockerfile.programmatic.${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.programmatic.${OS_DISTRIBUTION}.tmp" \ -t "${IMAGE_TAG}" \ --build-arg RUNTIME_VERSION="${RUNTIME_VERSION}" \ --build-arg DISTRO_VERSION="${DISTRO_VERSION}" build: commands: - set -x - echo "Running Image ${IMAGE_TAG}" - docker network create "${OS_DISTRIBUTION}-network" - > docker run \ --detach \ -e "NODE_BINARY_LOCATION=${NODE_BINARY_LOCATION}" \ --name "${OS_DISTRIBUTION}-app" \ --network "${OS_DISTRIBUTION}-network" \ --entrypoint="" \ "${IMAGE_TAG}" \ sh -c '/usr/bin/aws-lambda-rie ${NODE_BINARY_LOCATION} index.mjs' - sleep 2 - > docker run \ --name "${OS_DISTRIBUTION}-tester" \ --env "TARGET=${OS_DISTRIBUTION}-app" \ --network "${OS_DISTRIBUTION}-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 "${OS_DISTRIBUTION}-tester" | xargs)" - expected='success' - | echo "Response: ${actual}" if [[ "$actual" != "$expected" ]]; then echo "fail! runtime: $RUNTIME - expected output $expected - got $actual" echo "---------Container Logs: ${OS_DISTRIBUTION}-app----------" echo docker logs "${OS_DISTRIBUTION}-app" echo echo "---------------------------------------------------" echo "--------Container Logs: ${OS_DISTRIBUTION}-tester--------" echo docker logs "${OS_DISTRIBUTION}-tester" echo echo "---------------------------------------------------" exit -1 fi finally: - echo "Cleaning up..." - docker stop "${OS_DISTRIBUTION}-app" || true - docker rm --force "${OS_DISTRIBUTION}-app" || true - docker stop "${OS_DISTRIBUTION}-tester" || true - docker rm --force "${OS_DISTRIBUTION}-tester" || true - docker network rm "${OS_DISTRIBUTION}-network" || true