Fix default discovery crash on Windows #9423
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: "Integration Test" | |
on: | |
push: | |
branches: | |
- main | |
pull_request: | |
paths: | |
- '.github/workflows/integration-test.yml' | |
- 'cmd/**' | |
- 'docker/**' | |
- 'internal/**' | |
- 'pkg/**' | |
- 'tests/**' | |
- 'Makefile' | |
- 'Makefile.Common' | |
- 'go.mod' | |
- 'go.sum' | |
- '!**.md' | |
- '!internal/buildscripts/**' | |
concurrency: | |
group: integration-test-${{ github.event.pull_request.number || github.ref }} | |
cancel-in-progress: true | |
env: | |
GO_VERSION: "1.21.12" | |
jobs: | |
agent-bundle-linux: | |
runs-on: ${{ fromJSON('["ubuntu-20.04", "otel-arm64"]')[matrix.ARCH == 'arm64'] }} | |
strategy: | |
matrix: | |
ARCH: [ "amd64", "arm64" ] | |
fail-fast: false | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/cache@v4 | |
id: bundle-cache | |
with: | |
path: .cache/buildx/agent-bundle-${{ matrix.ARCH }} | |
key: agent-bundle-buildx-${{ matrix.ARCH }}-${{ hashFiles('internal/signalfx-agent/bundle/**') }} | |
restore-keys: | | |
agent-bundle-buildx-${{ matrix.ARCH }}- | |
- run: make -C internal/signalfx-agent/bundle agent-bundle-linux ARCH=${{ matrix.ARCH }} | |
env: | |
BUNDLE_CACHE_HIT: "${{ steps.bundle-cache.outputs.cache-hit }}" | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: agent-bundle-linux-${{ matrix.ARCH }} | |
path: ./dist/agent-bundle_linux_${{ matrix.ARCH }}.tar.gz | |
otelcol: | |
runs-on: ubuntu-20.04 | |
strategy: | |
matrix: | |
ARCH: [ "amd64", "arm64", "ppc64le" ] | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- uses: actions/setup-go@v5 | |
with: | |
go-version: ${{ env.GO_VERSION }} | |
cache-dependency-path: '**/go.sum' | |
- run: make binaries-linux_${{ matrix.ARCH }} | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: otelcol-${{ matrix.ARCH }} | |
path: | | |
./bin/* | |
docker-otelcol: | |
name: docker-otelcol | |
# Use 20.04.5 until https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/16450 is resolved | |
runs-on: ubuntu-20.04 | |
needs: [ "agent-bundle-linux", "otelcol" ] | |
services: | |
# Start a local registry for pushing the multiarch manifest and images | |
registry: | |
image: registry:2 | |
ports: | |
- 5000:5000 | |
steps: | |
# Multiarch images require more disk space | |
- uses: jlumbroso/free-disk-space@v1.3.1 | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- uses: actions/setup-go@v5 | |
with: | |
go-version: ${{ env.GO_VERSION }} | |
cache-dependency-path: '**/go.sum' | |
- uses: actions/download-artifact@v4 | |
with: | |
pattern: agent-bundle-linux-* | |
merge-multiple: true | |
path: ./dist | |
- uses: actions/download-artifact@v4 | |
with: | |
pattern: otelcol-* | |
merge-multiple: true | |
path: ./bin | |
- uses: docker/setup-qemu-action@v3 | |
with: | |
platforms: arm64,ppc64le | |
image: tonistiigi/binfmt:qemu-v7.0.0 | |
- uses: docker/setup-buildx-action@v3 | |
id: multiarch-otelcol-builder | |
with: | |
driver: docker-container # Create a builder with the docker-container driver required for multiarch builds | |
driver-opts: network=host # Required for the builder to push to the local registry service | |
- run: make docker-otelcol SKIP_COMPILE=true SKIP_BUNDLE=true ARCH=amd64,arm64,ppc64le IMAGE_NAME=localhost:5000/otelcol IMAGE_TAG=latest PUSH=true | |
env: | |
MULTIARCH_OTELCOL_BUILDER: ${{ steps.multiarch-otelcol-builder.outputs.name }} # Use the builder created by the docker/setup-buildx-action step | |
- name: Save image archive for each platform to be loaded by downstream jobs | |
run: | | |
for arch in "amd64" "arm64" "ppc64le"; do | |
mkdir -p docker-otelcol/${arch} | |
docker pull --platform=linux/${arch} localhost:5000/otelcol:latest | |
docker tag localhost:5000/otelcol:latest otelcol:latest | |
docker save -o ./docker-otelcol/${arch}/image.tar otelcol:latest | |
docker rmi -f localhost:5000/otelcol:latest otelcol:latest | |
done | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: docker-otelcol-amd64 | |
path: ./docker-otelcol/amd64 | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: docker-otelcol-arm64 | |
path: ./docker-otelcol/arm64 | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: docker-otelcol-ppc64le | |
path: ./docker-otelcol/ppc64le | |
integration-vet: | |
name: integration-vet | |
# Use 20.04.5 until https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/16450 is resolved | |
runs-on: ubuntu-20.04 | |
strategy: | |
matrix: | |
ARCH: [ "amd64", "arm64" ] | |
fail-fast: false | |
needs: [ "docker-otelcol", "otelcol" ] | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- uses: actions/setup-go@v5 | |
with: | |
go-version: ${{ env.GO_VERSION }} | |
cache-dependency-path: '**/go.sum' | |
- uses: actions/download-artifact@v4 | |
with: | |
name: otelcol-${{ matrix.ARCH }} | |
path: ./bin | |
- uses: actions/download-artifact@v4 | |
with: | |
name: docker-otelcol-${{ matrix.ARCH }} | |
path: ./docker-otelcol/${{ matrix.ARCH }} | |
- uses: docker/setup-qemu-action@v3 | |
if: ${{ matrix.ARCH != 'amd64' }} | |
with: | |
platforms: ${{ matrix.ARCH }} | |
image: tonistiigi/binfmt:qemu-v7.0.0 | |
- run: docker load -i ./docker-otelcol/${{ matrix.ARCH }}/image.tar | |
- run: ln -sf otelcol_linux_${{ matrix.ARCH }} ./bin/otelcol | |
- run: chmod a+x ./bin/* | |
- run: make integration-vet | |
env: | |
SPLUNK_OTEL_COLLECTOR_IMAGE: 'otelcol:latest' | |
integration-test-docker: | |
# Use 20.04.5 until https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/16450 is resolved | |
runs-on: ubuntu-20.04 | |
needs: [ "docker-otelcol", "otelcol" ] | |
strategy: | |
matrix: | |
ARCH: [ "amd64", "arm64" ] | |
PROFILE: [ "integration", "smartagent" ] | |
fail-fast: false | |
env: | |
TEST_OUTPUT: ${{ github.job }}-${{ matrix.PROFILE }}-${{ matrix.ARCH }}.out | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Build ${{ matrix.PROFILE }} service images | |
run: | | |
images=$(yq '.services[] | select(.profiles[] | . == "${{ matrix.PROFILE }}") | .image' docker/docker-compose.yml | grep "quay.io/splunko11ytest/" | sort -u) | |
for image in $images; do | |
service=$(basename "$image" | cut -d ':' -f1) | |
if [[ -f docker/${service}/Dockerfile ]]; then | |
docker build --cache-from=quay.io/splunko11ytest/${service}:latest -t quay.io/splunko11ytest/${service}:latest docker/${service} | |
fi | |
done | |
docker system prune -f | |
docker builder prune -f | |
docker images | |
- run: docker compose -f docker/docker-compose.yml --profile ${{ matrix.PROFILE }} up -d --quiet-pull | |
- uses: actions/setup-go@v5 | |
with: | |
go-version: ${{ env.GO_VERSION }} | |
cache-dependency-path: '**/go.sum' | |
- uses: actions/download-artifact@v4 | |
with: | |
name: otelcol-${{ matrix.ARCH }} | |
path: ./bin | |
- uses: actions/download-artifact@v4 | |
with: | |
name: docker-otelcol-${{ matrix.ARCH }} | |
path: ./docker-otelcol/${{ matrix.ARCH }} | |
- uses: docker/setup-qemu-action@v3 | |
if: ${{ matrix.ARCH != 'amd64' }} | |
with: | |
platforms: ${{ matrix.ARCH }} | |
image: tonistiigi/binfmt:qemu-v7.0.0 | |
- run: docker load -i ./docker-otelcol/${{ matrix.ARCH }}/image.tar | |
- run: ln -sf otelcol_linux_${{ matrix.ARCH }} ./bin/otelcol | |
- run: chmod a+x ./bin/* | |
# Pin the version until https://github.com/shogo82148/actions-setup-redis/issues/958 is resolved | |
- uses: shogo82148/actions-setup-redis@v1.34.0 | |
if: matrix.PROFILE == 'integration' | |
with: | |
auto-start: false | |
redis-port: "6379" | |
- run: redis-cli ping | |
if: matrix.PROFILE == 'integration' | |
- run: redis-cli set tempkey tempvalue | |
if: matrix.PROFILE == 'integration' | |
- name: Run Integration Test | |
run: | | |
set -o pipefail | |
target="integration-test" | |
if [[ "${{ matrix.PROFILE }}" = "smartagent" ]]; then | |
target="smartagent-integration-test" | |
fi | |
make $target 2>&1 | tee $TEST_OUTPUT | |
exit_status=${PIPESTATUS[0]} | |
echo "Exit status: $exit_status" | |
exit $exit_status | |
env: | |
SPLUNK_OTEL_COLLECTOR_IMAGE: 'otelcol:latest' | |
# The Integration Test output is extremely large so we upload it as an artifact | |
- name: Upload Integration Test Output as Artifact | |
uses: actions/upload-artifact@v4 | |
if: always() | |
with: | |
name: ${{ env.TEST_OUTPUT }} | |
path: ${{ env.TEST_OUTPUT }} | |
retention-days: 5 | |
integration-test-binary: | |
runs-on: ${{ matrix.RUNNER }} | |
needs: [ "agent-bundle-linux", "otelcol" ] | |
strategy: | |
matrix: | |
RUNNER: [ "ubuntu-20.04", "ubuntu-22.04", "ubuntu-24.04" ] | |
PROFILE: [ "integration", "smartagent" ] | |
fail-fast: false | |
env: | |
TEST_OUTPUT: ${{ github.job }}-${{ matrix.PROFILE }}-${{ matrix.RUNNER }}.out | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Build ${{ matrix.PROFILE }} service images | |
run: | | |
images=$(yq '.services[] | select(.profiles[] | . == "${{ matrix.PROFILE }}") | .image' docker/docker-compose.yml | grep "quay.io/splunko11ytest/" | sort -u) | |
for image in $images; do | |
service=$(basename "$image" | cut -d ':' -f1) | |
if [[ -f docker/${service}/Dockerfile ]]; then | |
docker build --cache-from=quay.io/splunko11ytest/${service}:latest -t quay.io/splunko11ytest/${service}:latest docker/${service} | |
fi | |
done | |
docker system prune -f | |
docker builder prune -f | |
docker images | |
- run: docker compose -f docker/docker-compose.yml --profile ${{ matrix.PROFILE }} up -d --quiet-pull | |
- uses: actions/setup-go@v5 | |
with: | |
go-version: ${{ env.GO_VERSION }} | |
cache-dependency-path: '**/go.sum' | |
- uses: actions/download-artifact@v4 | |
with: | |
pattern: agent-bundle-linux-amd64 | |
merge-multiple: true | |
path: ./dist | |
- run: sudo mkdir -p /usr/lib/splunk-otel-collector | |
- run: sudo tar -xzf dist/agent-bundle_linux_amd64.tar.gz -C /usr/lib/splunk-otel-collector | |
- run: sudo chown -R $USER /usr/lib/splunk-otel-collector | |
- run: /usr/lib/splunk-otel-collector/agent-bundle/bin/patch-interpreter /usr/lib/splunk-otel-collector/agent-bundle | |
- uses: actions/download-artifact@v4 | |
with: | |
name: otelcol-amd64 | |
path: ./bin | |
- run: ln -sf otelcol_linux_amd64 ./bin/otelcol | |
- run: chmod a+x ./bin/* | |
# Pin the version until https://github.com/shogo82148/actions-setup-redis/issues/958 is resolved | |
- uses: shogo82148/actions-setup-redis@v1.34.0 | |
if: matrix.PROFILE == 'integration' | |
with: | |
auto-start: false | |
redis-port: "6379" | |
- run: redis-cli ping | |
if: matrix.PROFILE == 'integration' | |
- run: redis-cli set tempkey tempvalue | |
if: matrix.PROFILE == 'integration' | |
- name: Run Integration Test | |
run: | | |
set -o pipefail | |
target="integration-test" | |
if [[ "${{ matrix.PROFILE }}" = "smartagent" ]]; then | |
target="smartagent-integration-test" | |
fi | |
make $target 2>&1 | tee $TEST_OUTPUT | |
exit_status=${PIPESTATUS[0]} | |
echo "Exit status: $exit_status" | |
exit $exit_status | |
env: | |
SPLUNK_OTEL_COLLECTOR_IMAGE: "" | |
# The Integration Test output is extremely large so we upload it as an artifact | |
- name: Upload Integration Test Output as Artifact | |
uses: actions/upload-artifact@v4 | |
if: always() | |
with: | |
name: ${{ env.TEST_OUTPUT }} | |
path: ${{ env.TEST_OUTPUT }} | |
retention-days: 5 | |
integration-test-discovery-matrix: | |
runs-on: ubuntu-22.04 | |
outputs: | |
matrix: ${{ steps.get-matrix.outputs.matrix }} | |
steps: | |
- name: Get matrix | |
id: get-matrix | |
run: | | |
includes="" | |
for service in "apache" "mongodb" "kafkametrics" "jmx/cassandra"; do | |
for arch in "amd64" "arm64"; do | |
if [ "$service" = "mongodb" ]; then | |
for mongodb_version in "4.0" "4.4" "5.0" "6.0" "7.0"; do | |
includes="${includes},{\"SERVICE\": \"${service}\", \"ARCH\": \"${arch}\", \"MONGODB_VERSION\": \"${mongodb_version}\"}" | |
done | |
elif [[ "$service" != "jmx/cassandra" || "arm64" != "$arch" ]]; then | |
includes="${includes},{\"SERVICE\": \"${service}\", \"ARCH\": \"${arch}\"}" | |
fi | |
done | |
done | |
matrix="{\"include\": [${includes#,}]}" | |
echo "$matrix" | jq | |
echo "matrix=${matrix}" >> $GITHUB_OUTPUT | |
integration-test-discovery: | |
name: integration-test-discovery | |
runs-on: ubuntu-22.04 | |
needs: [ "docker-otelcol", "otelcol", "integration-test-discovery-matrix" ] | |
strategy: | |
matrix: ${{ fromJSON(needs.integration-test-discovery-matrix.outputs.matrix) }} | |
fail-fast: false | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- run: echo "MONGODB_VERSION=${{ matrix.MONGODB_VERSION }}" > docker/.env | |
if: matrix.SERVICE == 'mongodb' | |
- run: docker compose -f docker/docker-compose.yml --profile integration-test-${{ matrix.SERVICE }}-discovery up -d --wait --build --quiet-pull | |
- uses: actions/setup-go@v5 | |
with: | |
go-version: ${{ env.GO_VERSION }} | |
cache-dependency-path: '**/go.sum' | |
- uses: actions/download-artifact@v4 | |
with: | |
name: otelcol-${{ matrix.ARCH }} | |
path: ./bin | |
- uses: actions/download-artifact@v4 | |
with: | |
name: docker-otelcol-${{ matrix.ARCH }} | |
path: ./docker-otelcol/${{ matrix.ARCH }} | |
- uses: docker/setup-qemu-action@v3 | |
if: ${{ matrix.ARCH != 'amd64' }} | |
with: | |
platforms: ${{ matrix.ARCH }} | |
image: tonistiigi/binfmt:qemu-v7.0.0 | |
- run: docker load -i ./docker-otelcol/${{ matrix.ARCH }}/image.tar | |
- run: ln -sf otelcol_linux_${{ matrix.ARCH }} ./bin/otelcol | |
- run: chmod a+x ./bin/* | |
- name: Run ${{ matrix.SERVICE }} Discovery Integration Test | |
run: make integration-test-${{ matrix.SERVICE }}-discovery | |
env: | |
SPLUNK_OTEL_COLLECTOR_IMAGE: 'otelcol:latest' |