94 lines
2.8 KiB
Bash
Executable File
94 lines
2.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# This script does some minimal sanity checks of schema files.
|
|
# It expects to find a schema file for each version listed in CHANGELOG.md
|
|
# since 1.0.0 release.
|
|
|
|
set -e
|
|
|
|
BUILD_TOOL_SCHEMAS_VERSION=0.25.0
|
|
|
|
# List of versions that do not require or have a schema.
|
|
declare -a skip_versions=("1.0.0" "1.0.1" "1.1.0" "1.2.0" "1.3.0" "1.6.0")
|
|
|
|
# Verifies remote availability of a schema file.
|
|
#
|
|
# If the schema file is available for download, THEN we make sure it is exactly
|
|
# what is in the repository. If the file is not available for download,
|
|
# we pass this check. This is to allow releases to be checked in, where
|
|
# a new version is specified but hasn't propagated to the website yet.
|
|
#
|
|
# Args:
|
|
# 1 - version number
|
|
verify_remote_availability() {
|
|
local ver="$1"
|
|
echo -n "Ensure published schema file https://opentelemetry.io/schemas/$ver matches local copy... "
|
|
if curl --fail --no-progress-meter https://opentelemetry.io/schemas/$ver > verify$ver 2>/dev/null; then
|
|
diff verify$ver $file && echo "OK, matches" \
|
|
|| (echo "Incorrect!" && exit 3)
|
|
else
|
|
echo "Not found"
|
|
fi
|
|
rm verify$ver
|
|
}
|
|
|
|
# Verifies remote availability of a schema file in the current repository.
|
|
#
|
|
# Args:
|
|
# 1 - version number
|
|
verify_local_availability() {
|
|
local ver="$1"
|
|
|
|
file="$schemas_dir/$ver"
|
|
echo -n "Ensure schema file $file exists... "
|
|
|
|
# Check that the schema for the version exists.
|
|
if [ -f "$file" ]; then
|
|
echo "OK, exists."
|
|
else
|
|
echo "FAILED: $file does not exist. The schema file must exist because the version is declared in CHANGELOG.md."
|
|
exit 3
|
|
fi
|
|
}
|
|
|
|
root_dir=$PWD
|
|
schemas_dir=$root_dir/schemas
|
|
|
|
# Find all version sections in CHANGELOG that start with a number in 1..9 range.
|
|
grep -o -e '## v[1-9].*\s' $root_dir/CHANGELOG.md | grep -o '[1-9].*' | while read ver; do
|
|
if [[ " ${skip_versions[*]} " == *" $ver "* ]]; then
|
|
# Skip this version, it does not need a schema file.
|
|
continue
|
|
fi
|
|
|
|
verify_local_availability "$ver"
|
|
verify_remote_availability "$ver"
|
|
done
|
|
|
|
# Now check the content of all schema files in the ../schemas directory.
|
|
for file in $schemas_dir/*; do
|
|
# Filename is the version number.
|
|
ver=$(basename $file)
|
|
|
|
echo -n "Checking schema file $file for version $ver... "
|
|
|
|
# Check that the version is defined in the schema file.
|
|
if ! grep -q "\s$ver:" $file; then
|
|
echo "FAILED: $ver version definition is not found in $file"
|
|
exit 1
|
|
fi
|
|
|
|
# Check that the schema_url matches the version.
|
|
if ! grep -q "schema_url: https://opentelemetry.io/schemas/$ver" $file; then
|
|
echo "FAILED: schema_url is not found in $file"
|
|
exit 2
|
|
fi
|
|
|
|
PODMAN_USERNS=keep-id docker run \
|
|
-u $(id -u):$(id -g) \
|
|
-v $schemas_dir:/schemas \
|
|
docker.io/otel/build-tool-schemas:$BUILD_TOOL_SCHEMAS_VERSION --file /schemas/$ver --version=$ver
|
|
|
|
echo "OK"
|
|
done
|