From e29d6b210f50ed4fdf48dcad2af8027b9ab0d841 Mon Sep 17 00:00:00 2001 From: Bastian Krol Date: Sun, 2 Feb 2025 22:02:26 +0100 Subject: [PATCH 1/2] test(instrumentation): convert Spring boot test apps to simple Java apps We do not actually need to start a whole framework with an HTTP server to check one environment variable and exit. Also: - disable all auto-instrumentation by the Java agent for JVM instrumentation image tests - remove Node.js 18 Bullseye base image for Node.js tests All of this should help to speed up the instrumentation image tests. --- .../instrumentation/test/jvm/.m2/.gitignore | 1 - .../test/jvm/.m2/repository/.gitkeep | 0 .../instrumentation/test/jvm/.m2/settings.xml | 4 - images/instrumentation/test/jvm/Dockerfile | 8 +- .../test/jvm/test-cases/.gitignore | 1 + .../test-cases/existing-unmodified/.gitignore | 10 - .../.mvn/wrapper/maven-wrapper.properties | 19 -- .../existing-unmodified/MANIFEST.MF | 2 + .../test-cases/existing-unmodified/Main.java | 9 + .../jvm/test-cases/existing-unmodified/mvnw | 259 ------------------ .../test-cases/existing-unmodified/pom.xml | 41 --- .../existing_envvar_demo/TestApplication.java | 28 -- .../src/main/resources/application.properties | 1 - .../TestApplicationTests.java | 15 - .../otel-resource-attributes-already-set/.env | 2 +- .../.gitignore | 10 - .../.mvn/wrapper/maven-wrapper.properties | 19 -- .../MANIFEST.MF | 2 + .../Main.java | 9 + .../otel-resource-attributes-already-set/mvnw | 259 ------------------ .../pom.xml | 41 --- .../TestApplication.java | 30 -- .../src/main/resources/application.properties | 1 - .../TestApplicationTests.java | 15 - .../undefined-for-non-existing/.env | 2 +- .../undefined-for-non-existing/.gitignore | 10 - .../.mvn/wrapper/maven-wrapper.properties | 19 -- .../undefined-for-non-existing/MANIFEST.MF | 2 + .../undefined-for-non-existing/Main.java | 9 + .../undefined-for-non-existing/mvnw | 259 ------------------ .../undefined-for-non-existing/pom.xml | 41 --- .../existing_envvar_demo/TestApplication.java | 28 -- .../TestApplicationTests.java | 13 - images/instrumentation/test/node/base-images | 1 - images/instrumentation/test/test-all.sh | 8 +- 35 files changed, 48 insertions(+), 1130 deletions(-) delete mode 100644 images/instrumentation/test/jvm/.m2/.gitignore delete mode 100644 images/instrumentation/test/jvm/.m2/repository/.gitkeep delete mode 100644 images/instrumentation/test/jvm/.m2/settings.xml create mode 100644 images/instrumentation/test/jvm/test-cases/.gitignore delete mode 100644 images/instrumentation/test/jvm/test-cases/existing-unmodified/.gitignore delete mode 100644 images/instrumentation/test/jvm/test-cases/existing-unmodified/.mvn/wrapper/maven-wrapper.properties create mode 100644 images/instrumentation/test/jvm/test-cases/existing-unmodified/MANIFEST.MF create mode 100644 images/instrumentation/test/jvm/test-cases/existing-unmodified/Main.java delete mode 100755 images/instrumentation/test/jvm/test-cases/existing-unmodified/mvnw delete mode 100644 images/instrumentation/test/jvm/test-cases/existing-unmodified/pom.xml delete mode 100644 images/instrumentation/test/jvm/test-cases/existing-unmodified/src/main/java/com/dash0/injector/existing_envvar_demo/TestApplication.java delete mode 100644 images/instrumentation/test/jvm/test-cases/existing-unmodified/src/main/resources/application.properties delete mode 100644 images/instrumentation/test/jvm/test-cases/existing-unmodified/src/test/java/com/dash0/injector/existing_envvar_demo/TestApplicationTests.java delete mode 100644 images/instrumentation/test/jvm/test-cases/otel-resource-attributes-already-set/.gitignore delete mode 100644 images/instrumentation/test/jvm/test-cases/otel-resource-attributes-already-set/.mvn/wrapper/maven-wrapper.properties create mode 100644 images/instrumentation/test/jvm/test-cases/otel-resource-attributes-already-set/MANIFEST.MF create mode 100644 images/instrumentation/test/jvm/test-cases/otel-resource-attributes-already-set/Main.java delete mode 100755 images/instrumentation/test/jvm/test-cases/otel-resource-attributes-already-set/mvnw delete mode 100644 images/instrumentation/test/jvm/test-cases/otel-resource-attributes-already-set/pom.xml delete mode 100644 images/instrumentation/test/jvm/test-cases/otel-resource-attributes-already-set/src/main/java/com/dash0/injector/otel-resource-attributes-already-set/TestApplication.java delete mode 100644 images/instrumentation/test/jvm/test-cases/otel-resource-attributes-already-set/src/main/resources/application.properties delete mode 100644 images/instrumentation/test/jvm/test-cases/otel-resource-attributes-already-set/src/test/java/com/dash0/injector/otel-resource-attributes-already-set/TestApplicationTests.java delete mode 100644 images/instrumentation/test/jvm/test-cases/undefined-for-non-existing/.gitignore delete mode 100644 images/instrumentation/test/jvm/test-cases/undefined-for-non-existing/.mvn/wrapper/maven-wrapper.properties create mode 100644 images/instrumentation/test/jvm/test-cases/undefined-for-non-existing/MANIFEST.MF create mode 100644 images/instrumentation/test/jvm/test-cases/undefined-for-non-existing/Main.java delete mode 100755 images/instrumentation/test/jvm/test-cases/undefined-for-non-existing/mvnw delete mode 100644 images/instrumentation/test/jvm/test-cases/undefined-for-non-existing/pom.xml delete mode 100644 images/instrumentation/test/jvm/test-cases/undefined-for-non-existing/src/main/java/com/dash0/injector/existing_envvar_demo/TestApplication.java delete mode 100644 images/instrumentation/test/jvm/test-cases/undefined-for-non-existing/src/test/java/com/dash0/injector/existing_envvar_demo/TestApplicationTests.java diff --git a/images/instrumentation/test/jvm/.m2/.gitignore b/images/instrumentation/test/jvm/.m2/.gitignore deleted file mode 100644 index a8fa6605..00000000 --- a/images/instrumentation/test/jvm/.m2/.gitignore +++ /dev/null @@ -1 +0,0 @@ -repository/* \ No newline at end of file diff --git a/images/instrumentation/test/jvm/.m2/repository/.gitkeep b/images/instrumentation/test/jvm/.m2/repository/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/images/instrumentation/test/jvm/.m2/settings.xml b/images/instrumentation/test/jvm/.m2/settings.xml deleted file mode 100644 index 69994132..00000000 --- a/images/instrumentation/test/jvm/.m2/settings.xml +++ /dev/null @@ -1,4 +0,0 @@ - - /.m2/repository - \ No newline at end of file diff --git a/images/instrumentation/test/jvm/Dockerfile b/images/instrumentation/test/jvm/Dockerfile index d09df582..fd1aed2a 100644 --- a/images/instrumentation/test/jvm/Dockerfile +++ b/images/instrumentation/test/jvm/Dockerfile @@ -9,9 +9,13 @@ FROM ${instrumentation_image} AS init FROM ${test_image} COPY test-cases /test-cases -COPY .m2 /.m2 -RUN for test in /test-cases/*; do (cd "/${test}" && JAVA_HOME=$(which java | xargs dirname | xargs dirname) "./mvnw" "-gs" "/.m2/settings.xml" package); done +RUN export JAVA_HOME=$(which java | xargs dirname | xargs dirname) +RUN for test in /test-cases/*; do \ + cd "/${test}" && \ + javac Main.java && \ + jar -cfm app.jar MANIFEST.MF *.class \ +; done # The following lines emulate the behavior of running the instrumentation image as a Kubernetes init container and # setting the LD_PRELOAD environment variable via the operator. diff --git a/images/instrumentation/test/jvm/test-cases/.gitignore b/images/instrumentation/test/jvm/test-cases/.gitignore new file mode 100644 index 00000000..6b468b62 --- /dev/null +++ b/images/instrumentation/test/jvm/test-cases/.gitignore @@ -0,0 +1 @@ +*.class diff --git a/images/instrumentation/test/jvm/test-cases/existing-unmodified/.gitignore b/images/instrumentation/test/jvm/test-cases/existing-unmodified/.gitignore deleted file mode 100644 index 9c01d043..00000000 --- a/images/instrumentation/test/jvm/test-cases/existing-unmodified/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -target/ -pom.xml.tag -pom.xml.releaseBackup -pom.xml.versionsBackup -pom.xml.next -release.properties -dependency-reduced-pom.xml -buildNumber.properties -.mvn/timing.properties -.mvn/wrapper/maven-wrapper.jar \ No newline at end of file diff --git a/images/instrumentation/test/jvm/test-cases/existing-unmodified/.mvn/wrapper/maven-wrapper.properties b/images/instrumentation/test/jvm/test-cases/existing-unmodified/.mvn/wrapper/maven-wrapper.properties deleted file mode 100644 index d58dfb70..00000000 --- a/images/instrumentation/test/jvm/test-cases/existing-unmodified/.mvn/wrapper/maven-wrapper.properties +++ /dev/null @@ -1,19 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -wrapperVersion=3.3.2 -distributionType=only-script -distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.9/apache-maven-3.9.9-bin.zip diff --git a/images/instrumentation/test/jvm/test-cases/existing-unmodified/MANIFEST.MF b/images/instrumentation/test/jvm/test-cases/existing-unmodified/MANIFEST.MF new file mode 100644 index 00000000..4f3348f9 --- /dev/null +++ b/images/instrumentation/test/jvm/test-cases/existing-unmodified/MANIFEST.MF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 +Main-Class: Main diff --git a/images/instrumentation/test/jvm/test-cases/existing-unmodified/Main.java b/images/instrumentation/test/jvm/test-cases/existing-unmodified/Main.java new file mode 100644 index 00000000..cc6bad11 --- /dev/null +++ b/images/instrumentation/test/jvm/test-cases/existing-unmodified/Main.java @@ -0,0 +1,9 @@ +public class Main { + + public static void main(String[] args) { + String value = System.getenv("AN_ENVIRONMENT_VARIABLE"); + if (!"value".equals(value)) { + throw new RuntimeException(String.format("Unexpected value for the 'AN_ENVIRONMENT_VARIABLE' env var: %s", value)); + } + } +} diff --git a/images/instrumentation/test/jvm/test-cases/existing-unmodified/mvnw b/images/instrumentation/test/jvm/test-cases/existing-unmodified/mvnw deleted file mode 100755 index 19529ddf..00000000 --- a/images/instrumentation/test/jvm/test-cases/existing-unmodified/mvnw +++ /dev/null @@ -1,259 +0,0 @@ -#!/bin/sh -# ---------------------------------------------------------------------------- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# ---------------------------------------------------------------------------- - -# ---------------------------------------------------------------------------- -# Apache Maven Wrapper startup batch script, version 3.3.2 -# -# Optional ENV vars -# ----------------- -# JAVA_HOME - location of a JDK home dir, required when download maven via java source -# MVNW_REPOURL - repo url base for downloading maven distribution -# MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven -# MVNW_VERBOSE - true: enable verbose log; debug: trace the mvnw script; others: silence the output -# ---------------------------------------------------------------------------- - -set -euf -[ "${MVNW_VERBOSE-}" != debug ] || set -x - -# OS specific support. -native_path() { printf %s\\n "$1"; } -case "$(uname)" in -CYGWIN* | MINGW*) - [ -z "${JAVA_HOME-}" ] || JAVA_HOME="$(cygpath --unix "$JAVA_HOME")" - native_path() { cygpath --path --windows "$1"; } - ;; -esac - -# set JAVACMD and JAVACCMD -set_java_home() { - # For Cygwin and MinGW, ensure paths are in Unix format before anything is touched - if [ -n "${JAVA_HOME-}" ]; then - if [ -x "$JAVA_HOME/jre/sh/java" ]; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - JAVACCMD="$JAVA_HOME/jre/sh/javac" - else - JAVACMD="$JAVA_HOME/bin/java" - JAVACCMD="$JAVA_HOME/bin/javac" - - if [ ! -x "$JAVACMD" ] || [ ! -x "$JAVACCMD" ]; then - echo "The JAVA_HOME environment variable is not defined correctly, so mvnw cannot run." >&2 - echo "JAVA_HOME is set to \"$JAVA_HOME\", but \"\$JAVA_HOME/bin/java\" or \"\$JAVA_HOME/bin/javac\" does not exist." >&2 - return 1 - fi - fi - else - JAVACMD="$( - 'set' +e - 'unset' -f command 2>/dev/null - 'command' -v java - )" || : - JAVACCMD="$( - 'set' +e - 'unset' -f command 2>/dev/null - 'command' -v javac - )" || : - - if [ ! -x "${JAVACMD-}" ] || [ ! -x "${JAVACCMD-}" ]; then - echo "The java/javac command does not exist in PATH nor is JAVA_HOME set, so mvnw cannot run." >&2 - return 1 - fi - fi -} - -# hash string like Java String::hashCode -hash_string() { - str="${1:-}" h=0 - while [ -n "$str" ]; do - char="${str%"${str#?}"}" - h=$(((h * 31 + $(LC_CTYPE=C printf %d "'$char")) % 4294967296)) - str="${str#?}" - done - printf %x\\n $h -} - -verbose() { :; } -[ "${MVNW_VERBOSE-}" != true ] || verbose() { printf %s\\n "${1-}"; } - -die() { - printf %s\\n "$1" >&2 - exit 1 -} - -trim() { - # MWRAPPER-139: - # Trims trailing and leading whitespace, carriage returns, tabs, and linefeeds. - # Needed for removing poorly interpreted newline sequences when running in more - # exotic environments such as mingw bash on Windows. - printf "%s" "${1}" | tr -d '[:space:]' -} - -# parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties -while IFS="=" read -r key value; do - case "${key-}" in - distributionUrl) distributionUrl=$(trim "${value-}") ;; - distributionSha256Sum) distributionSha256Sum=$(trim "${value-}") ;; - esac -done <"${0%/*}/.mvn/wrapper/maven-wrapper.properties" -[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in ${0%/*}/.mvn/wrapper/maven-wrapper.properties" - -case "${distributionUrl##*/}" in -maven-mvnd-*bin.*) - MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ - case "${PROCESSOR_ARCHITECTURE-}${PROCESSOR_ARCHITEW6432-}:$(uname -a)" in - *AMD64:CYGWIN* | *AMD64:MINGW*) distributionPlatform=windows-amd64 ;; - :Darwin*x86_64) distributionPlatform=darwin-amd64 ;; - :Darwin*arm64) distributionPlatform=darwin-aarch64 ;; - :Linux*x86_64*) distributionPlatform=linux-amd64 ;; - *) - echo "Cannot detect native platform for mvnd on $(uname)-$(uname -m), use pure java version" >&2 - distributionPlatform=linux-amd64 - ;; - esac - distributionUrl="${distributionUrl%-bin.*}-$distributionPlatform.zip" - ;; -maven-mvnd-*) MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ ;; -*) MVN_CMD="mvn${0##*/mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;; -esac - -# apply MVNW_REPOURL and calculate MAVEN_HOME -# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ -[ -z "${MVNW_REPOURL-}" ] || distributionUrl="$MVNW_REPOURL$_MVNW_REPO_PATTERN${distributionUrl#*"$_MVNW_REPO_PATTERN"}" -distributionUrlName="${distributionUrl##*/}" -distributionUrlNameMain="${distributionUrlName%.*}" -distributionUrlNameMain="${distributionUrlNameMain%-bin}" -MAVEN_USER_HOME="${MAVEN_USER_HOME:-${HOME}/.m2}" -MAVEN_HOME="${MAVEN_USER_HOME}/wrapper/dists/${distributionUrlNameMain-}/$(hash_string "$distributionUrl")" - -exec_maven() { - unset MVNW_VERBOSE MVNW_USERNAME MVNW_PASSWORD MVNW_REPOURL || : - exec "$MAVEN_HOME/bin/$MVN_CMD" "$@" || die "cannot exec $MAVEN_HOME/bin/$MVN_CMD" -} - -if [ -d "$MAVEN_HOME" ]; then - verbose "found existing MAVEN_HOME at $MAVEN_HOME" - exec_maven "$@" -fi - -case "${distributionUrl-}" in -*?-bin.zip | *?maven-mvnd-?*-?*.zip) ;; -*) die "distributionUrl is not valid, must match *-bin.zip or maven-mvnd-*.zip, but found '${distributionUrl-}'" ;; -esac - -# prepare tmp dir -if TMP_DOWNLOAD_DIR="$(mktemp -d)" && [ -d "$TMP_DOWNLOAD_DIR" ]; then - clean() { rm -rf -- "$TMP_DOWNLOAD_DIR"; } - trap clean HUP INT TERM EXIT -else - die "cannot create temp dir" -fi - -mkdir -p -- "${MAVEN_HOME%/*}" - -# Download and Install Apache Maven -verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." -verbose "Downloading from: $distributionUrl" -verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" - -# select .zip or .tar.gz -if ! command -v unzip >/dev/null; then - distributionUrl="${distributionUrl%.zip}.tar.gz" - distributionUrlName="${distributionUrl##*/}" -fi - -# verbose opt -__MVNW_QUIET_WGET=--quiet __MVNW_QUIET_CURL=--silent __MVNW_QUIET_UNZIP=-q __MVNW_QUIET_TAR='' -[ "${MVNW_VERBOSE-}" != true ] || __MVNW_QUIET_WGET='' __MVNW_QUIET_CURL='' __MVNW_QUIET_UNZIP='' __MVNW_QUIET_TAR=v - -# normalize http auth -case "${MVNW_PASSWORD:+has-password}" in -'') MVNW_USERNAME='' MVNW_PASSWORD='' ;; -has-password) [ -n "${MVNW_USERNAME-}" ] || MVNW_USERNAME='' MVNW_PASSWORD='' ;; -esac - -if [ -z "${MVNW_USERNAME-}" ] && command -v wget >/dev/null; then - verbose "Found wget ... using wget" - wget ${__MVNW_QUIET_WGET:+"$__MVNW_QUIET_WGET"} "$distributionUrl" -O "$TMP_DOWNLOAD_DIR/$distributionUrlName" || die "wget: Failed to fetch $distributionUrl" -elif [ -z "${MVNW_USERNAME-}" ] && command -v curl >/dev/null; then - verbose "Found curl ... using curl" - curl ${__MVNW_QUIET_CURL:+"$__MVNW_QUIET_CURL"} -f -L -o "$TMP_DOWNLOAD_DIR/$distributionUrlName" "$distributionUrl" || die "curl: Failed to fetch $distributionUrl" -elif set_java_home; then - verbose "Falling back to use Java to download" - javaSource="$TMP_DOWNLOAD_DIR/Downloader.java" - targetZip="$TMP_DOWNLOAD_DIR/$distributionUrlName" - cat >"$javaSource" <<-END - public class Downloader extends java.net.Authenticator - { - protected java.net.PasswordAuthentication getPasswordAuthentication() - { - return new java.net.PasswordAuthentication( System.getenv( "MVNW_USERNAME" ), System.getenv( "MVNW_PASSWORD" ).toCharArray() ); - } - public static void main( String[] args ) throws Exception - { - setDefault( new Downloader() ); - java.nio.file.Files.copy( java.net.URI.create( args[0] ).toURL().openStream(), java.nio.file.Paths.get( args[1] ).toAbsolutePath().normalize() ); - } - } - END - # For Cygwin/MinGW, switch paths to Windows format before running javac and java - verbose " - Compiling Downloader.java ..." - "$(native_path "$JAVACCMD")" "$(native_path "$javaSource")" || die "Failed to compile Downloader.java" - verbose " - Running Downloader.java ..." - "$(native_path "$JAVACMD")" -cp "$(native_path "$TMP_DOWNLOAD_DIR")" Downloader "$distributionUrl" "$(native_path "$targetZip")" -fi - -# If specified, validate the SHA-256 sum of the Maven distribution zip file -if [ -n "${distributionSha256Sum-}" ]; then - distributionSha256Result=false - if [ "$MVN_CMD" = mvnd.sh ]; then - echo "Checksum validation is not supported for maven-mvnd." >&2 - echo "Please disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 - exit 1 - elif command -v sha256sum >/dev/null; then - if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c >/dev/null 2>&1; then - distributionSha256Result=true - fi - elif command -v shasum >/dev/null; then - if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | shasum -a 256 -c >/dev/null 2>&1; then - distributionSha256Result=true - fi - else - echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2 - echo "Please install either command, or disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 - exit 1 - fi - if [ $distributionSha256Result = false ]; then - echo "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised." >&2 - echo "If you updated your Maven version, you need to update the specified distributionSha256Sum property." >&2 - exit 1 - fi -fi - -# unzip and move -if command -v unzip >/dev/null; then - unzip ${__MVNW_QUIET_UNZIP:+"$__MVNW_QUIET_UNZIP"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -d "$TMP_DOWNLOAD_DIR" || die "failed to unzip" -else - tar xzf${__MVNW_QUIET_TAR:+"$__MVNW_QUIET_TAR"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -C "$TMP_DOWNLOAD_DIR" || die "failed to untar" -fi -printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/mvnw.url" -mv -- "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME" - -clean || : -exec_maven "$@" diff --git a/images/instrumentation/test/jvm/test-cases/existing-unmodified/pom.xml b/images/instrumentation/test/jvm/test-cases/existing-unmodified/pom.xml deleted file mode 100644 index b0621897..00000000 --- a/images/instrumentation/test/jvm/test-cases/existing-unmodified/pom.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starter-parent - 3.4.1 - - - com.dash0.injector - existing-unmodified-envvar-demo - 0.0.1-SNAPSHOT - existing-unmodified-envvar-demo - Test App for Dash0 injector - - 17 - - - - org.springframework.boot - spring-boot-starter - - - - org.springframework.boot - spring-boot-starter-test - test - - - - app - - - org.springframework.boot - spring-boot-maven-plugin - - - - - diff --git a/images/instrumentation/test/jvm/test-cases/existing-unmodified/src/main/java/com/dash0/injector/existing_envvar_demo/TestApplication.java b/images/instrumentation/test/jvm/test-cases/existing-unmodified/src/main/java/com/dash0/injector/existing_envvar_demo/TestApplication.java deleted file mode 100644 index 9efe5fed..00000000 --- a/images/instrumentation/test/jvm/test-cases/existing-unmodified/src/main/java/com/dash0/injector/existing_envvar_demo/TestApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.dash0.injector.existing_envvar_demo; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.context.event.ApplicationReadyEvent; -import org.springframework.context.event.EventListener; -import org.springframework.core.env.Environment; - -@SpringBootApplication -public class TestApplication { - - @Autowired - private Environment environment; - - @EventListener(ApplicationReadyEvent.class) - public void checkEnvVar() { - final String value = environment.getProperty("AN_ENVIRONMENT_VARIABLE"); - if (!"value".equals(value)) { - throw new RuntimeException(String.format("Unexpected value for the 'AN_ENVIRONMENT_VARIABLE' env var: %s", value)); - } - } - - public static void main(String[] args) { - SpringApplication.run(TestApplication.class, args); - } - -} diff --git a/images/instrumentation/test/jvm/test-cases/existing-unmodified/src/main/resources/application.properties b/images/instrumentation/test/jvm/test-cases/existing-unmodified/src/main/resources/application.properties deleted file mode 100644 index 3898fd08..00000000 --- a/images/instrumentation/test/jvm/test-cases/existing-unmodified/src/main/resources/application.properties +++ /dev/null @@ -1 +0,0 @@ -spring.application.name=existing-envvar-demo diff --git a/images/instrumentation/test/jvm/test-cases/existing-unmodified/src/test/java/com/dash0/injector/existing_envvar_demo/TestApplicationTests.java b/images/instrumentation/test/jvm/test-cases/existing-unmodified/src/test/java/com/dash0/injector/existing_envvar_demo/TestApplicationTests.java deleted file mode 100644 index bd889c10..00000000 --- a/images/instrumentation/test/jvm/test-cases/existing-unmodified/src/test/java/com/dash0/injector/existing_envvar_demo/TestApplicationTests.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.dash0.injector.existing_envvar_demo; - -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.TestPropertySource; - -@SpringBootTest -@TestPropertySource(properties={"AN_ENVIRONMENT_VARIABLE=value"}) -class TestApplicationTests { - - @Test - void contextLoadSucceeds() { - } - -} diff --git a/images/instrumentation/test/jvm/test-cases/otel-resource-attributes-already-set/.env b/images/instrumentation/test/jvm/test-cases/otel-resource-attributes-already-set/.env index 0a9b1564..5c82fcb5 100644 --- a/images/instrumentation/test/jvm/test-cases/otel-resource-attributes-already-set/.env +++ b/images/instrumentation/test/jvm/test-cases/otel-resource-attributes-already-set/.env @@ -5,4 +5,4 @@ DASH0_CONTAINER_NAME=container_name OTEL_LOGS_EXPORTER=none OTEL_METRICS_EXPORTER=none OTEL_TRACES_EXPORTER=none -OTEL_RESOURCE_ATTRIBUTES=key1=value1,key2=value2 \ No newline at end of file +OTEL_RESOURCE_ATTRIBUTES=key1=value1,key2=value2 diff --git a/images/instrumentation/test/jvm/test-cases/otel-resource-attributes-already-set/.gitignore b/images/instrumentation/test/jvm/test-cases/otel-resource-attributes-already-set/.gitignore deleted file mode 100644 index 9c01d043..00000000 --- a/images/instrumentation/test/jvm/test-cases/otel-resource-attributes-already-set/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -target/ -pom.xml.tag -pom.xml.releaseBackup -pom.xml.versionsBackup -pom.xml.next -release.properties -dependency-reduced-pom.xml -buildNumber.properties -.mvn/timing.properties -.mvn/wrapper/maven-wrapper.jar \ No newline at end of file diff --git a/images/instrumentation/test/jvm/test-cases/otel-resource-attributes-already-set/.mvn/wrapper/maven-wrapper.properties b/images/instrumentation/test/jvm/test-cases/otel-resource-attributes-already-set/.mvn/wrapper/maven-wrapper.properties deleted file mode 100644 index d58dfb70..00000000 --- a/images/instrumentation/test/jvm/test-cases/otel-resource-attributes-already-set/.mvn/wrapper/maven-wrapper.properties +++ /dev/null @@ -1,19 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -wrapperVersion=3.3.2 -distributionType=only-script -distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.9/apache-maven-3.9.9-bin.zip diff --git a/images/instrumentation/test/jvm/test-cases/otel-resource-attributes-already-set/MANIFEST.MF b/images/instrumentation/test/jvm/test-cases/otel-resource-attributes-already-set/MANIFEST.MF new file mode 100644 index 00000000..4f3348f9 --- /dev/null +++ b/images/instrumentation/test/jvm/test-cases/otel-resource-attributes-already-set/MANIFEST.MF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 +Main-Class: Main diff --git a/images/instrumentation/test/jvm/test-cases/otel-resource-attributes-already-set/Main.java b/images/instrumentation/test/jvm/test-cases/otel-resource-attributes-already-set/Main.java new file mode 100644 index 00000000..87888a9a --- /dev/null +++ b/images/instrumentation/test/jvm/test-cases/otel-resource-attributes-already-set/Main.java @@ -0,0 +1,9 @@ +public class Main { + + public static void main(String[] args) { + String value = System.getenv("OTEL_RESOURCE_ATTRIBUTES"); + if (!value.contains("key1=value1,key2=value2")) { + throw new RuntimeException(String.format("Unexpected value for the 'OTEL_RESOURCE_ATTRIBUTES' env var: %s", value)); + } + } +} diff --git a/images/instrumentation/test/jvm/test-cases/otel-resource-attributes-already-set/mvnw b/images/instrumentation/test/jvm/test-cases/otel-resource-attributes-already-set/mvnw deleted file mode 100755 index 19529ddf..00000000 --- a/images/instrumentation/test/jvm/test-cases/otel-resource-attributes-already-set/mvnw +++ /dev/null @@ -1,259 +0,0 @@ -#!/bin/sh -# ---------------------------------------------------------------------------- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# ---------------------------------------------------------------------------- - -# ---------------------------------------------------------------------------- -# Apache Maven Wrapper startup batch script, version 3.3.2 -# -# Optional ENV vars -# ----------------- -# JAVA_HOME - location of a JDK home dir, required when download maven via java source -# MVNW_REPOURL - repo url base for downloading maven distribution -# MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven -# MVNW_VERBOSE - true: enable verbose log; debug: trace the mvnw script; others: silence the output -# ---------------------------------------------------------------------------- - -set -euf -[ "${MVNW_VERBOSE-}" != debug ] || set -x - -# OS specific support. -native_path() { printf %s\\n "$1"; } -case "$(uname)" in -CYGWIN* | MINGW*) - [ -z "${JAVA_HOME-}" ] || JAVA_HOME="$(cygpath --unix "$JAVA_HOME")" - native_path() { cygpath --path --windows "$1"; } - ;; -esac - -# set JAVACMD and JAVACCMD -set_java_home() { - # For Cygwin and MinGW, ensure paths are in Unix format before anything is touched - if [ -n "${JAVA_HOME-}" ]; then - if [ -x "$JAVA_HOME/jre/sh/java" ]; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - JAVACCMD="$JAVA_HOME/jre/sh/javac" - else - JAVACMD="$JAVA_HOME/bin/java" - JAVACCMD="$JAVA_HOME/bin/javac" - - if [ ! -x "$JAVACMD" ] || [ ! -x "$JAVACCMD" ]; then - echo "The JAVA_HOME environment variable is not defined correctly, so mvnw cannot run." >&2 - echo "JAVA_HOME is set to \"$JAVA_HOME\", but \"\$JAVA_HOME/bin/java\" or \"\$JAVA_HOME/bin/javac\" does not exist." >&2 - return 1 - fi - fi - else - JAVACMD="$( - 'set' +e - 'unset' -f command 2>/dev/null - 'command' -v java - )" || : - JAVACCMD="$( - 'set' +e - 'unset' -f command 2>/dev/null - 'command' -v javac - )" || : - - if [ ! -x "${JAVACMD-}" ] || [ ! -x "${JAVACCMD-}" ]; then - echo "The java/javac command does not exist in PATH nor is JAVA_HOME set, so mvnw cannot run." >&2 - return 1 - fi - fi -} - -# hash string like Java String::hashCode -hash_string() { - str="${1:-}" h=0 - while [ -n "$str" ]; do - char="${str%"${str#?}"}" - h=$(((h * 31 + $(LC_CTYPE=C printf %d "'$char")) % 4294967296)) - str="${str#?}" - done - printf %x\\n $h -} - -verbose() { :; } -[ "${MVNW_VERBOSE-}" != true ] || verbose() { printf %s\\n "${1-}"; } - -die() { - printf %s\\n "$1" >&2 - exit 1 -} - -trim() { - # MWRAPPER-139: - # Trims trailing and leading whitespace, carriage returns, tabs, and linefeeds. - # Needed for removing poorly interpreted newline sequences when running in more - # exotic environments such as mingw bash on Windows. - printf "%s" "${1}" | tr -d '[:space:]' -} - -# parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties -while IFS="=" read -r key value; do - case "${key-}" in - distributionUrl) distributionUrl=$(trim "${value-}") ;; - distributionSha256Sum) distributionSha256Sum=$(trim "${value-}") ;; - esac -done <"${0%/*}/.mvn/wrapper/maven-wrapper.properties" -[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in ${0%/*}/.mvn/wrapper/maven-wrapper.properties" - -case "${distributionUrl##*/}" in -maven-mvnd-*bin.*) - MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ - case "${PROCESSOR_ARCHITECTURE-}${PROCESSOR_ARCHITEW6432-}:$(uname -a)" in - *AMD64:CYGWIN* | *AMD64:MINGW*) distributionPlatform=windows-amd64 ;; - :Darwin*x86_64) distributionPlatform=darwin-amd64 ;; - :Darwin*arm64) distributionPlatform=darwin-aarch64 ;; - :Linux*x86_64*) distributionPlatform=linux-amd64 ;; - *) - echo "Cannot detect native platform for mvnd on $(uname)-$(uname -m), use pure java version" >&2 - distributionPlatform=linux-amd64 - ;; - esac - distributionUrl="${distributionUrl%-bin.*}-$distributionPlatform.zip" - ;; -maven-mvnd-*) MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ ;; -*) MVN_CMD="mvn${0##*/mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;; -esac - -# apply MVNW_REPOURL and calculate MAVEN_HOME -# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ -[ -z "${MVNW_REPOURL-}" ] || distributionUrl="$MVNW_REPOURL$_MVNW_REPO_PATTERN${distributionUrl#*"$_MVNW_REPO_PATTERN"}" -distributionUrlName="${distributionUrl##*/}" -distributionUrlNameMain="${distributionUrlName%.*}" -distributionUrlNameMain="${distributionUrlNameMain%-bin}" -MAVEN_USER_HOME="${MAVEN_USER_HOME:-${HOME}/.m2}" -MAVEN_HOME="${MAVEN_USER_HOME}/wrapper/dists/${distributionUrlNameMain-}/$(hash_string "$distributionUrl")" - -exec_maven() { - unset MVNW_VERBOSE MVNW_USERNAME MVNW_PASSWORD MVNW_REPOURL || : - exec "$MAVEN_HOME/bin/$MVN_CMD" "$@" || die "cannot exec $MAVEN_HOME/bin/$MVN_CMD" -} - -if [ -d "$MAVEN_HOME" ]; then - verbose "found existing MAVEN_HOME at $MAVEN_HOME" - exec_maven "$@" -fi - -case "${distributionUrl-}" in -*?-bin.zip | *?maven-mvnd-?*-?*.zip) ;; -*) die "distributionUrl is not valid, must match *-bin.zip or maven-mvnd-*.zip, but found '${distributionUrl-}'" ;; -esac - -# prepare tmp dir -if TMP_DOWNLOAD_DIR="$(mktemp -d)" && [ -d "$TMP_DOWNLOAD_DIR" ]; then - clean() { rm -rf -- "$TMP_DOWNLOAD_DIR"; } - trap clean HUP INT TERM EXIT -else - die "cannot create temp dir" -fi - -mkdir -p -- "${MAVEN_HOME%/*}" - -# Download and Install Apache Maven -verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." -verbose "Downloading from: $distributionUrl" -verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" - -# select .zip or .tar.gz -if ! command -v unzip >/dev/null; then - distributionUrl="${distributionUrl%.zip}.tar.gz" - distributionUrlName="${distributionUrl##*/}" -fi - -# verbose opt -__MVNW_QUIET_WGET=--quiet __MVNW_QUIET_CURL=--silent __MVNW_QUIET_UNZIP=-q __MVNW_QUIET_TAR='' -[ "${MVNW_VERBOSE-}" != true ] || __MVNW_QUIET_WGET='' __MVNW_QUIET_CURL='' __MVNW_QUIET_UNZIP='' __MVNW_QUIET_TAR=v - -# normalize http auth -case "${MVNW_PASSWORD:+has-password}" in -'') MVNW_USERNAME='' MVNW_PASSWORD='' ;; -has-password) [ -n "${MVNW_USERNAME-}" ] || MVNW_USERNAME='' MVNW_PASSWORD='' ;; -esac - -if [ -z "${MVNW_USERNAME-}" ] && command -v wget >/dev/null; then - verbose "Found wget ... using wget" - wget ${__MVNW_QUIET_WGET:+"$__MVNW_QUIET_WGET"} "$distributionUrl" -O "$TMP_DOWNLOAD_DIR/$distributionUrlName" || die "wget: Failed to fetch $distributionUrl" -elif [ -z "${MVNW_USERNAME-}" ] && command -v curl >/dev/null; then - verbose "Found curl ... using curl" - curl ${__MVNW_QUIET_CURL:+"$__MVNW_QUIET_CURL"} -f -L -o "$TMP_DOWNLOAD_DIR/$distributionUrlName" "$distributionUrl" || die "curl: Failed to fetch $distributionUrl" -elif set_java_home; then - verbose "Falling back to use Java to download" - javaSource="$TMP_DOWNLOAD_DIR/Downloader.java" - targetZip="$TMP_DOWNLOAD_DIR/$distributionUrlName" - cat >"$javaSource" <<-END - public class Downloader extends java.net.Authenticator - { - protected java.net.PasswordAuthentication getPasswordAuthentication() - { - return new java.net.PasswordAuthentication( System.getenv( "MVNW_USERNAME" ), System.getenv( "MVNW_PASSWORD" ).toCharArray() ); - } - public static void main( String[] args ) throws Exception - { - setDefault( new Downloader() ); - java.nio.file.Files.copy( java.net.URI.create( args[0] ).toURL().openStream(), java.nio.file.Paths.get( args[1] ).toAbsolutePath().normalize() ); - } - } - END - # For Cygwin/MinGW, switch paths to Windows format before running javac and java - verbose " - Compiling Downloader.java ..." - "$(native_path "$JAVACCMD")" "$(native_path "$javaSource")" || die "Failed to compile Downloader.java" - verbose " - Running Downloader.java ..." - "$(native_path "$JAVACMD")" -cp "$(native_path "$TMP_DOWNLOAD_DIR")" Downloader "$distributionUrl" "$(native_path "$targetZip")" -fi - -# If specified, validate the SHA-256 sum of the Maven distribution zip file -if [ -n "${distributionSha256Sum-}" ]; then - distributionSha256Result=false - if [ "$MVN_CMD" = mvnd.sh ]; then - echo "Checksum validation is not supported for maven-mvnd." >&2 - echo "Please disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 - exit 1 - elif command -v sha256sum >/dev/null; then - if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c >/dev/null 2>&1; then - distributionSha256Result=true - fi - elif command -v shasum >/dev/null; then - if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | shasum -a 256 -c >/dev/null 2>&1; then - distributionSha256Result=true - fi - else - echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2 - echo "Please install either command, or disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 - exit 1 - fi - if [ $distributionSha256Result = false ]; then - echo "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised." >&2 - echo "If you updated your Maven version, you need to update the specified distributionSha256Sum property." >&2 - exit 1 - fi -fi - -# unzip and move -if command -v unzip >/dev/null; then - unzip ${__MVNW_QUIET_UNZIP:+"$__MVNW_QUIET_UNZIP"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -d "$TMP_DOWNLOAD_DIR" || die "failed to unzip" -else - tar xzf${__MVNW_QUIET_TAR:+"$__MVNW_QUIET_TAR"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -C "$TMP_DOWNLOAD_DIR" || die "failed to untar" -fi -printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/mvnw.url" -mv -- "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME" - -clean || : -exec_maven "$@" diff --git a/images/instrumentation/test/jvm/test-cases/otel-resource-attributes-already-set/pom.xml b/images/instrumentation/test/jvm/test-cases/otel-resource-attributes-already-set/pom.xml deleted file mode 100644 index 93f66684..00000000 --- a/images/instrumentation/test/jvm/test-cases/otel-resource-attributes-already-set/pom.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starter-parent - 3.4.1 - - - com.dash0.injector - otel-resource-attributes-already-set-demo - 0.0.1-SNAPSHOT - otel-resource-attributes-already-set-demo - Test App for Dash0 injector - - 17 - - - - org.springframework.boot - spring-boot-starter - - - - org.springframework.boot - spring-boot-starter-test - test - - - - app - - - org.springframework.boot - spring-boot-maven-plugin - - - - - diff --git a/images/instrumentation/test/jvm/test-cases/otel-resource-attributes-already-set/src/main/java/com/dash0/injector/otel-resource-attributes-already-set/TestApplication.java b/images/instrumentation/test/jvm/test-cases/otel-resource-attributes-already-set/src/main/java/com/dash0/injector/otel-resource-attributes-already-set/TestApplication.java deleted file mode 100644 index 91b771e7..00000000 --- a/images/instrumentation/test/jvm/test-cases/otel-resource-attributes-already-set/src/main/java/com/dash0/injector/otel-resource-attributes-already-set/TestApplication.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.dash0.injector.existing_envvar_demo; - -import java.util.Optional; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.context.event.ApplicationReadyEvent; -import org.springframework.context.event.EventListener; -import org.springframework.core.env.Environment; - -@SpringBootApplication -public class TestApplication { - - @Autowired - private Environment environment; - - @EventListener(ApplicationReadyEvent.class) - public void checkEnvVar() { - final String value = environment.getProperty("OTEL_RESOURCE_ATTRIBUTES"); - if (!Optional.of(value).orElse("").contains("key1=value1,key2=value2")) { - throw new RuntimeException(String.format("Unexpected value for the 'OTEL_RESOURCE_ATTRIBUTES' env var: %s", value)); - } - } - - public static void main(String[] args) { - SpringApplication.run(TestApplication.class, args); - } - -} diff --git a/images/instrumentation/test/jvm/test-cases/otel-resource-attributes-already-set/src/main/resources/application.properties b/images/instrumentation/test/jvm/test-cases/otel-resource-attributes-already-set/src/main/resources/application.properties deleted file mode 100644 index 86357c48..00000000 --- a/images/instrumentation/test/jvm/test-cases/otel-resource-attributes-already-set/src/main/resources/application.properties +++ /dev/null @@ -1 +0,0 @@ -spring.application.name=otel-resource-attributes-already-set-demo diff --git a/images/instrumentation/test/jvm/test-cases/otel-resource-attributes-already-set/src/test/java/com/dash0/injector/otel-resource-attributes-already-set/TestApplicationTests.java b/images/instrumentation/test/jvm/test-cases/otel-resource-attributes-already-set/src/test/java/com/dash0/injector/otel-resource-attributes-already-set/TestApplicationTests.java deleted file mode 100644 index 25b6426c..00000000 --- a/images/instrumentation/test/jvm/test-cases/otel-resource-attributes-already-set/src/test/java/com/dash0/injector/otel-resource-attributes-already-set/TestApplicationTests.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.dash0.injector.existing_envvar_demo; - -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.TestPropertySource; - -@SpringBootTest -@TestPropertySource(properties={"OTEL_RESOURCE_ATTRIBUTES=k8s.namespace.name=namespace,k8s.pod.name=pod_name,k8s.pod.uid=pod_uid,k8s.container.name=container_name,key1=value1,key2=value2"}) -class TestApplicationTests { - - @Test - void contextLoadSucceeds() { - } - -} diff --git a/images/instrumentation/test/jvm/test-cases/undefined-for-non-existing/.env b/images/instrumentation/test/jvm/test-cases/undefined-for-non-existing/.env index acb01468..07fb26eb 100644 --- a/images/instrumentation/test/jvm/test-cases/undefined-for-non-existing/.env +++ b/images/instrumentation/test/jvm/test-cases/undefined-for-non-existing/.env @@ -4,4 +4,4 @@ DASH0_POD_NAME=pod_name DASH0_CONTAINER_NAME=container_name OTEL_LOGS_EXPORTER=none OTEL_METRICS_EXPORTER=none -OTEL_TRACES_EXPORTER=none \ No newline at end of file +OTEL_TRACES_EXPORTER=none diff --git a/images/instrumentation/test/jvm/test-cases/undefined-for-non-existing/.gitignore b/images/instrumentation/test/jvm/test-cases/undefined-for-non-existing/.gitignore deleted file mode 100644 index 9c01d043..00000000 --- a/images/instrumentation/test/jvm/test-cases/undefined-for-non-existing/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -target/ -pom.xml.tag -pom.xml.releaseBackup -pom.xml.versionsBackup -pom.xml.next -release.properties -dependency-reduced-pom.xml -buildNumber.properties -.mvn/timing.properties -.mvn/wrapper/maven-wrapper.jar \ No newline at end of file diff --git a/images/instrumentation/test/jvm/test-cases/undefined-for-non-existing/.mvn/wrapper/maven-wrapper.properties b/images/instrumentation/test/jvm/test-cases/undefined-for-non-existing/.mvn/wrapper/maven-wrapper.properties deleted file mode 100644 index d58dfb70..00000000 --- a/images/instrumentation/test/jvm/test-cases/undefined-for-non-existing/.mvn/wrapper/maven-wrapper.properties +++ /dev/null @@ -1,19 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -wrapperVersion=3.3.2 -distributionType=only-script -distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.9/apache-maven-3.9.9-bin.zip diff --git a/images/instrumentation/test/jvm/test-cases/undefined-for-non-existing/MANIFEST.MF b/images/instrumentation/test/jvm/test-cases/undefined-for-non-existing/MANIFEST.MF new file mode 100644 index 00000000..4f3348f9 --- /dev/null +++ b/images/instrumentation/test/jvm/test-cases/undefined-for-non-existing/MANIFEST.MF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 +Main-Class: Main diff --git a/images/instrumentation/test/jvm/test-cases/undefined-for-non-existing/Main.java b/images/instrumentation/test/jvm/test-cases/undefined-for-non-existing/Main.java new file mode 100644 index 00000000..c8046921 --- /dev/null +++ b/images/instrumentation/test/jvm/test-cases/undefined-for-non-existing/Main.java @@ -0,0 +1,9 @@ + public class Main { + + public static void main(String[] args) { + String value = System.getenv("UNDEFINED_ENVIRONMENT_VARIABLE"); + if (value != null) { + throw new RuntimeException(String.format("Unexpected value for the 'UNDEFINED_ENVIRONMENT_VARIABLE' env var: %s", value)); + } + } + } diff --git a/images/instrumentation/test/jvm/test-cases/undefined-for-non-existing/mvnw b/images/instrumentation/test/jvm/test-cases/undefined-for-non-existing/mvnw deleted file mode 100755 index 19529ddf..00000000 --- a/images/instrumentation/test/jvm/test-cases/undefined-for-non-existing/mvnw +++ /dev/null @@ -1,259 +0,0 @@ -#!/bin/sh -# ---------------------------------------------------------------------------- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# ---------------------------------------------------------------------------- - -# ---------------------------------------------------------------------------- -# Apache Maven Wrapper startup batch script, version 3.3.2 -# -# Optional ENV vars -# ----------------- -# JAVA_HOME - location of a JDK home dir, required when download maven via java source -# MVNW_REPOURL - repo url base for downloading maven distribution -# MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven -# MVNW_VERBOSE - true: enable verbose log; debug: trace the mvnw script; others: silence the output -# ---------------------------------------------------------------------------- - -set -euf -[ "${MVNW_VERBOSE-}" != debug ] || set -x - -# OS specific support. -native_path() { printf %s\\n "$1"; } -case "$(uname)" in -CYGWIN* | MINGW*) - [ -z "${JAVA_HOME-}" ] || JAVA_HOME="$(cygpath --unix "$JAVA_HOME")" - native_path() { cygpath --path --windows "$1"; } - ;; -esac - -# set JAVACMD and JAVACCMD -set_java_home() { - # For Cygwin and MinGW, ensure paths are in Unix format before anything is touched - if [ -n "${JAVA_HOME-}" ]; then - if [ -x "$JAVA_HOME/jre/sh/java" ]; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - JAVACCMD="$JAVA_HOME/jre/sh/javac" - else - JAVACMD="$JAVA_HOME/bin/java" - JAVACCMD="$JAVA_HOME/bin/javac" - - if [ ! -x "$JAVACMD" ] || [ ! -x "$JAVACCMD" ]; then - echo "The JAVA_HOME environment variable is not defined correctly, so mvnw cannot run." >&2 - echo "JAVA_HOME is set to \"$JAVA_HOME\", but \"\$JAVA_HOME/bin/java\" or \"\$JAVA_HOME/bin/javac\" does not exist." >&2 - return 1 - fi - fi - else - JAVACMD="$( - 'set' +e - 'unset' -f command 2>/dev/null - 'command' -v java - )" || : - JAVACCMD="$( - 'set' +e - 'unset' -f command 2>/dev/null - 'command' -v javac - )" || : - - if [ ! -x "${JAVACMD-}" ] || [ ! -x "${JAVACCMD-}" ]; then - echo "The java/javac command does not exist in PATH nor is JAVA_HOME set, so mvnw cannot run." >&2 - return 1 - fi - fi -} - -# hash string like Java String::hashCode -hash_string() { - str="${1:-}" h=0 - while [ -n "$str" ]; do - char="${str%"${str#?}"}" - h=$(((h * 31 + $(LC_CTYPE=C printf %d "'$char")) % 4294967296)) - str="${str#?}" - done - printf %x\\n $h -} - -verbose() { :; } -[ "${MVNW_VERBOSE-}" != true ] || verbose() { printf %s\\n "${1-}"; } - -die() { - printf %s\\n "$1" >&2 - exit 1 -} - -trim() { - # MWRAPPER-139: - # Trims trailing and leading whitespace, carriage returns, tabs, and linefeeds. - # Needed for removing poorly interpreted newline sequences when running in more - # exotic environments such as mingw bash on Windows. - printf "%s" "${1}" | tr -d '[:space:]' -} - -# parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties -while IFS="=" read -r key value; do - case "${key-}" in - distributionUrl) distributionUrl=$(trim "${value-}") ;; - distributionSha256Sum) distributionSha256Sum=$(trim "${value-}") ;; - esac -done <"${0%/*}/.mvn/wrapper/maven-wrapper.properties" -[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in ${0%/*}/.mvn/wrapper/maven-wrapper.properties" - -case "${distributionUrl##*/}" in -maven-mvnd-*bin.*) - MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ - case "${PROCESSOR_ARCHITECTURE-}${PROCESSOR_ARCHITEW6432-}:$(uname -a)" in - *AMD64:CYGWIN* | *AMD64:MINGW*) distributionPlatform=windows-amd64 ;; - :Darwin*x86_64) distributionPlatform=darwin-amd64 ;; - :Darwin*arm64) distributionPlatform=darwin-aarch64 ;; - :Linux*x86_64*) distributionPlatform=linux-amd64 ;; - *) - echo "Cannot detect native platform for mvnd on $(uname)-$(uname -m), use pure java version" >&2 - distributionPlatform=linux-amd64 - ;; - esac - distributionUrl="${distributionUrl%-bin.*}-$distributionPlatform.zip" - ;; -maven-mvnd-*) MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ ;; -*) MVN_CMD="mvn${0##*/mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;; -esac - -# apply MVNW_REPOURL and calculate MAVEN_HOME -# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ -[ -z "${MVNW_REPOURL-}" ] || distributionUrl="$MVNW_REPOURL$_MVNW_REPO_PATTERN${distributionUrl#*"$_MVNW_REPO_PATTERN"}" -distributionUrlName="${distributionUrl##*/}" -distributionUrlNameMain="${distributionUrlName%.*}" -distributionUrlNameMain="${distributionUrlNameMain%-bin}" -MAVEN_USER_HOME="${MAVEN_USER_HOME:-${HOME}/.m2}" -MAVEN_HOME="${MAVEN_USER_HOME}/wrapper/dists/${distributionUrlNameMain-}/$(hash_string "$distributionUrl")" - -exec_maven() { - unset MVNW_VERBOSE MVNW_USERNAME MVNW_PASSWORD MVNW_REPOURL || : - exec "$MAVEN_HOME/bin/$MVN_CMD" "$@" || die "cannot exec $MAVEN_HOME/bin/$MVN_CMD" -} - -if [ -d "$MAVEN_HOME" ]; then - verbose "found existing MAVEN_HOME at $MAVEN_HOME" - exec_maven "$@" -fi - -case "${distributionUrl-}" in -*?-bin.zip | *?maven-mvnd-?*-?*.zip) ;; -*) die "distributionUrl is not valid, must match *-bin.zip or maven-mvnd-*.zip, but found '${distributionUrl-}'" ;; -esac - -# prepare tmp dir -if TMP_DOWNLOAD_DIR="$(mktemp -d)" && [ -d "$TMP_DOWNLOAD_DIR" ]; then - clean() { rm -rf -- "$TMP_DOWNLOAD_DIR"; } - trap clean HUP INT TERM EXIT -else - die "cannot create temp dir" -fi - -mkdir -p -- "${MAVEN_HOME%/*}" - -# Download and Install Apache Maven -verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." -verbose "Downloading from: $distributionUrl" -verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" - -# select .zip or .tar.gz -if ! command -v unzip >/dev/null; then - distributionUrl="${distributionUrl%.zip}.tar.gz" - distributionUrlName="${distributionUrl##*/}" -fi - -# verbose opt -__MVNW_QUIET_WGET=--quiet __MVNW_QUIET_CURL=--silent __MVNW_QUIET_UNZIP=-q __MVNW_QUIET_TAR='' -[ "${MVNW_VERBOSE-}" != true ] || __MVNW_QUIET_WGET='' __MVNW_QUIET_CURL='' __MVNW_QUIET_UNZIP='' __MVNW_QUIET_TAR=v - -# normalize http auth -case "${MVNW_PASSWORD:+has-password}" in -'') MVNW_USERNAME='' MVNW_PASSWORD='' ;; -has-password) [ -n "${MVNW_USERNAME-}" ] || MVNW_USERNAME='' MVNW_PASSWORD='' ;; -esac - -if [ -z "${MVNW_USERNAME-}" ] && command -v wget >/dev/null; then - verbose "Found wget ... using wget" - wget ${__MVNW_QUIET_WGET:+"$__MVNW_QUIET_WGET"} "$distributionUrl" -O "$TMP_DOWNLOAD_DIR/$distributionUrlName" || die "wget: Failed to fetch $distributionUrl" -elif [ -z "${MVNW_USERNAME-}" ] && command -v curl >/dev/null; then - verbose "Found curl ... using curl" - curl ${__MVNW_QUIET_CURL:+"$__MVNW_QUIET_CURL"} -f -L -o "$TMP_DOWNLOAD_DIR/$distributionUrlName" "$distributionUrl" || die "curl: Failed to fetch $distributionUrl" -elif set_java_home; then - verbose "Falling back to use Java to download" - javaSource="$TMP_DOWNLOAD_DIR/Downloader.java" - targetZip="$TMP_DOWNLOAD_DIR/$distributionUrlName" - cat >"$javaSource" <<-END - public class Downloader extends java.net.Authenticator - { - protected java.net.PasswordAuthentication getPasswordAuthentication() - { - return new java.net.PasswordAuthentication( System.getenv( "MVNW_USERNAME" ), System.getenv( "MVNW_PASSWORD" ).toCharArray() ); - } - public static void main( String[] args ) throws Exception - { - setDefault( new Downloader() ); - java.nio.file.Files.copy( java.net.URI.create( args[0] ).toURL().openStream(), java.nio.file.Paths.get( args[1] ).toAbsolutePath().normalize() ); - } - } - END - # For Cygwin/MinGW, switch paths to Windows format before running javac and java - verbose " - Compiling Downloader.java ..." - "$(native_path "$JAVACCMD")" "$(native_path "$javaSource")" || die "Failed to compile Downloader.java" - verbose " - Running Downloader.java ..." - "$(native_path "$JAVACMD")" -cp "$(native_path "$TMP_DOWNLOAD_DIR")" Downloader "$distributionUrl" "$(native_path "$targetZip")" -fi - -# If specified, validate the SHA-256 sum of the Maven distribution zip file -if [ -n "${distributionSha256Sum-}" ]; then - distributionSha256Result=false - if [ "$MVN_CMD" = mvnd.sh ]; then - echo "Checksum validation is not supported for maven-mvnd." >&2 - echo "Please disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 - exit 1 - elif command -v sha256sum >/dev/null; then - if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c >/dev/null 2>&1; then - distributionSha256Result=true - fi - elif command -v shasum >/dev/null; then - if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | shasum -a 256 -c >/dev/null 2>&1; then - distributionSha256Result=true - fi - else - echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2 - echo "Please install either command, or disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 - exit 1 - fi - if [ $distributionSha256Result = false ]; then - echo "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised." >&2 - echo "If you updated your Maven version, you need to update the specified distributionSha256Sum property." >&2 - exit 1 - fi -fi - -# unzip and move -if command -v unzip >/dev/null; then - unzip ${__MVNW_QUIET_UNZIP:+"$__MVNW_QUIET_UNZIP"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -d "$TMP_DOWNLOAD_DIR" || die "failed to unzip" -else - tar xzf${__MVNW_QUIET_TAR:+"$__MVNW_QUIET_TAR"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -C "$TMP_DOWNLOAD_DIR" || die "failed to untar" -fi -printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/mvnw.url" -mv -- "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME" - -clean || : -exec_maven "$@" diff --git a/images/instrumentation/test/jvm/test-cases/undefined-for-non-existing/pom.xml b/images/instrumentation/test/jvm/test-cases/undefined-for-non-existing/pom.xml deleted file mode 100644 index 80942ef1..00000000 --- a/images/instrumentation/test/jvm/test-cases/undefined-for-non-existing/pom.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starter-parent - 3.4.1 - - - com.dash0.injector - undefined-envvar-demo - 0.0.1-SNAPSHOT - undefined-envvar-demo - Test App for Dash0 injector - - 17 - - - - org.springframework.boot - spring-boot-starter - - - - org.springframework.boot - spring-boot-starter-test - test - - - - app - - - org.springframework.boot - spring-boot-maven-plugin - - - - - diff --git a/images/instrumentation/test/jvm/test-cases/undefined-for-non-existing/src/main/java/com/dash0/injector/existing_envvar_demo/TestApplication.java b/images/instrumentation/test/jvm/test-cases/undefined-for-non-existing/src/main/java/com/dash0/injector/existing_envvar_demo/TestApplication.java deleted file mode 100644 index f2c271c1..00000000 --- a/images/instrumentation/test/jvm/test-cases/undefined-for-non-existing/src/main/java/com/dash0/injector/existing_envvar_demo/TestApplication.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.dash0.injector.existing_envvar_demo; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.context.event.ApplicationReadyEvent; -import org.springframework.context.event.EventListener; -import org.springframework.core.env.Environment; - -@SpringBootApplication -public class TestApplication { - - @Autowired - private Environment environment; - - @EventListener(ApplicationReadyEvent.class) - public void checkEnvVar() { - final String value = environment.getProperty("UNDEFINED_ENVIRONMENT_VARIABLE"); - if (value != null) { - throw new RuntimeException(String.format("Unexpected value for the 'UNDEFINED_ENVIRONMENT_VARIABLE' env var: %s", value)); - } - } - - public static void main(String[] args) { - SpringApplication.run(TestApplication.class, args); - } - -} diff --git a/images/instrumentation/test/jvm/test-cases/undefined-for-non-existing/src/test/java/com/dash0/injector/existing_envvar_demo/TestApplicationTests.java b/images/instrumentation/test/jvm/test-cases/undefined-for-non-existing/src/test/java/com/dash0/injector/existing_envvar_demo/TestApplicationTests.java deleted file mode 100644 index a79bc26f..00000000 --- a/images/instrumentation/test/jvm/test-cases/undefined-for-non-existing/src/test/java/com/dash0/injector/existing_envvar_demo/TestApplicationTests.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.dash0.injector.existing_envvar_demo; - -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.context.SpringBootTest; - -@SpringBootTest -class TestApplicationTests { - - @Test - void contextLoadSucceeds() { - } - -} diff --git a/images/instrumentation/test/node/base-images b/images/instrumentation/test/node/base-images index a5c00143..b2ada94d 100644 --- a/images/instrumentation/test/node/base-images +++ b/images/instrumentation/test/node/base-images @@ -8,4 +8,3 @@ node:22-bullseye node:20-alpine node:20-bookworm node:18-alpine -node:18-bullseye diff --git a/images/instrumentation/test/test-all.sh b/images/instrumentation/test/test-all.sh index 73ec357f..2eeaa576 100755 --- a/images/instrumentation/test/test-all.sh +++ b/images/instrumentation/test/test-all.sh @@ -30,7 +30,7 @@ all_docker_platforms=linux/arm64,linux/amd64 script_dir="test" exit_code=0 summary="" -slow_test_threshold_seconds=15 +slow_test_threshold_seconds=10 architectures="" if [[ -n "${ARCHITECTURES:-}" ]]; then architectures=("${ARCHITECTURES//,/ }") @@ -138,7 +138,11 @@ run_tests_for_runtime() { case "$runtime" in jvm) - test_cmd=(java -jar "/test-cases/${test}/target/app.jar") + # Suppressing auto instrumentations saves a few seconds per test case, which amounts to a lot for the whole + # test suite. We do not test tracing in the instrumentation image tests, so instrumenting is not needed. + # The Java agent still unfortunately adds a couple of seconds of startup overhead. + # Note: Add -Dotel.javaagent.debug=true for troubleshooting details. + test_cmd=(java -jar -Dotel.instrumentation.common.default-enabled=false "/test-cases/${test}/app.jar") ;; node) From 088d5677f3553eeed508db339036c99f90e88246 Mon Sep 17 00:00:00 2001 From: Bastian Krol Date: Sun, 2 Feb 2025 22:18:51 +0100 Subject: [PATCH 2/2] ci: extract injector&instrumentation tests into separate action This helps in particular with the check for changed files that decides whether or not to run this lengthy test suite: Previously, we would run it on any change of .github/workflows/ci.yaml, now we only run it when .github/actions/injector-and-instrumentation-tests/action.yaml has changes (and of course if there are changes images/instrumentation). --- .../action.yaml | 137 ++++++++++++++++++ .github/workflows/ci.yaml | 122 +--------------- 2 files changed, 141 insertions(+), 118 deletions(-) create mode 100644 .github/actions/injector-and-instrumentation-tests/action.yaml diff --git a/.github/actions/injector-and-instrumentation-tests/action.yaml b/.github/actions/injector-and-instrumentation-tests/action.yaml new file mode 100644 index 00000000..4ccfa743 --- /dev/null +++ b/.github/actions/injector-and-instrumentation-tests/action.yaml @@ -0,0 +1,137 @@ +name: injector and instrumentation tests +description: runs the injector and instrumentation image tests + +inputs: + githubToken: + description: "github token" + required: true + +runs: + using: "composite" + steps: + - uses: actions/checkout@v4 + + - name: get branch name + id: branch-name + uses: tj-actions/branch-names@v8 + + - name: find SHA of last successful workflow run on main branch + uses: nrwl/nx-set-shas@v4 + id: last_succsesfull_commit_main_branch + with: + # Get the last successful commit on main branch (actually, on the target branch for the PR, but that is + # usually main). + main-branch-name: ${{ steps.branch-name.outputs.base_ref_branch }} + + # We use the changed-files action to potentially skip the injector & instrumentation tests on PRs that contain no + # changes for the instrumentation image. This is because running the tests requires to build the instrumentation + # image for both arm64 and X86_64, and the cross-platform build is very slow (takes up to 15 minutes). We do + # always run these steps when building the main branch or a tag though. By default, changed-files would compare + # against the last non-merge commit on the target branch for pull request events (which is used in PR builds), but + # together with the nrwl/nx-set-shas step from above we compare against the SHA from the last _successful_ CI + # workflow run on the main branch. + - name: compile list of relevant changed files for the instrumentation image + id: changed-files + uses: tj-actions/changed-files@v45 + with: + base_sha: ${{ steps.last_succsesfull_commit_main_branch.outputs.base }} + files_yaml: | + instrumentation: + - .github/actions/injector-and-instrumentation-tests/action.yaml + - images/instrumentation/** + + - name: show changed files + shell: bash + env: + INSTRUMENTATION_CHANGED_FILES_FLAG: ${{ steps.changed-files.outputs.instrumentation_any_changed }} + INSTRUMENTATION_CHANGED_FILES_LIST: ${{ steps.changed-files.outputs.instrumentation_all_changed_files }} + run: | + echo "files for instrumentation image have changed: $INSTRUMENTATION_CHANGED_FILES_FLAG" + echo "changed files for instrumentation image: $INSTRUMENTATION_CHANGED_FILES_LIST" + + - name: set up docker buildx + uses: docker/setup-buildx-action@v3 + if: | + steps.changed-files.outputs.instrumentation_any_changed == 'true' || + github.ref == 'refs/heads/main' || contains(github.ref, 'refs/tags/') + + # Just for building on arm, buildx is enough but doing docker run with --platform=linux/arm64 (which we do when + # testing the injector binary and the instrumentation image) requires qemu. + - name: set up qemu + uses: docker/setup-qemu-action@v3 + if: | + steps.changed-files.outputs.instrumentation_any_changed == 'true' || + github.ref == 'refs/heads/main' || contains(github.ref, 'refs/tags/') + + - name: login to GitHub container registry + uses: docker/login-action@v3 + if: | + steps.changed-files.outputs.instrumentation_any_changed == 'true' || + github.ref == 'refs/heads/main' || contains(github.ref, 'refs/tags/') + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ inputs.githubToken }} + + # To enable running the tests for multiple active branches in parallel without risking conflicts, we use the + # branch name as part of the image tag. However, we cannot just use the branch name as is, since it may contain + # characters that are not allowed in image tags (most notably slashes in dependabot PRs). We replace all invalid + # characters with underscores and use the output of this step as the image tag. + - name: assemble instrumentation test image name + shell: bash + id: instrumentation-test-image + run: | + export image_tag=$( echo "${{ github.head_ref || github.ref_name }}" | sed 's/[^a-zA-Z0-9_\.\-]/\_/g' ) + echo "image_name=ghcr.io/dash0hq/instrumentation-ci-test:$image_tag" >> $GITHUB_OUTPUT + + - name: build temporary instrumentation image + uses: docker/build-push-action@v6 + # Dependabot PRs currently fail in this step, see + # https://stackoverflow.com/questions/74788092/github-dependabot-doesnt-have-permissions-to-publish-to-ghcr-how-can-i-give-it + # This can be worked around by ammending the Dependabot commit and force-pushing it, e.g. + # git commit --amend --signoff && git push --force-with-lease + # (The original suspicion was that the HTTP 403 was somehow related to the image tag, but this is purely a + # Dependabot permission issue.) + # See also: https://docs.github.com/en/code-security/dependabot + # Maybe we can also allow Dependabot PRs to dry-run the Helm chart publishing, that is, remove the + # github.actor != 'dependabot[bot]' condition we have on those steps. + if: | + steps.changed-files.outputs.instrumentation_any_changed == 'true' || + github.ref == 'refs/heads/main' || contains(github.ref, 'refs/tags/') + with: + context: images/instrumentation + tags: ${{ steps.instrumentation-test-image.outputs.image_name }} + platforms: linux/amd64,linux/arm64 + cache-from: type=gha,scope=instrumentation + cache-to: type=gha,mode=max,scope=instrumentation + push: true + + - name: injector tests + shell: bash + if: | + steps.changed-files.outputs.instrumentation_any_changed == 'true' || + github.ref == 'refs/heads/main' || contains(github.ref, 'refs/tags/') + env: + INSTRUMENTATION_IMAGE: ${{ steps.instrumentation-test-image.outputs.image_name }} + run: | + images/instrumentation/injector/test/scripts/test-all.sh + + - name: instrumentation image tests + shell: bash + if: | + steps.changed-files.outputs.instrumentation_any_changed == 'true' || + github.ref == 'refs/heads/main' || contains(github.ref, 'refs/tags/') + env: + INSTRUMENTATION_IMAGE: ${{ steps.instrumentation-test-image.outputs.image_name }} + run: | + images/instrumentation/test/test-all.sh + + - name: delete test image + uses: bots-house/ghcr-delete-image-action@v1.1.0 + if: ${{ always() && ( steps.changed-files.outputs.instrumentation_any_changed == 'true' || github.ref == 'refs/heads/main' || contains(github.ref, 'refs/tags/') ) }} + with: + owner: dash0hq + name: instrumentation-ci-test + token: ${{ inputs.githubToken }} + # delete untagged images from this build (and from earlier builds, if there are any leftovers) + untagged-keep-latest: 1 diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 7b176f67..4e9a2552 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -96,127 +96,13 @@ jobs: steps: - uses: actions/checkout@v4 - - - name: get branch name - id: branch-name - uses: tj-actions/branch-names@v8 - - - name: find SHA of last successful workflow run on main branch - uses: nrwl/nx-set-shas@v4 - id: last_succsesfull_commit_main_branch - with: - # Get the last successful commit on main branch (actually, on the target branch for the PR, but that is - # usually main). - main-branch-name: ${{ steps.branch-name.outputs.base_ref_branch }} - - # We use the changed-files action to potentially skip the injector & instrumentation tests on PRs that contain no - # changes for the instrumentation image. This is because running the tests requires to build the instrumentation - # image for both arm64 and X86_64, and the cross-platform build is very slow (takes up to 15 minutes). We do - # always run these steps when building the main branch or a tag though. By default, changed-files would compare - # against the last non-merge commit on the target branch for pull request events (which is used in PR builds), but - # together with the nrwl/nx-set-shas step from above we compare against the SHA from the last _successful_ CI - # workflow run on the main branch. - - name: compile list of relevant changed files for the instrumentation image - id: changed-files - uses: tj-actions/changed-files@v45 - with: - base_sha: ${{ steps.last_succsesfull_commit_main_branch.outputs.base }} - files_yaml: | - instrumentation: - - .github/workflows/ci.yaml - - images/instrumentation/** - - - name: show changed files - env: - INSTRUMENTATION_CHANGED_FILES_FLAG: ${{ steps.changed-files.outputs.instrumentation_any_changed }} - INSTRUMENTATION_CHANGED_FILES_LIST: ${{ steps.changed-files.outputs.instrumentation_all_changed_files }} - run: | - echo "files for instrumentation image have changed: $INSTRUMENTATION_CHANGED_FILES_FLAG" - echo "changed files for instrumentation image: $INSTRUMENTATION_CHANGED_FILES_LIST" - - - name: set up docker buildx - uses: docker/setup-buildx-action@v3 - if: | - steps.changed-files.outputs.instrumentation_any_changed == 'true' || - github.ref == 'refs/heads/main' || contains(github.ref, 'refs/tags/') - - # Just for building on arm, buildx is enough but doing docker run with --platform=linux/arm64 (which we do when - # testing the injector binary and the instrumentation image) requires qemu. - - name: set up qemu - uses: docker/setup-qemu-action@v3 - if: | - steps.changed-files.outputs.instrumentation_any_changed == 'true' || - github.ref == 'refs/heads/main' || contains(github.ref, 'refs/tags/') - - - name: login to GitHub container registry - uses: docker/login-action@v3 - if: | - steps.changed-files.outputs.instrumentation_any_changed == 'true' || - github.ref == 'refs/heads/main' || contains(github.ref, 'refs/tags/') - with: - registry: ghcr.io - username: ${{ github.repository_owner }} - password: ${{ secrets.GITHUB_TOKEN }} - - # To enable running the tests for multiple active branches in parallel without risking conflicts, we use the - # branch name as part of the image tag. However, we cannot just use the branch name as is, since it may contain - # characters that are not allowed in image tags (most notably slashes in dependabot PRs). We replace all invalid - # characters with underscores and use the output of this step as the image tag. - - name: assemble instrumentation test image name - id: instrumentation-test-image - run: | - export image_tag=$( echo "${{ github.head_ref || github.ref_name }}" | sed 's/[^a-zA-Z0-9_\.\-]/\_/g' ) - echo "image_name=ghcr.io/dash0hq/instrumentation-ci-test:$image_tag" >> $GITHUB_OUTPUT - - - name: build temporary instrumentation image - uses: docker/build-push-action@v6 - # Dependabot PRs currently fail in this step, see - # https://stackoverflow.com/questions/74788092/github-dependabot-doesnt-have-permissions-to-publish-to-ghcr-how-can-i-give-it - # This can be worked around by ammending the Dependabot commit and force-pushing it, e.g. - # git commit --amend --signoff && git push --force-with-lease - # (The original suspicion was that the HTTP 403 was somehow related to the image tag, but this is purely a - # Dependabot permission issue.) - # See also: https://docs.github.com/en/code-security/dependabot - # Maybe we can also allow Dependabot PRs to dry-run the Helm chart publishing, that is, remove the - # github.actor != 'dependabot[bot]' condition we have on those steps. - if: | - steps.changed-files.outputs.instrumentation_any_changed == 'true' || - github.ref == 'refs/heads/main' || contains(github.ref, 'refs/tags/') with: - context: images/instrumentation - tags: ${{ steps.instrumentation-test-image.outputs.image_name }} - platforms: linux/amd64,linux/arm64 - cache-from: type=gha,scope=instrumentation - cache-to: type=gha,mode=max,scope=instrumentation - push: true - - - name: injector tests - if: | - steps.changed-files.outputs.instrumentation_any_changed == 'true' || - github.ref == 'refs/heads/main' || contains(github.ref, 'refs/tags/') - env: - INSTRUMENTATION_IMAGE: ${{ steps.instrumentation-test-image.outputs.image_name }} - run: | - images/instrumentation/injector/test/scripts/test-all.sh - - - name: instrumentation image tests - if: | - steps.changed-files.outputs.instrumentation_any_changed == 'true' || - github.ref == 'refs/heads/main' || contains(github.ref, 'refs/tags/') - env: - INSTRUMENTATION_IMAGE: ${{ steps.instrumentation-test-image.outputs.image_name }} - run: | - images/instrumentation/test/test-all.sh + fetch-depth: 0 - - name: delete test image - uses: bots-house/ghcr-delete-image-action@v1.1.0 - if: ${{ always() && ( steps.changed-files.outputs.instrumentation_any_changed == 'true' || github.ref == 'refs/heads/main' || contains(github.ref, 'refs/tags/') ) }} + - name: run test suites + uses: ./.github/actions/injector-and-instrumentation-tests with: - owner: dash0hq - name: instrumentation-ci-test - token: ${{ secrets.GITHUB_TOKEN }} - # delete untagged images from this build (and from earlier builds, if there are any leftovers) - untagged-keep-latest: 1 + githubToken: ${{ secrets.GITHUB_TOKEN }} # Builds and potentially pushes all container images. For pushes to PRs/branches, we simply verify that the image # build still works, the resulting image will not be pushed to any target registry. For pushes to the main branch, the