#!/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 # ./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") 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 "$@"