107 lines
2.7 KiB
Bash
Executable File
107 lines
2.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
# =============================================================================
|
|
# validate-central-metadata.sh
|
|
#
|
|
# Validates Maven Central-required metadata before release publication.
|
|
# Uses Maven's evaluated effective model values (no XML parsing dependency).
|
|
#
|
|
# Usage:
|
|
# scripts/validate-central-metadata.sh
|
|
#
|
|
# =============================================================================
|
|
|
|
for tool in mvn; do
|
|
command -v "$tool" >/dev/null 2>&1 || {
|
|
echo "Error: required tool '$tool' not found" >&2
|
|
exit 1
|
|
}
|
|
done
|
|
|
|
declare -a ERRORS=()
|
|
|
|
add_error() {
|
|
local message="$1"
|
|
ERRORS+=("$message")
|
|
echo "::error::$message"
|
|
}
|
|
|
|
module_label() {
|
|
local module="$1"
|
|
if [[ "$module" == "ta4j-parent" ]]; then
|
|
echo "ta4j-parent (root)"
|
|
else
|
|
echo "$module"
|
|
fi
|
|
}
|
|
|
|
evaluate_expression() {
|
|
local module="$1"
|
|
local expression="$2"
|
|
local -a cmd=(mvn -q)
|
|
|
|
if [[ "$module" == "ta4j-parent" ]]; then
|
|
cmd+=(-N)
|
|
else
|
|
cmd+=(-pl "$module")
|
|
fi
|
|
|
|
cmd+=(help:evaluate "-Dexpression=${expression}" -DforceStdout)
|
|
|
|
local output
|
|
if ! output="$("${cmd[@]}" 2>&1)"; then
|
|
add_error "$(module_label "$module"): failed to evaluate '${expression}'"
|
|
return 1
|
|
fi
|
|
|
|
local value
|
|
value="$(printf '%s\n' "$output" | sed '/^[[:space:]]*$/d' | tail -n1 | tr -d '\r')"
|
|
printf '%s' "$value"
|
|
}
|
|
|
|
is_missing_value() {
|
|
local value="$1"
|
|
[[ -z "$value" || "$value" == "null object or invalid expression" ]]
|
|
}
|
|
|
|
check_required() {
|
|
local module="$1"
|
|
local expression="$2"
|
|
local field_name="$3"
|
|
|
|
local value
|
|
if ! value="$(evaluate_expression "$module" "$expression")"; then
|
|
return
|
|
fi
|
|
|
|
if is_missing_value "$value"; then
|
|
add_error "$(module_label "$module"): missing required '${field_name}' (${expression})"
|
|
fi
|
|
}
|
|
|
|
validate_module() {
|
|
local module="$1"
|
|
|
|
check_required "$module" "project.name" "name"
|
|
check_required "$module" "project.description" "description"
|
|
check_required "$module" "project.url" "url"
|
|
check_required "$module" "project.licenses[0].name" "licenses[0].name"
|
|
check_required "$module" "project.scm.connection" "scm.connection"
|
|
check_required "$module" "project.scm.url" "scm.url"
|
|
check_required "$module" "project.developers[0].id" "developers[0].id"
|
|
check_required "$module" "project.developers[0].name" "developers[0].name"
|
|
}
|
|
|
|
echo "Validating Maven Central metadata prerequisites..."
|
|
for module in ta4j-parent ta4j-core ta4j-examples; do
|
|
validate_module "$module"
|
|
done
|
|
|
|
if [[ ${#ERRORS[@]} -gt 0 ]]; then
|
|
echo "Maven Central metadata validation failed with ${#ERRORS[@]} issue(s)." >&2
|
|
exit 1
|
|
fi
|
|
|
|
echo "Maven Central metadata validation passed for ta4j-parent, ta4j-core, ta4j-examples."
|