feat: modernize application — source, platform artifacts, CI/CD (#3)
All checks were successful
SonarQube Analysis / Build, Test & Analyse (pull_request) Successful in 1m8s
Build and Push to ACR / Build and Push (push) Has been skipped
Build and Publish TechDocs / build-and-publish (push) Successful in 1m31s
Integration Test / Unit Tests + Container Smoke (workflow_dispatch) All checks passed

This commit was merged in pull request #3.
This commit is contained in:
2026-08-06 18:15:55 +00:00
parent 0ece576bf6
commit e6175ba9bd
12 changed files with 725 additions and 368 deletions

View File

@@ -1,55 +1,36 @@
apiVersion: score.dev/v1b1
metadata:
name: demo-principal-1
labels:
app: demo-principal-1
containers:
main:
demo-principal-1:
image: .
variables:
# The Watcher's OTel work lands in overlays/otel/, which only ArgoCD reads. On the
# orchestrator path nothing consumes that overlay, so without these variables the
# renovated app emits no telemetry at all and never appears in Grafana.
OTEL_SERVICE_NAME: "demo-principal-1"
OTEL_EXPORTER_OTLP_ENDPOINT: "http://otel-collector.monitoring.svc.cluster.local:4318"
OTEL_EXPORTER_OTLP_PROTOCOL: "http/protobuf"
OTEL_RESOURCE_ATTRIBUTES: "service.name=demo-principal-1"
OTEL_METRICS_EXPORTER: "otlp"
OTEL_TRACES_EXPORTER: "otlp"
OTEL_LOGS_EXPORTER: "none"
service:
ports:
web:
port: 80
targetPort: 8080
OTEL_SERVICE_NAME: demo-principal-1
OTEL_EXPORTER_OTLP_ENDPOINT: http://otel-collector.monitoring.svc.cluster.local:4318
OTEL_EXPORTER_OTLP_PROTOCOL: http/protobuf
OTEL_RESOURCE_ATTRIBUTES: service.name=demo-principal-1,app=demo-principal-1
OTEL_METRICS_EXPORTER: otlp
OTEL_TRACES_EXPORTER: otlp
OTEL_LOGS_EXPORTER: none
metadata:
annotations:
prometheus.io/path: /metrics
prometheus.io/port: '8080'
prometheus.io/scrape: 'true'
labels:
app: demo-principal-1
backstage.io/kubernetes-id: demo-principal-1
name: demo-principal-1
resources:
env:
type: environment
# Gives the renovated workload a public HTTPS URL. Without this the deploy still goes
# green and the pod still runs -- there is simply no Ingress, no certificate and no
# hostname, so the demo's payoff (curl the renovated app) has nothing to hit.
#
# hostname is hardcoded to the apps domain deliberately: it is the only domain the apps
# cluster serves, and both the wildcard A record (*.apps.dev) and the cert-manager
# ClusterIssuer are scoped to exactly it.
#
# service_port is the Score `service.ports.web.port` below (80), NOT the container port.
# An Ingress naming a Service or port that does not exist fails at neither plan nor
# apply -- it surfaces only as nginx answering 503.
#
# CAVEAT: modernization-factory's generate_score_yaml rewrites BOTH `port` and
# `targetPort` to the detected application port whenever that port is not 8080. An app
# on 3000 therefore ends up with a Service on 3000 and this Ingress pointing at a port
# that no longer exists. Apps already listening on 8080 (Spring PetClinic among them)
# skip that patch entirely and are unaffected.
ingress:
type: workload-ingress
params:
name: demo-principal-1
hostname: demo-principal-1.apps.dev.crucible.kyndemo.live
name: demo-principal-1
service_name: demo-principal-1
service_port: 80
service_port: 8080
type: workload-ingress
service:
ports:
http:
port: 8080
targetPort: 8080