opentelemetry-collector-rel.../scripts/validate-components.sh

91 lines
2.6 KiB
Bash
Executable File

#!/bin/bash
# Copyright The OpenTelemetry Authors
# SPDX-License-Identifier: Apache-2.0
# This script verifies that all components declared in manifest.yaml files are
# defined in the builder-config.yaml from the opentelemetry-collector-contrib
# repository, or ebpf-profiler, ensuring they were built and tested successfully.
set -euo pipefail
BUILDER_CONFIG_URL="https://raw.githubusercontent.com/open-telemetry/opentelemetry-collector-contrib/main/cmd/otelcontribcol/builder-config.yaml"
MANIFEST_DIR="distributions"
# Ensure required tools are available
if ! command -v curl &> /dev/null || ! command -v yq &> /dev/null; then
echo "This script requires 'curl' and 'yq'. Please install them and try again."
exit 1
fi
# Fetch and parse valid components from builder-config.yaml
echo "Fetching builder-config.yaml..."
valid_components="$(
curl -s "$BUILDER_CONFIG_URL" \
| yq -r '
(
.extensions[]?.gomod,
.receivers[]?.gomod,
.connectors[]?.gomod,
.processors[]?.gomod,
.exporters[]?.gomod,
.providers[]?.gomod
)
' \
| awk '{print $1}' \
| sort -u
)"
valid_components+='
go.opentelemetry.io/ebpf-profiler'
if [[ -z "$valid_components" ]]; then
echo "Error: No valid 'gomod' entries found in builder-config.yaml!"
exit 1
fi
echo "Verifying all manifest.yaml files in '${MANIFEST_DIR}'..."
# We accumulate invalid components here as a multi-line string
invalid_components=""
# Use process substitution to avoid subshell issues
while IFS= read -r manifest_file; do
echo "Checking $manifest_file"
# Extract and trim components from the local manifest.yaml
manifest_components="$(
yq -r '
(
.extensions[]?.gomod,
.receivers[]?.gomod,
.connectors[]?.gomod,
.processors[]?.gomod,
.exporters[]?.gomod,
.providers[]?.gomod
)
' "$manifest_file" \
| awk '{print $1}' \
| sort -u
)"
# Compare each manifest component against the valid list
while IFS= read -r component; do
if ! printf '%s\n' "$valid_components" | grep -qxF "$component"; then
invalid_components="${invalid_components}\n${component}"
fi
done <<< "$manifest_components"
done < <(find "$MANIFEST_DIR" -type f -name "manifest.yaml")
if [[ -n "$invalid_components" ]]; then
echo
echo "The following components MUST be listed in"
echo "https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/cmd/otelcontribcol/builder-config.yaml"
echo "to ensure that they can be built:"
printf '%b\n' "$invalid_components" | sort -u
echo
exit 1
else
echo "All manifest.yaml components are valid!"
fi