diff --git a/Dockerfile b/Dockerfile index 760b7ab8..5e7d2e14 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,7 @@ ARG image FROM $image AS builder ARG image +ARG dd_trace_package # Create the directory structure required for AWS Lambda Layer RUN mkdir -p /nodejs/node_modules/ @@ -8,6 +9,9 @@ RUN mkdir -p /nodejs/node_modules/ # Install dev dependencies COPY . datadog-lambda-js WORKDIR /datadog-lambda-js +RUN if [ -n "$dd_trace_package" ]; then \ + node -e 'const fs = require("fs"); const pkg = JSON.parse(fs.readFileSync("package.json", "utf8")); const spec = process.argv[1]; if (pkg.devDependencies && pkg.devDependencies["dd-trace"]) { pkg.devDependencies["dd-trace"] = spec; } else { pkg.dependencies = pkg.dependencies || {}; pkg.dependencies["dd-trace"] = spec; } fs.writeFileSync("package.json", JSON.stringify(pkg, null, 2) + "\n");' "$dd_trace_package"; \ + fi RUN yarn install # Build the lambda layer diff --git a/scripts/build_layers.sh b/scripts/build_layers.sh index bd8786e8..731c6416 100755 --- a/scripts/build_layers.sh +++ b/scripts/build_layers.sh @@ -6,6 +6,21 @@ # Copyright 2019 Datadog, Inc. # Builds Datadog node layers for lambda functions, using Docker +# +# Usage: +# NODE_VERSION=20.19 ./scripts/build_layers.sh +# +# dd-trace-js overrides (highest priority first): +# DD_TRACE_PACKAGE Exact package spec to use for dd-trace. +# DD_TRACE_COMMIT Specific dd-trace-js commit SHA to build from GitHub. +# DD_TRACE_COMMIT_BRANCH dd-trace-js branch name to build from GitHub. +# +# Examples: +# # Build a single layer for Node 20 +# NODE_VERSION=20.19 ./scripts/build_layers.sh +# +# # Build a single layer with dd-trace from a branch +# DD_TRACE_COMMIT_BRANCH=joey/cross-invocation-tracecontext-propagation NODE_VERSION=20.19 ./scripts/build_layers.sh set -e LAYER_DIR=".layers" @@ -27,6 +42,21 @@ else fi fi +function resolve_dd_trace_package { + if [ -n "$DD_TRACE_PACKAGE" ]; then + echo "$DD_TRACE_PACKAGE" + elif [ -n "$DD_TRACE_COMMIT" ]; then + echo "git+https://github.com/DataDog/dd-trace-js.git#$DD_TRACE_COMMIT" + elif [ -n "$DD_TRACE_COMMIT_BRANCH" ]; then + echo "git+https://github.com/DataDog/dd-trace-js.git#$DD_TRACE_COMMIT_BRANCH" + fi +} + +DD_TRACE_PACKAGE_SPEC=$(resolve_dd_trace_package) +if [ -n "$DD_TRACE_PACKAGE_SPEC" ]; then + echo "Using dd-trace package spec: $DD_TRACE_PACKAGE_SPEC" +fi + function make_path_absolute { echo "$(cd "$(dirname "$1")"; pwd)/$(basename "$1")" } @@ -40,7 +70,9 @@ function docker_build_zip { # between different node runtimes. temp_dir=$(mktemp -d) docker buildx build -t datadog-lambda-layer-node:$1 . --no-cache \ - --build-arg image=registry.ddbuild.io/images/mirror/node:${node_image_version}-bullseye --progress=plain -o $temp_dir/nodejs + --build-arg image=registry.ddbuild.io/images/mirror/node:${node_image_version}-bullseye \ + --build-arg dd_trace_package="$DD_TRACE_PACKAGE_SPEC" \ + --progress=plain -o $temp_dir/nodejs # Zip to destination, and keep directory structure as based in $temp_dir (cd $temp_dir && zip -q -r $destination ./) diff --git a/scripts/publish_layers.sh b/scripts/publish_layers.sh index 827d4545..ad4b964b 100755 --- a/scripts/publish_layers.sh +++ b/scripts/publish_layers.sh @@ -31,15 +31,6 @@ if [[ ${#LAYER_PATHS[@]} -ne $expected_length ]] || \ exit 1 fi -# Check that the layer files exist -for layer_file in "${LAYER_PATHS[@]}" -do - if [ ! -f $layer_file ]; then - echo "Could not find $layer_file." - exit 1 - fi -done - # Determine the target regions if [ -z "$REGIONS" ]; then echo "Region not specified, running for all available regions." @@ -78,6 +69,19 @@ else echo "Layer version specified: $VERSION" fi +# Check that the layer files exist for the layers we'll actually publish +for layer_name in "${LAYERS[@]}"; do + for i in "${!AVAILABLE_LAYERS[@]}"; do + if [[ "${AVAILABLE_LAYERS[$i]}" = "${layer_name}" ]]; then + layer_file="${LAYER_PATHS[$i]}" + if [ ! -f "$layer_file" ]; then + echo "Could not find $layer_file." + exit 1 + fi + fi + done +done + read -p "Ready to publish version $VERSION of layers ${LAYERS[*]} to regions ${REGIONS[*]} (y/n)?" CONT if [ "$CONT" != "y" ]; then echo "Exiting"