132 lines
3.2 KiB
Bash
132 lines
3.2 KiB
Bash
#!/bin/bash
|
|
# read-service-version.sh - Read service version from centralized storage
|
|
#
|
|
# Sprint: CI/CD Enhancement - Per-Service Auto-Versioning
|
|
# This script reads service versions from src/Directory.Versions.props
|
|
#
|
|
# Usage:
|
|
# ./read-service-version.sh <service>
|
|
# ./read-service-version.sh authority
|
|
# ./read-service-version.sh --all
|
|
#
|
|
# Output:
|
|
# Prints the version string to stdout (e.g., "1.2.3")
|
|
# Exit code 0 on success, 1 on error
|
|
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
REPO_ROOT="$(cd "${SCRIPT_DIR}/../../.." && pwd)"
|
|
VERSIONS_FILE="${REPO_ROOT}/src/Directory.Versions.props"
|
|
|
|
# Service name to property suffix mapping
|
|
declare -A SERVICE_MAP=(
|
|
["authority"]="Authority"
|
|
["attestor"]="Attestor"
|
|
["concelier"]="Concelier"
|
|
["scanner"]="Scanner"
|
|
["policy"]="Policy"
|
|
["signer"]="Signer"
|
|
["excititor"]="Excititor"
|
|
["gateway"]="Gateway"
|
|
["scheduler"]="Scheduler"
|
|
["cli"]="Cli"
|
|
["orchestrator"]="Orchestrator"
|
|
["notify"]="Notify"
|
|
["sbomservice"]="SbomService"
|
|
["vexhub"]="VexHub"
|
|
["evidencelocker"]="EvidenceLocker"
|
|
)
|
|
|
|
usage() {
|
|
cat << EOF
|
|
Usage: $(basename "$0") <service|--all>
|
|
|
|
Read service version from centralized version storage.
|
|
|
|
Arguments:
|
|
service Service name (authority, attestor, concelier, scanner, etc.)
|
|
--all Print all service versions in JSON format
|
|
|
|
Services:
|
|
${!SERVICE_MAP[*]}
|
|
|
|
Examples:
|
|
$(basename "$0") authority # Output: 1.0.0
|
|
$(basename "$0") scanner # Output: 1.2.3
|
|
$(basename "$0") --all # Output: {"authority":"1.0.0",...}
|
|
EOF
|
|
}
|
|
|
|
read_version() {
|
|
local service="$1"
|
|
local property_suffix="${SERVICE_MAP[$service]:-}"
|
|
|
|
if [[ -z "$property_suffix" ]]; then
|
|
echo "Error: Unknown service '$service'" >&2
|
|
echo "Valid services: ${!SERVICE_MAP[*]}" >&2
|
|
return 1
|
|
fi
|
|
|
|
if [[ ! -f "$VERSIONS_FILE" ]]; then
|
|
echo "Error: Versions file not found: $VERSIONS_FILE" >&2
|
|
return 1
|
|
fi
|
|
|
|
local property_name="StellaOps${property_suffix}Version"
|
|
local version
|
|
|
|
version=$(grep -oP "<${property_name}>\K[0-9]+\.[0-9]+\.[0-9]+" "$VERSIONS_FILE" || true)
|
|
|
|
if [[ -z "$version" ]]; then
|
|
echo "Error: Property '$property_name' not found in $VERSIONS_FILE" >&2
|
|
return 1
|
|
fi
|
|
|
|
echo "$version"
|
|
}
|
|
|
|
read_all_versions() {
|
|
if [[ ! -f "$VERSIONS_FILE" ]]; then
|
|
echo "Error: Versions file not found: $VERSIONS_FILE" >&2
|
|
return 1
|
|
fi
|
|
|
|
echo -n "{"
|
|
local first=true
|
|
for service in "${!SERVICE_MAP[@]}"; do
|
|
local version
|
|
version=$(read_version "$service" 2>/dev/null || echo "")
|
|
if [[ -n "$version" ]]; then
|
|
if [[ "$first" != "true" ]]; then
|
|
echo -n ","
|
|
fi
|
|
echo -n "\"$service\":\"$version\""
|
|
first=false
|
|
fi
|
|
done
|
|
echo "}"
|
|
}
|
|
|
|
main() {
|
|
if [[ $# -eq 0 ]]; then
|
|
usage
|
|
exit 1
|
|
fi
|
|
|
|
case "$1" in
|
|
--help|-h)
|
|
usage
|
|
exit 0
|
|
;;
|
|
--all)
|
|
read_all_versions
|
|
;;
|
|
*)
|
|
read_version "$1"
|
|
;;
|
|
esac
|
|
}
|
|
|
|
main "$@"
|