save progress
This commit is contained in:
131
.gitea/scripts/release/read-service-version.sh
Normal file
131
.gitea/scripts/release/read-service-version.sh
Normal file
@@ -0,0 +1,131 @@
|
||||
#!/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 "$@"
|
||||
Reference in New Issue
Block a user