prvng_kcl/version.k

108 lines
3.0 KiB
Plaintext
Raw Permalink Normal View History

2025-10-07 11:17:54 +01:00
"""
KCL Version Management Schema for Provisioning System
Provides type-safe version definitions with GitHub release integration
"""
schema Version:
"""Version information for a component with optional GitHub integration"""
# Version number (e.g., "1.31.0") or "latest"
current: str
# GitHub releases URL for automated checking
source?: str
# GitHub tags URL (alternative source)
tags?: str
# Official project website
site?: str
# Enable automatic latest version checking
check_latest?: bool = False
# Cache duration in seconds (24h default)
grace_period?: int = 86400
check:
len(current) > 0, "Version current field cannot be empty"
current == "latest" or current == "" or len(current.split(".")) >= 1, "Version must be semantic (x.y.z), 'latest', or empty"
schema TaskservVersion:
"""Complete taskserv version configuration with dependency tracking"""
# Taskserv name (must match directory)
name: str
# Primary version configuration
version: Version
# Other taskservs this component depends on
dependencies?: [str]
# Profile-specific version overrides
profiles?: {str:Version}
check:
len(name) > 0, "Taskserv name cannot be empty"
name == name.lower(), "Taskserv name must be lowercase"
schema VersionCache:
"""Cache structure for latest version lookups"""
# Resolved version string
version: str
# ISO timestamp of last fetch
fetched_at: str
# Source URL used for resolution
source: str
# Time-to-live in seconds
ttl: int = 86400
check:
len(version) > 0, "Cached version cannot be empty"
len(source) > 0, "Cache source URL cannot be empty"
# Package metadata for core provisioning KCL module
schema PackageMetadata:
"""Core package metadata for distribution"""
# Package name
name: str
# Package version
version: str
# API compatibility version
api_version: str
# Build timestamp
build_date: str
# Minimum KCL version required
kcl_min_version: str
# Maximum KCL version supported
kcl_max_version: str
# External dependencies
dependencies: {str:str}
# Feature flags
features: {str:bool}
# Available schema exports
schema_exports: [str]
check:
len(name) > 0, "Package name cannot be empty"
len(version) > 0, "Package version cannot be empty"
# Default package metadata
package_metadata: PackageMetadata = {
name = "provisioning"
version = "0.1.0"
api_version = "v1"
build_date = "2025-09-28"
kcl_min_version = "0.11.0"
kcl_max_version = "0.12.0"
dependencies = {}
features = {
server_management = True
cluster_orchestration = True
provider_abstraction = True
workflow_automation = True
batch_operations = True
}
schema_exports = [
"Settings"
"Server"
"Cluster"
"Provider"
"Workflow"
"BatchWorkflow"
"Version"
"PackageMetadata"
]
}