diff --git a/package-lock.json b/package-lock.json index 3f26383..52f655f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,7 +1,7 @@ { "name": "aws-lambda-ric", - "version": "1.1.0", - "lockfileVersion": 2, + "version": "2.0.0", + "lockfileVersion": 1, "requires": true, "packages": { "": { @@ -5115,6 +5115,24 @@ "humanize-ms": "^1.2.1" } }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "requires": { + "debug": "4" + } + }, + "agentkeepalive": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.1.4.tgz", + "integrity": "sha512-+V/rGa3EuU74H6wR04plBb7Ks10FbtUQgRj/FQOG7uUIEuaINI+AiqJR1k6t3SVNs7o7ZjIdus6706qqzVq8jQ==", + "requires": { + "debug": "^4.1.0", + "depd": "^1.1.2", + "humanize-ms": "^1.2.1" + } + }, "aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", @@ -5656,8 +5674,7 @@ "version": "8.3.0", "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", - "dev": true, - "requires": {} + "dev": true }, "eslint-plugin-prettier": { "version": "3.4.0", @@ -7489,14 +7506,6 @@ "minipass": "^3.1.1" } }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", diff --git a/package.json b/package.json index 8ce6336..d8378e4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "aws-lambda-ric", - "version": "1.1.0", + "version": "2.0.0", "description": "AWS Lambda Runtime Interface Client for NodeJs", "homepage": "https://github.com/aws/aws-lambda-nodejs-runtime-interface-client", "main": "lib/index.js", diff --git a/scripts/preinstall.sh b/scripts/preinstall.sh index ff5d641..d65dfc4 100755 --- a/scripts/preinstall.sh +++ b/scripts/preinstall.sh @@ -31,6 +31,7 @@ else --prefix "$ARTIFACTS_DIR" \ --disable-shared \ --without-ssl \ + --with-pic \ --without-zlib && \ make && \ make install diff --git a/test/integration/codebuild/buildspec.os.alpine.1.yml b/test/integration/codebuild/buildspec.os.alpine.1.yml index 1cb927c..ba1c6d7 100644 --- a/test/integration/codebuild/buildspec.os.alpine.1.yml +++ b/test/integration/codebuild/buildspec.os.alpine.1.yml @@ -9,7 +9,6 @@ batch: static: ignore-failure: false env: - type: LINUX_CONTAINER privileged-mode: true dynamic: env: @@ -28,7 +27,17 @@ phases: - 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}" + - 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 test/integration/resources/${RIE}.tar.gz --directory "${SCRATCH_DIR}" - > cp "test/integration/docker/Dockerfile.echo.${OS_DISTRIBUTION}" \ "${SCRATCH_DIR}/Dockerfile.echo.${OS_DISTRIBUTION}.tmp" @@ -36,7 +45,7 @@ phases: echo "RUN apk add curl" >> \ "${SCRATCH_DIR}/Dockerfile.echo.${OS_DISTRIBUTION}.tmp" - > - echo "COPY ${SCRATCH_DIR}/aws-lambda-rie /usr/bin/aws-lambda-rie" >> \ + echo "COPY ${SCRATCH_DIR}/${RIE} /usr/bin/${RIE}" >> \ "${SCRATCH_DIR}/Dockerfile.echo.${OS_DISTRIBUTION}.tmp" - > if [[ -z "${DOCKERHUB_USERNAME}" && -z "${DOCKERHUB_PASSWORD}" ]]; @@ -61,12 +70,11 @@ phases: - > docker run \ --detach \ - -e "NPX_BINARY_LOCATION=${NPX_BINARY_LOCATION}" \ --name "${OS_DISTRIBUTION}-app" \ --network "${OS_DISTRIBUTION}-network" \ --entrypoint="" \ "${IMAGE_TAG}" \ - sh -c '/usr/bin/aws-lambda-rie ${NPX_BINARY_LOCATION} aws-lambda-ric index.handler' + sh -c "/usr/bin/${RIE} ${NPX_BINARY_LOCATION} aws-lambda-ric index.handler" - sleep 2 - > docker run \ @@ -82,19 +90,20 @@ phases: echo "Response: ${actual}" if [[ "$actual" != "$expected" ]]; then echo "fail! runtime: $RUNTIME - expected output $expected - got $actual" + exit -1 + fi + finally: + - | echo "---------Container Logs: ${OS_DISTRIBUTION}-app----------" echo - docker logs "${OS_DISTRIBUTION}-app" + docker logs "${OS_DISTRIBUTION}-app" || true echo echo "---------------------------------------------------" echo "--------Container Logs: ${OS_DISTRIBUTION}-tester--------" echo - docker logs "${OS_DISTRIBUTION}-tester" + docker logs "${OS_DISTRIBUTION}-tester" || true echo echo "---------------------------------------------------" - exit -1 - fi - finally: - echo "Cleaning up..." - docker stop "${OS_DISTRIBUTION}-app" || true - docker rm --force "${OS_DISTRIBUTION}-app" || true diff --git a/test/integration/codebuild/buildspec.os.alpine.2.yml b/test/integration/codebuild/buildspec.os.alpine.2.yml index d36ba58..eaf1ded 100644 --- a/test/integration/codebuild/buildspec.os.alpine.2.yml +++ b/test/integration/codebuild/buildspec.os.alpine.2.yml @@ -9,7 +9,6 @@ batch: static: ignore-failure: false env: - type: LINUX_CONTAINER privileged-mode: true dynamic: env: @@ -26,7 +25,17 @@ phases: - 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}" + - 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 test/integration/resources/${RIE}.tar.gz --directory "${SCRATCH_DIR}" - > cp "test/integration/docker/Dockerfile.echo.${OS_DISTRIBUTION}" \ "${SCRATCH_DIR}/Dockerfile.echo.${OS_DISTRIBUTION}.tmp" @@ -34,7 +43,7 @@ phases: echo "RUN apk add curl" >> \ "${SCRATCH_DIR}/Dockerfile.echo.${OS_DISTRIBUTION}.tmp" - > - echo "COPY ${SCRATCH_DIR}/aws-lambda-rie /usr/bin/aws-lambda-rie" >> \ + echo "COPY ${SCRATCH_DIR}/${RIE} /usr/bin/${RIE}" >> \ "${SCRATCH_DIR}/Dockerfile.echo.${OS_DISTRIBUTION}.tmp" - > if [[ -z "${DOCKERHUB_USERNAME}" && -z "${DOCKERHUB_PASSWORD}" ]]; @@ -59,12 +68,11 @@ phases: - > docker run \ --detach \ - -e "NPX_BINARY_LOCATION=${NPX_BINARY_LOCATION}" \ --name "${OS_DISTRIBUTION}-app" \ --network "${OS_DISTRIBUTION}-network" \ --entrypoint="" \ "${IMAGE_TAG}" \ - sh -c '/usr/bin/aws-lambda-rie ${NPX_BINARY_LOCATION} aws-lambda-ric index.handler' + sh -c "/usr/bin/${RIE} ${NPX_BINARY_LOCATION} aws-lambda-ric index.handler" - sleep 2 - > docker run \ @@ -80,19 +88,20 @@ phases: echo "Response: ${actual}" if [[ "$actual" != "$expected" ]]; then echo "fail! runtime: $RUNTIME - expected output $expected - got $actual" + exit -1 + fi + finally: + - | echo "---------Container Logs: ${OS_DISTRIBUTION}-app----------" echo - docker logs "${OS_DISTRIBUTION}-app" + docker logs "${OS_DISTRIBUTION}-app" || true echo echo "---------------------------------------------------" echo "--------Container Logs: ${OS_DISTRIBUTION}-tester--------" echo - docker logs "${OS_DISTRIBUTION}-tester" + docker logs "${OS_DISTRIBUTION}-tester" || true echo echo "---------------------------------------------------" - exit -1 - fi - finally: - echo "Cleaning up..." - docker stop "${OS_DISTRIBUTION}-app" || true - docker rm --force "${OS_DISTRIBUTION}-app" || true diff --git a/test/integration/codebuild/buildspec.os.alpine.3.yml b/test/integration/codebuild/buildspec.os.alpine.3.yml index ac16570..2a7cb16 100644 --- a/test/integration/codebuild/buildspec.os.alpine.3.yml +++ b/test/integration/codebuild/buildspec.os.alpine.3.yml @@ -9,7 +9,6 @@ batch: static: ignore-failure: false env: - type: LINUX_CONTAINER privileged-mode: true dynamic: env: @@ -26,7 +25,17 @@ phases: - 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}" + - 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 test/integration/resources/${RIE}.tar.gz --directory "${SCRATCH_DIR}" - > cp "test/integration/docker/Dockerfile.echo.${OS_DISTRIBUTION}" \ "${SCRATCH_DIR}/Dockerfile.echo.${OS_DISTRIBUTION}.tmp" @@ -34,7 +43,7 @@ phases: echo "RUN apk add curl" >> \ "${SCRATCH_DIR}/Dockerfile.echo.${OS_DISTRIBUTION}.tmp" - > - echo "COPY ${SCRATCH_DIR}/aws-lambda-rie /usr/bin/aws-lambda-rie" >> \ + echo "COPY ${SCRATCH_DIR}/${RIE} /usr/bin/${RIE}" >> \ "${SCRATCH_DIR}/Dockerfile.echo.${OS_DISTRIBUTION}.tmp" - > if [[ -z "${DOCKERHUB_USERNAME}" && -z "${DOCKERHUB_PASSWORD}" ]]; @@ -59,12 +68,11 @@ phases: - > docker run \ --detach \ - -e "NPX_BINARY_LOCATION=${NPX_BINARY_LOCATION}" \ --name "${OS_DISTRIBUTION}-app" \ --network "${OS_DISTRIBUTION}-network" \ --entrypoint="" \ "${IMAGE_TAG}" \ - sh -c '/usr/bin/aws-lambda-rie ${NPX_BINARY_LOCATION} aws-lambda-ric index.handler' + sh -c "/usr/bin/${RIE} ${NPX_BINARY_LOCATION} aws-lambda-ric index.handler" - sleep 2 - > docker run \ @@ -80,19 +88,20 @@ phases: echo "Response: ${actual}" if [[ "$actual" != "$expected" ]]; then echo "fail! runtime: $RUNTIME - expected output $expected - got $actual" + exit -1 + fi + finally: + - | echo "---------Container Logs: ${OS_DISTRIBUTION}-app----------" echo - docker logs "${OS_DISTRIBUTION}-app" + docker logs "${OS_DISTRIBUTION}-app" || true echo echo "---------------------------------------------------" echo "--------Container Logs: ${OS_DISTRIBUTION}-tester--------" echo - docker logs "${OS_DISTRIBUTION}-tester" + docker logs "${OS_DISTRIBUTION}-tester" || true echo echo "---------------------------------------------------" - exit -1 - fi - finally: - echo "Cleaning up..." - docker stop "${OS_DISTRIBUTION}-app" || true - docker rm --force "${OS_DISTRIBUTION}-app" || true diff --git a/test/integration/codebuild/buildspec.os.amazonlinux.yml b/test/integration/codebuild/buildspec.os.amazonlinux.1.yml similarity index 79% rename from test/integration/codebuild/buildspec.os.amazonlinux.yml rename to test/integration/codebuild/buildspec.os.amazonlinux.1.yml index 26c0988..c50975c 100644 --- a/test/integration/codebuild/buildspec.os.amazonlinux.yml +++ b/test/integration/codebuild/buildspec.os.amazonlinux.1.yml @@ -9,14 +9,12 @@ batch: static: ignore-failure: false env: - type: LINUX_CONTAINER privileged-mode: true dynamic: env: variables: DISTRO_VERSION: - "1" - - "2" RUNTIME_VERSION: - "10" - "12" @@ -28,12 +26,22 @@ phases: - 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}" + - 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 test/integration/resources/${RIE}.tar.gz --directory "${SCRATCH_DIR}" - > cp "test/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" >> \ + echo "COPY ${SCRATCH_DIR}/${RIE} /usr/bin/${RIE}" >> \ "${SCRATCH_DIR}/Dockerfile.echo.${OS_DISTRIBUTION}.tmp" - > if [[ -z "${DOCKERHUB_USERNAME}" && -z "${DOCKERHUB_PASSWORD}" ]]; @@ -49,7 +57,8 @@ phases: -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 DISTRO_VERSION="${DISTRO_VERSION}" \ + --build-arg ARCHITECTURE="${ARCHITECTURE}" build: commands: - set -x @@ -58,12 +67,11 @@ phases: - > docker run \ --detach \ - -e "NPX_BINARY_LOCATION=${NPX_BINARY_LOCATION}" \ --name "${OS_DISTRIBUTION}-app" \ --network "${OS_DISTRIBUTION}-network" \ --entrypoint="" \ "${IMAGE_TAG}" \ - sh -c '/usr/bin/aws-lambda-rie ${NPX_BINARY_LOCATION} aws-lambda-ric index.handler' + sh -c "/usr/bin/${RIE} ${NPX_BINARY_LOCATION} aws-lambda-ric index.handler" - sleep 2 - > docker run \ @@ -79,19 +87,20 @@ phases: echo "Response: ${actual}" if [[ "$actual" != "$expected" ]]; then echo "fail! runtime: $RUNTIME - expected output $expected - got $actual" + exit -1 + fi + finally: + - | echo "---------Container Logs: ${OS_DISTRIBUTION}-app----------" echo - docker logs "${OS_DISTRIBUTION}-app" + docker logs "${OS_DISTRIBUTION}-app" || true echo echo "---------------------------------------------------" echo "--------Container Logs: ${OS_DISTRIBUTION}-tester--------" echo - docker logs "${OS_DISTRIBUTION}-tester" + docker logs "${OS_DISTRIBUTION}-tester" || true echo echo "---------------------------------------------------" - exit -1 - fi - finally: - echo "Cleaning up..." - docker stop "${OS_DISTRIBUTION}-app" || true - docker rm --force "${OS_DISTRIBUTION}-app" || true diff --git a/test/integration/codebuild/buildspec.os.amazonlinux.2.yml b/test/integration/codebuild/buildspec.os.amazonlinux.2.yml new file mode 100644 index 0000000..167bd31 --- /dev/null +++ b/test/integration/codebuild/buildspec.os.amazonlinux.2.yml @@ -0,0 +1,109 @@ +version: 0.2 + +env: + variables: + OS_DISTRIBUTION: amazonlinux + NPX_BINARY_LOCATION: "/usr/bin/npx" +batch: + build-matrix: + static: + ignore-failure: false + env: + privileged-mode: true + dynamic: + env: + variables: + DISTRO_VERSION: + - "2" + RUNTIME_VERSION: + - "10" + - "12" + - "14" +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}" + - 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 test/integration/resources/${RIE}.tar.gz --directory "${SCRATCH_DIR}" + - > + cp "test/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 "${OS_DISTRIBUTION}-network" + - > + docker run \ + --detach \ + --name "${OS_DISTRIBUTION}-app" \ + --network "${OS_DISTRIBUTION}-network" \ + --entrypoint="" \ + "${IMAGE_TAG}" \ + sh -c "/usr/bin/${RIE} ${NPX_BINARY_LOCATION} aws-lambda-ric index.handler" + - 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" + exit -1 + fi + finally: + - | + echo "---------Container Logs: ${OS_DISTRIBUTION}-app----------" + echo + docker logs "${OS_DISTRIBUTION}-app" || true + echo + echo "---------------------------------------------------" + echo "--------Container Logs: ${OS_DISTRIBUTION}-tester--------" + echo + docker logs "${OS_DISTRIBUTION}-tester" || true + echo + echo "---------------------------------------------------" + - 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 \ No newline at end of file diff --git a/test/integration/codebuild/buildspec.os.centos.yml b/test/integration/codebuild/buildspec.os.centos.yml index 963c8e8..83a59fe 100644 --- a/test/integration/codebuild/buildspec.os.centos.yml +++ b/test/integration/codebuild/buildspec.os.centos.yml @@ -9,7 +9,6 @@ batch: static: ignore-failure: false env: - type: LINUX_CONTAINER privileged-mode: true dynamic: env: @@ -28,12 +27,22 @@ phases: - 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}" + - 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 test/integration/resources/${RIE}.tar.gz --directory "${SCRATCH_DIR}" - > cp "test/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" >> \ + echo "COPY ${SCRATCH_DIR}/${RIE} /usr/bin/${RIE}" >> \ "${SCRATCH_DIR}/Dockerfile.echo.${OS_DISTRIBUTION}.tmp" - > if [[ -z "${DOCKERHUB_USERNAME}" && -z "${DOCKERHUB_PASSWORD}" ]]; @@ -49,7 +58,8 @@ phases: -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 DISTRO_VERSION="${DISTRO_VERSION}" \ + --build-arg ARCHITECTURE="${ARCHITECTURE}" build: commands: - set -x @@ -58,12 +68,11 @@ phases: - > docker run \ --detach \ - -e "NPX_BINARY_LOCATION=${NPX_BINARY_LOCATION}" \ --name "${OS_DISTRIBUTION}-app" \ --network "${OS_DISTRIBUTION}-network" \ --entrypoint="" \ "${IMAGE_TAG}" \ - sh -c '/usr/bin/aws-lambda-rie ${NPX_BINARY_LOCATION} aws-lambda-ric index.handler' + sh -c "/usr/bin/${RIE} ${NPX_BINARY_LOCATION} aws-lambda-ric index.handler" - sleep 2 - > docker run \ @@ -79,19 +88,20 @@ phases: echo "Response: ${actual}" if [[ "$actual" != "$expected" ]]; then echo "fail! runtime: $RUNTIME - expected output $expected - got $actual" + exit -1 + fi + finally: + - | echo "---------Container Logs: ${OS_DISTRIBUTION}-app----------" echo - docker logs "${OS_DISTRIBUTION}-app" + docker logs "${OS_DISTRIBUTION}-app" || true echo echo "---------------------------------------------------" echo "--------Container Logs: ${OS_DISTRIBUTION}-tester--------" echo - docker logs "${OS_DISTRIBUTION}-tester" + docker logs "${OS_DISTRIBUTION}-tester" || true echo echo "---------------------------------------------------" - exit -1 - fi - finally: - echo "Cleaning up..." - docker stop "${OS_DISTRIBUTION}-app" || true - docker rm --force "${OS_DISTRIBUTION}-app" || true diff --git a/test/integration/codebuild/buildspec.os.debian.yml b/test/integration/codebuild/buildspec.os.debian.yml index 52d5280..6bd59e7 100644 --- a/test/integration/codebuild/buildspec.os.debian.yml +++ b/test/integration/codebuild/buildspec.os.debian.yml @@ -9,7 +9,6 @@ batch: static: ignore-failure: false env: - type: LINUX_CONTAINER privileged-mode: true dynamic: env: @@ -27,12 +26,22 @@ phases: - 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}" + - 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 test/integration/resources/${RIE}.tar.gz --directory "${SCRATCH_DIR}" - > cp "test/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" >> \ + echo "COPY ${SCRATCH_DIR}/${RIE} /usr/bin/${RIE}" >> \ "${SCRATCH_DIR}/Dockerfile.echo.${OS_DISTRIBUTION}.tmp" - > if [[ -z "${DOCKERHUB_USERNAME}" && -z "${DOCKERHUB_PASSWORD}" ]]; @@ -60,12 +69,11 @@ phases: - > docker run \ --detach \ - -e "NPX_BINARY_LOCATION=${NPX_BINARY_LOCATION}" \ --name "${OS_DISTRIBUTION}-app" \ --network "${OS_DISTRIBUTION}-network" \ --entrypoint="" \ "${IMAGE_TAG}" \ - sh -c '/usr/bin/aws-lambda-rie ${NPX_BINARY_LOCATION} aws-lambda-ric index.handler' + sh -c "/usr/bin/${RIE} ${NPX_BINARY_LOCATION} aws-lambda-ric index.handler" - sleep 2 - > docker run \ @@ -81,19 +89,20 @@ phases: echo "Response: ${actual}" if [[ "$actual" != "$expected" ]]; then echo "fail! runtime: $RUNTIME - expected output $expected - got $actual" + exit -1 + fi + finally: + - | echo "---------Container Logs: ${OS_DISTRIBUTION}-app----------" echo - docker logs "${OS_DISTRIBUTION}-app" + docker logs "${OS_DISTRIBUTION}-app" || true echo echo "---------------------------------------------------" echo "--------Container Logs: ${OS_DISTRIBUTION}-tester--------" echo - docker logs "${OS_DISTRIBUTION}-tester" + docker logs "${OS_DISTRIBUTION}-tester" || true echo echo "---------------------------------------------------" - exit -1 - fi - finally: - echo "Cleaning up..." - docker stop "${OS_DISTRIBUTION}-app" || true - docker rm --force "${OS_DISTRIBUTION}-app" || true diff --git a/test/integration/codebuild/buildspec.os.ubuntu.yml b/test/integration/codebuild/buildspec.os.ubuntu.yml index 6873f65..6180d18 100644 --- a/test/integration/codebuild/buildspec.os.ubuntu.yml +++ b/test/integration/codebuild/buildspec.os.ubuntu.yml @@ -9,7 +9,6 @@ batch: static: ignore-failure: false env: - type: LINUX_CONTAINER privileged-mode: true dynamic: env: @@ -29,12 +28,22 @@ phases: - 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}" + - 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 test/integration/resources/${RIE}.tar.gz --directory "${SCRATCH_DIR}" - > cp "test/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" >> \ + echo "COPY ${SCRATCH_DIR}/${RIE} /usr/bin/${RIE}" >> \ "${SCRATCH_DIR}/Dockerfile.echo.${OS_DISTRIBUTION}.tmp" - > if [[ -z "${DOCKERHUB_USERNAME}" && -z "${DOCKERHUB_PASSWORD}" ]]; @@ -50,7 +59,8 @@ phases: -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 DISTRO_VERSION="${DISTRO_VERSION}" \ + --build-arg ARCHITECTURE="${ARCHITECTURE}" build: commands: - set -x @@ -59,12 +69,11 @@ phases: - > docker run \ --detach \ - -e "NPX_BINARY_LOCATION=${NPX_BINARY_LOCATION}" \ --name "${OS_DISTRIBUTION}-app" \ --network "${OS_DISTRIBUTION}-network" \ --entrypoint="" \ "${IMAGE_TAG}" \ - sh -c '/usr/bin/aws-lambda-rie ${NPX_BINARY_LOCATION} aws-lambda-ric index.handler' + sh -c "/usr/bin/${RIE} ${NPX_BINARY_LOCATION} aws-lambda-ric index.handler" - sleep 2 - > docker run \ @@ -80,19 +89,20 @@ phases: echo "Response: ${actual}" if [[ "$actual" != "$expected" ]]; then echo "fail! runtime: $RUNTIME - expected output $expected - got $actual" + exit -1 + fi + finally: + - | echo "---------Container Logs: ${OS_DISTRIBUTION}-app----------" echo - docker logs "${OS_DISTRIBUTION}-app" + docker logs "${OS_DISTRIBUTION}-app" || true echo echo "---------------------------------------------------" echo "--------Container Logs: ${OS_DISTRIBUTION}-tester--------" echo - docker logs "${OS_DISTRIBUTION}-tester" + docker logs "${OS_DISTRIBUTION}-tester" || true echo echo "---------------------------------------------------" - exit -1 - fi - finally: - echo "Cleaning up..." - docker stop "${OS_DISTRIBUTION}-app" || true - docker rm --force "${OS_DISTRIBUTION}-app" || true diff --git a/test/integration/docker/Dockerfile.echo.amazonlinux b/test/integration/docker/Dockerfile.echo.amazonlinux index a5316c5..3dec078 100644 --- a/test/integration/docker/Dockerfile.echo.amazonlinux +++ b/test/integration/docker/Dockerfile.echo.amazonlinux @@ -15,25 +15,21 @@ RUN curl -sL https://rpm.nodesource.com/setup_${RUNTIME_VERSION}.x | bash - && \ # Stage 2 - build function and dependencies FROM node-amazonlinux AS build-image +ARG ARCHITECTURE # Install aws-lambda-cpp build dependencies RUN yum install -y \ tar \ gzip \ make \ + wget \ autoconf \ automake \ libtool \ libcurl-devel \ gcc-c++ -# Install CMake > 3.9 -RUN if [ "$(printf '%s\n' "3.9.0" "$(cmake --version | head -n1 | tr -dc '0-9.')" | sort -V | head -n1)" != "3.9.0" ]; then \ - curl -o cmake3.tar.gz https://cmake.org/files/v3.10/cmake-3.10.0.tar.gz && \ - tar -xzf cmake3.tar.gz && \ - cd cmake-3.10.0 && \ - ./bootstrap && \ - make && \ - make install \ - ; fi +# Install a modern CMake +RUN wget --quiet -O cmake-install https://github.com/Kitware/CMake/releases/download/v3.20.0/cmake-3.20.0-linux-${ARCHITECTURE}.sh && \ + sh cmake-install --skip-license --prefix=/usr --exclude-subdirectory; # Include global arg in this stage of the build ARG FUNCTION_DIR diff --git a/test/integration/docker/Dockerfile.echo.centos b/test/integration/docker/Dockerfile.echo.centos index e57352f..1c9300b 100644 --- a/test/integration/docker/Dockerfile.echo.centos +++ b/test/integration/docker/Dockerfile.echo.centos @@ -15,23 +15,21 @@ RUN curl -sL https://rpm.nodesource.com/setup_${RUNTIME_VERSION}.x | bash - && \ # Stage 2 - build function and dependencies FROM node-centos AS build-image +ARG ARCHITECTURE # Install aws-lambda-cpp build dependencies RUN yum install -y \ tar \ gzip \ make \ + wget \ autoconf \ automake \ libtool \ libcurl-devel \ gcc-c++ -# Install CMake > 3.9 -RUN curl -o cmake3.tar.gz https://cmake.org/files/v3.10/cmake-3.10.0.tar.gz && \ - tar -xzf cmake3.tar.gz && \ - cd cmake-3.10.0 && \ - ./bootstrap && \ - make && \ - make install +# Install a modern CMake +RUN wget --quiet -O cmake-install https://github.com/Kitware/CMake/releases/download/v3.20.0/cmake-3.20.0-linux-${ARCHITECTURE}.sh && \ + sh cmake-install --skip-license --prefix=/usr --exclude-subdirectory; # Include global arg in this stage of the build ARG FUNCTION_DIR diff --git a/test/integration/docker/Dockerfile.echo.ubuntu b/test/integration/docker/Dockerfile.echo.ubuntu index 398a2ab..669c803 100644 --- a/test/integration/docker/Dockerfile.echo.ubuntu +++ b/test/integration/docker/Dockerfile.echo.ubuntu @@ -19,6 +19,7 @@ RUN apt-get update && \ # Stage 2 - build function and dependencies FROM node-ubuntu AS build-image +ARG ARCHITECTURE # Install aws-lambda-cpp build dependencies RUN apt-get update && \ apt-get install -y \ @@ -32,16 +33,11 @@ RUN apt-get update && \ autoconf \ automake \ libtool \ + wget \ libcurl4-openssl-dev -# Install CMake > 3.9 for Ubuntu 16.04 -RUN if [ "$(printf '%s\n' "3.9.0" "$(cmake --version | head -n1 | tr -dc '0-9.')" | sort -V | head -n1)" != "3.9.0" ]; then \ - curl -o cmake3.tar.gz https://cmake.org/files/v3.10/cmake-3.10.0.tar.gz && \ - tar -xzf cmake3.tar.gz && \ - cd cmake-3.10.0 && \ - ./bootstrap && \ - make && \ - make install \ - ; fi +# Install a modern CMake +RUN wget --quiet -O cmake-install https://github.com/Kitware/CMake/releases/download/v3.20.0/cmake-3.20.0-linux-${ARCHITECTURE}.sh && \ + sh cmake-install --skip-license --prefix=/usr --exclude-subdirectory; # Include global arg in this stage of the build ARG FUNCTION_DIR diff --git a/test/integration/resources/aws-lambda-rie-arm64.tar.gz b/test/integration/resources/aws-lambda-rie-arm64.tar.gz new file mode 100644 index 0000000..f62577f Binary files /dev/null and b/test/integration/resources/aws-lambda-rie-arm64.tar.gz differ