version: 0.2

env:
  variables:
    OS_DISTRIBUTION: amazonlinux
    JAVA_BINARY_LOCATION: "/usr/bin/java"
batch:
  build-matrix:
    static:
      ignore-failure: false
      env:
        privileged-mode: true
    dynamic:
      env:
        variables:
          DISTRO_VERSION:
            - "1"
          RUNTIME_VERSION:
            - "openjdk8"
          PLATFORM:
            - "linux/amd64"
phases:
  install:
    commands:
      - >
        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
  pre_build:
    commands:
      # Log some environment variables for troubleshooting
      - (mvn -v)
      # Install events (dependency of serialization)
      - (cd aws-lambda-java-events && mvn install)
      # Install serialization (dependency of RIC)
      - (cd aws-lambda-java-serialization && mvn install)
      - (cd aws-lambda-java-runtime-interface-client && mvn install -DmultiArch=false)
      - (cd aws-lambda-java-runtime-interface-client/test/integration/test-handler && mvn install)
      - export IMAGE_TAG="java-${OS_DISTRIBUTION}-${DISTRO_VERSION}:${RUNTIME_VERSION}"
      - echo "Extracting and including Runtime Interface Emulator"
      - SCRATCH_DIR=".scratch"
      - mkdir "${SCRATCH_DIR}"
      - RIE="aws-lambda-rie"
      - tar -xvf aws-lambda-java-runtime-interface-client/test/integration/resources/${RIE}.tar.gz --directory "${SCRATCH_DIR}"
      - >
        cp "aws-lambda-java-runtime-interface-client/test/integration/docker/Dockerfile.function.${OS_DISTRIBUTION}" \
          "${SCRATCH_DIR}/Dockerfile.function.${OS_DISTRIBUTION}.tmp"
      - >
        echo "COPY ${SCRATCH_DIR}/${RIE} /usr/bin/${RIE}" >> \
          "${SCRATCH_DIR}/Dockerfile.function.${OS_DISTRIBUTION}.tmp"
      - echo "Building image ${IMAGE_TAG}"
      - >
        docker build . \
          -f "${SCRATCH_DIR}/Dockerfile.function.${OS_DISTRIBUTION}.tmp" \
          -t "${IMAGE_TAG}" \
          --build-arg RUNTIME_VERSION="${RUNTIME_VERSION}" \
          --build-arg DISTRO_VERSION="${DISTRO_VERSION}"
  build:
    commands:
      - aws-lambda-java-runtime-interface-client/test/integration/codebuild/scripts/run_invocation_test.sh
    finally:
      - aws-lambda-java-runtime-interface-client/test/integration/codebuild/scripts/fetch_test_container_logs.sh
      - aws-lambda-java-runtime-interface-client/test/integration/codebuild/scripts/clean_up.sh