From dadc25d8746037845dc16a0bae30d4028ad6a507 Mon Sep 17 00:00:00 2001 From: Umesh Date: Fri, 18 Sep 2026 22:34:27 +0530 Subject: [PATCH 1/3] docs: replace legacy umesh0492 references with Abeta / Abeta-dev --- CODE_OF_CONDUCT.md | 2 +- LICENSE | 2 +- README.md | 8 ++++---- SECURITY.md | 4 ++-- deploy/docker-compose/prometheus/alerts-test.yaml | 8 ++++---- deploy/docker-compose/prometheus/alerts.yml | 8 ++++---- deploy/kubernetes/alerts/k8s-node-alerts.yaml | 10 +++++----- deploy/kubernetes/alerts/rules/k8s-node-rules.yaml | 10 +++++----- deploy/kubernetes/alerts/rules/slo-rules.yaml | 6 +++--- deploy/kubernetes/alerts/slo-alerts.yaml | 6 +++--- .../kubernetes/alerts/tests/k8s-node-alerts-test.yaml | 10 +++++----- deploy/kubernetes/alerts/tests/slo-alerts-test.yaml | 6 +++--- deploy/kubernetes/argocd/app-of-apps.yaml | 2 +- .../kubernetes/argocd/apps/kube-prometheus-stack.yaml | 2 +- deploy/kubernetes/argocd/apps/loki-stack.yaml | 2 +- deploy/kubernetes/argocd/apps/otel-collector.yaml | 2 +- deploy/kubernetes/argocd/apps/secrets.yaml | 2 +- deploy/kubernetes/argocd/apps/tempo-stack.yaml | 2 +- .../terraform/modules/grafana_provisioning/alerts.tf | 4 ++-- docs/INTEGRATION_GUIDE.md | 2 +- docs/TERRAFORM_GUIDE.md | 2 +- 21 files changed, 50 insertions(+), 50 deletions(-) diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 47a70cd..8d464f2 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -60,7 +60,7 @@ representative at an online or offline event. Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at -[umesh0492@gmail.com](mailto:umesh0492@gmail.com). +[security@abeta.dev](mailto:security@abeta.dev). All complaints will be reviewed and investigated promptly and fairly. All community leaders are obligated to respect the privacy and security of the diff --git a/LICENSE b/LICENSE index 4933b5c..023be9d 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2026 Umesh Gupta (umesh0492) +Copyright (c) 2026 Abeta. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index e1a43b5..32eed61 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ > **Note on Repository History**: History reconstructed on 2026-09-11; see [CHANGELOG.md](CHANGELOG.md) for the real feature timeline. -[![CI](https://github.com/umesh0492/cloud-native-observability/actions/workflows/ci.yml/badge.svg)](https://github.com/umesh0492/cloud-native-observability/actions/workflows/ci.yml) +[![CI](https://github.com/Abeta-dev/cloud-native-observability/actions/workflows/ci.yml/badge.svg)](https://github.com/Abeta-dev/cloud-native-observability/actions/workflows/ci.yml) [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE) [![Kubernetes](https://img.shields.io/badge/Kubernetes-v1.28+-326ce5.svg?logo=kubernetes&logoColor=white)](https://kubernetes.io) [![Prometheus](https://img.shields.io/badge/Prometheus-v2.51+-e6522c.svg?logo=prometheus&logoColor=white)](https://prometheus.io) @@ -71,7 +71,7 @@ Experience the complete enterprise platform locally on your laptop with zero clo ```bash # Clone the repository -git clone https://github.com/umesh0492/cloud-native-observability.git +git clone https://github.com/Abeta-dev/cloud-native-observability.git cd cloud-native-observability # Spin up Prometheus, Loki, Tempo, OTel Collector, Grafana, Alertmanager, Demo App, and Traffic Generator @@ -268,7 +268,7 @@ Read the full [Terraform Observability Guide](docs/TERRAFORM_GUIDE.md) for archi ## ๐Ÿค Integration with `go-libs` -Microservices built on [`github.com/umesh0492/go-libs`](https://github.com/umesh0492/go-libs) connect natively: +Microservices built on [`github.com/Abeta-dev/go-libs`](https://github.com/Abeta-dev/go-libs) connect natively: 1. **Metrics**: Scraped automatically via `ServiceMonitor` on `/metrics`. 2. **APM & Traces**: Exported via `go-libs/apm` to OTel Collector on port `4317`. 3. **Logs**: Structured JSON with `trace_id` fields auto-correlated in Grafana. @@ -279,4 +279,4 @@ See the full [Integration Guide](docs/INTEGRATION_GUIDE.md) for copy-paste recip ## ๐Ÿ“„ License -MIT License. Copyright (c) 2026 Umesh Gupta ([umesh0492](https://github.com/umesh0492)). +MIT License. Copyright (c) 2026 Abeta. diff --git a/SECURITY.md b/SECURITY.md index cf6c630..bc8c651 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -20,13 +20,13 @@ Instead, report vulnerabilities through one of the following confidential channe ### 1. GitHub Private Vulnerability Reporting (Preferred) Submit a confidential advisory directly via GitHub: -- Navigate to the **Security** tab of `github.com/umesh0492/cloud-native-observability`. +- Navigate to the **Security** tab of `github.com/Abeta-dev/cloud-native-observability`. - Click **"Report a vulnerability"** to open a private advisory draft. - Include a description, affected component(s) (e.g. Helm values, ArgoCD sync-waves, Terraform modules, or Docker Compose), reproduction steps, and potential impact. ### 2. Direct Security Contact If you cannot use GitHub Security Advisories, email the maintainer directly: -- **Email**: [umesh0492@gmail.com](mailto:umesh0492@gmail.com) +- **Email**: [security@abeta.dev](mailto:security@abeta.dev) - **Subject**: `[SECURITY] cloud-native-observability Vulnerability Report: ` - Please include reproduction steps and deployment target details. diff --git a/deploy/docker-compose/prometheus/alerts-test.yaml b/deploy/docker-compose/prometheus/alerts-test.yaml index be9c03b..1045e88 100644 --- a/deploy/docker-compose/prometheus/alerts-test.yaml +++ b/deploy/docker-compose/prometheus/alerts-test.yaml @@ -27,7 +27,7 @@ tests: exp_annotations: summary: "Service instance cno-demo-app:8080 is down" description: "Service target cno-demo-app:8080 of job demo-app has been unreachable for more than 1 minute." - runbook_url: "https://github.com/umesh0492/cloud-native-observability/blob/main/docs/RUNBOOKS.md#servicedown" + runbook_url: "https://github.com/Abeta-dev/cloud-native-observability/blob/main/docs/RUNBOOKS.md#servicedown" # --------------------------------------------------------------------------- # Test 2: HighErrorRate Alert (>1% 5xx over 5m) @@ -52,7 +52,7 @@ tests: exp_annotations: summary: "High HTTP 5xx error rate detected" description: "HTTP 5xx error rate exceeds 1% (0.01) over the last 5 minutes on demo-app (demo-app:8080)." - runbook_url: "https://github.com/umesh0492/cloud-native-observability/blob/main/docs/RUNBOOKS.md#higherrorrate" + runbook_url: "https://github.com/Abeta-dev/cloud-native-observability/blob/main/docs/RUNBOOKS.md#higherrorrate" # --------------------------------------------------------------------------- # Test 3: HighLatencyP99 Alert (>1.0s P99) @@ -80,7 +80,7 @@ tests: exp_annotations: summary: "High P99 latency breach" description: "P99 HTTP request duration for service demo-app exceeds 1.0s over the last 5 minutes." - runbook_url: "https://github.com/umesh0492/cloud-native-observability/blob/main/docs/RUNBOOKS.md#highlatencyp99" + runbook_url: "https://github.com/Abeta-dev/cloud-native-observability/blob/main/docs/RUNBOOKS.md#highlatencyp99" # --------------------------------------------------------------------------- # Test 4: WorkerpoolQueueNearFull Alert (>85% capacity) @@ -104,4 +104,4 @@ tests: exp_annotations: summary: "Worker pool queue near full capacity" description: "Worker pool queue depth exceeds 85% of total capacity on instance demo-app:8080." - runbook_url: "https://github.com/umesh0492/cloud-native-observability/blob/main/docs/RUNBOOKS.md#workerpoolqueuenearfull" + runbook_url: "https://github.com/Abeta-dev/cloud-native-observability/blob/main/docs/RUNBOOKS.md#workerpoolqueuenearfull" diff --git a/deploy/docker-compose/prometheus/alerts.yml b/deploy/docker-compose/prometheus/alerts.yml index 8c33db0..4b96922 100644 --- a/deploy/docker-compose/prometheus/alerts.yml +++ b/deploy/docker-compose/prometheus/alerts.yml @@ -15,7 +15,7 @@ groups: annotations: summary: "Service instance {{ $labels.instance }} is down" description: "Service target {{ $labels.instance }} of job {{ $labels.job }} has been unreachable for more than 1 minute." - runbook_url: "https://github.com/umesh0492/cloud-native-observability/blob/main/docs/RUNBOOKS.md#servicedown" + runbook_url: "https://github.com/Abeta-dev/cloud-native-observability/blob/main/docs/RUNBOOKS.md#servicedown" # ------------------------------------------------------------------------- # 2. Errors: High Error Rate (> 1% 5xx over 5 minutes) @@ -28,7 +28,7 @@ groups: annotations: summary: "High HTTP 5xx error rate detected" description: "HTTP 5xx error rate exceeds 1% (0.01) over the last 5 minutes on {{ $labels.service }} ({{ $labels.instance }})." - runbook_url: "https://github.com/umesh0492/cloud-native-observability/blob/main/docs/RUNBOOKS.md#higherrorrate" + runbook_url: "https://github.com/Abeta-dev/cloud-native-observability/blob/main/docs/RUNBOOKS.md#higherrorrate" # ------------------------------------------------------------------------- # 3. Latency: High P99 Duration (> 1.0s over 5 minutes) @@ -41,7 +41,7 @@ groups: annotations: summary: "High P99 latency breach" description: "P99 HTTP request duration for service {{ $labels.service }} exceeds 1.0s over the last 5 minutes." - runbook_url: "https://github.com/umesh0492/cloud-native-observability/blob/main/docs/RUNBOOKS.md#highlatencyp99" + runbook_url: "https://github.com/Abeta-dev/cloud-native-observability/blob/main/docs/RUNBOOKS.md#highlatencyp99" # ------------------------------------------------------------------------- # 4. Saturation: Worker Pool Queue Near Full (> 85% capacity) @@ -54,4 +54,4 @@ groups: annotations: summary: "Worker pool queue near full capacity" description: "Worker pool queue depth exceeds 85% of total capacity on instance {{ $labels.instance }}." - runbook_url: "https://github.com/umesh0492/cloud-native-observability/blob/main/docs/RUNBOOKS.md#workerpoolqueuenearfull" + runbook_url: "https://github.com/Abeta-dev/cloud-native-observability/blob/main/docs/RUNBOOKS.md#workerpoolqueuenearfull" diff --git a/deploy/kubernetes/alerts/k8s-node-alerts.yaml b/deploy/kubernetes/alerts/k8s-node-alerts.yaml index 0cd1e4e..13edbe4 100644 --- a/deploy/kubernetes/alerts/k8s-node-alerts.yaml +++ b/deploy/kubernetes/alerts/k8s-node-alerts.yaml @@ -18,7 +18,7 @@ spec: annotations: summary: "Kubernetes node is not ready" description: "Node {{ $labels.node }} has been unready for more than 5 minutes." - runbook_url: "https://github.com/umesh0492/cloud-native-observability/blob/main/docs/RUNBOOKS.md#kubenodenotready" + runbook_url: "https://github.com/Abeta-dev/cloud-native-observability/blob/main/docs/RUNBOOKS.md#kubenodenotready" - alert: KubeNodeMemoryPressure expr: kube_node_status_condition{condition="MemoryPressure",status="true"} == 1 @@ -28,7 +28,7 @@ spec: annotations: summary: "Node is experiencing memory pressure" description: "Node {{ $labels.node }} has memory pressure condition active." - runbook_url: "https://github.com/umesh0492/cloud-native-observability/blob/main/docs/RUNBOOKS.md#kubenodememorypressure" + runbook_url: "https://github.com/Abeta-dev/cloud-native-observability/blob/main/docs/RUNBOOKS.md#kubenodememorypressure" - alert: KubeNodeDiskPressure expr: kube_node_status_condition{condition="DiskPressure",status="true"} == 1 @@ -38,7 +38,7 @@ spec: annotations: summary: "Node is experiencing disk pressure" description: "Node {{ $labels.node }} has low available disk space (<10% free)." - runbook_url: "https://github.com/umesh0492/cloud-native-observability/blob/main/docs/RUNBOOKS.md#kubenodediskpressure" + runbook_url: "https://github.com/Abeta-dev/cloud-native-observability/blob/main/docs/RUNBOOKS.md#kubenodediskpressure" - alert: KubePodCrashLooping expr: rate(kube_pod_container_status_restarts_total[5m]) * 60 > 2 @@ -48,7 +48,7 @@ spec: annotations: summary: "Pod is CrashLooping" description: "Pod {{ $labels.namespace }}/{{ $labels.pod }} container {{ $labels.container }} is restarting frequently (>2 restarts/min)." - runbook_url: "https://github.com/umesh0492/cloud-native-observability/blob/main/docs/RUNBOOKS.md#kubepodcrashlooping" + runbook_url: "https://github.com/Abeta-dev/cloud-native-observability/blob/main/docs/RUNBOOKS.md#kubepodcrashlooping" - alert: KubeDeploymentReplicasMismatch expr: kube_deployment_status_replicas_available != kube_deployment_spec_replicas @@ -58,4 +58,4 @@ spec: annotations: summary: "Deployment available replicas mismatch" description: "Deployment {{ $labels.namespace }}/{{ $labels.deployment }} has fewer replicas available than desired for >10 minutes." - runbook_url: "https://github.com/umesh0492/cloud-native-observability/blob/main/docs/RUNBOOKS.md#kubedeploymentreplicasmismatch" + runbook_url: "https://github.com/Abeta-dev/cloud-native-observability/blob/main/docs/RUNBOOKS.md#kubedeploymentreplicasmismatch" diff --git a/deploy/kubernetes/alerts/rules/k8s-node-rules.yaml b/deploy/kubernetes/alerts/rules/k8s-node-rules.yaml index 9621712..791f027 100644 --- a/deploy/kubernetes/alerts/rules/k8s-node-rules.yaml +++ b/deploy/kubernetes/alerts/rules/k8s-node-rules.yaml @@ -9,7 +9,7 @@ groups: annotations: summary: "Kubernetes node is not ready" description: "Node {{ $labels.node }} has been unready for more than 5 minutes." - runbook_url: "https://github.com/umesh0492/cloud-native-observability/blob/main/docs/RUNBOOKS.md#kubenodenotready" + runbook_url: "https://github.com/Abeta-dev/cloud-native-observability/blob/main/docs/RUNBOOKS.md#kubenodenotready" - alert: KubeNodeMemoryPressure expr: kube_node_status_condition{condition="MemoryPressure",status="true"} == 1 @@ -19,7 +19,7 @@ groups: annotations: summary: "Node is experiencing memory pressure" description: "Node {{ $labels.node }} has memory pressure condition active." - runbook_url: "https://github.com/umesh0492/cloud-native-observability/blob/main/docs/RUNBOOKS.md#kubenodememorypressure" + runbook_url: "https://github.com/Abeta-dev/cloud-native-observability/blob/main/docs/RUNBOOKS.md#kubenodememorypressure" - alert: KubeNodeDiskPressure expr: kube_node_status_condition{condition="DiskPressure",status="true"} == 1 @@ -29,7 +29,7 @@ groups: annotations: summary: "Node is experiencing disk pressure" description: "Node {{ $labels.node }} has low available disk space (<10% free)." - runbook_url: "https://github.com/umesh0492/cloud-native-observability/blob/main/docs/RUNBOOKS.md#kubenodediskpressure" + runbook_url: "https://github.com/Abeta-dev/cloud-native-observability/blob/main/docs/RUNBOOKS.md#kubenodediskpressure" - alert: KubePodCrashLooping expr: rate(kube_pod_container_status_restarts_total[5m]) * 60 > 2 @@ -39,7 +39,7 @@ groups: annotations: summary: "Pod is CrashLooping" description: "Pod {{ $labels.namespace }}/{{ $labels.pod }} container {{ $labels.container }} is restarting frequently (>2 restarts/min)." - runbook_url: "https://github.com/umesh0492/cloud-native-observability/blob/main/docs/RUNBOOKS.md#kubepodcrashlooping" + runbook_url: "https://github.com/Abeta-dev/cloud-native-observability/blob/main/docs/RUNBOOKS.md#kubepodcrashlooping" - alert: KubeDeploymentReplicasMismatch expr: kube_deployment_status_replicas_available != kube_deployment_spec_replicas @@ -49,4 +49,4 @@ groups: annotations: summary: "Deployment available replicas mismatch" description: "Deployment {{ $labels.namespace }}/{{ $labels.deployment }} has fewer replicas available than desired for >10 minutes." - runbook_url: "https://github.com/umesh0492/cloud-native-observability/blob/main/docs/RUNBOOKS.md#kubedeploymentreplicasmismatch" + runbook_url: "https://github.com/Abeta-dev/cloud-native-observability/blob/main/docs/RUNBOOKS.md#kubedeploymentreplicasmismatch" diff --git a/deploy/kubernetes/alerts/rules/slo-rules.yaml b/deploy/kubernetes/alerts/rules/slo-rules.yaml index 755467d..df21058 100644 --- a/deploy/kubernetes/alerts/rules/slo-rules.yaml +++ b/deploy/kubernetes/alerts/rules/slo-rules.yaml @@ -37,7 +37,7 @@ groups: annotations: summary: "Critical 1h Error Budget Burn Rate (14.4x)" description: "Service is burning error budget at 14.4x over 1 hour and 5 minutes (2% of monthly budget consumed in 1 hour). Requires immediate intervention." - runbook_url: "https://github.com/umesh0492/cloud-native-observability/blob/main/docs/RUNBOOKS.md#serviceerrorbudgetburnratehigh1h" + runbook_url: "https://github.com/Abeta-dev/cloud-native-observability/blob/main/docs/RUNBOOKS.md#serviceerrorbudgetburnratehigh1h" # Window 2: 6x burn rate over 6h AND 30m (Burns 5% budget in 6h) -> Page - alert: ServiceErrorBudgetBurnRateHigh6h @@ -56,7 +56,7 @@ groups: annotations: summary: "High 6h Error Budget Burn Rate (6x)" description: "Service is burning error budget at 6x over 6 hours (5% of monthly budget consumed in 6 hours)." - runbook_url: "https://github.com/umesh0492/cloud-native-observability/blob/main/docs/RUNBOOKS.md#serviceerrorbudgetburnratehigh6h" + runbook_url: "https://github.com/Abeta-dev/cloud-native-observability/blob/main/docs/RUNBOOKS.md#serviceerrorbudgetburnratehigh6h" # Window 3: 1x burn rate over 3d AND 6h (Burns 10% budget in 3d) - alert: ServiceErrorBudgetBurnRateSlow3d @@ -75,4 +75,4 @@ groups: annotations: summary: "Slow 3-day Error Budget Burn Rate (1x)" description: "Service is steadily consuming error budget over a 3-day window and 6-hour window. Create tracking ticket for service owners." - runbook_url: "https://github.com/umesh0492/cloud-native-observability/blob/main/docs/RUNBOOKS.md#serviceerrorbudgetburnrateslow3d" + runbook_url: "https://github.com/Abeta-dev/cloud-native-observability/blob/main/docs/RUNBOOKS.md#serviceerrorbudgetburnrateslow3d" diff --git a/deploy/kubernetes/alerts/slo-alerts.yaml b/deploy/kubernetes/alerts/slo-alerts.yaml index 40d20c2..375c33d 100644 --- a/deploy/kubernetes/alerts/slo-alerts.yaml +++ b/deploy/kubernetes/alerts/slo-alerts.yaml @@ -46,7 +46,7 @@ spec: annotations: summary: "Critical 1h Error Budget Burn Rate (14.4x)" description: "Service is burning error budget at 14.4x over 1 hour and 5 minutes (2% of monthly budget consumed in 1 hour). Requires immediate intervention." - runbook_url: "https://github.com/umesh0492/cloud-native-observability/blob/main/docs/RUNBOOKS.md#serviceerrorbudgetburnratehigh1h" + runbook_url: "https://github.com/Abeta-dev/cloud-native-observability/blob/main/docs/RUNBOOKS.md#serviceerrorbudgetburnratehigh1h" # Window 2: 6x burn rate over 6h AND 30m (Burns 5% budget in 6h) -> Page - alert: ServiceErrorBudgetBurnRateHigh6h @@ -65,7 +65,7 @@ spec: annotations: summary: "High 6h Error Budget Burn Rate (6x)" description: "Service is burning error budget at 6x over 6 hours (5% of monthly budget consumed in 6 hours)." - runbook_url: "https://github.com/umesh0492/cloud-native-observability/blob/main/docs/RUNBOOKS.md#serviceerrorbudgetburnratehigh6h" + runbook_url: "https://github.com/Abeta-dev/cloud-native-observability/blob/main/docs/RUNBOOKS.md#serviceerrorbudgetburnratehigh6h" # Window 3: 1x burn rate over 3d AND 6h (Burns 10% budget in 3d) - alert: ServiceErrorBudgetBurnRateSlow3d @@ -84,4 +84,4 @@ spec: annotations: summary: "Slow 3-day Error Budget Burn Rate (1x)" description: "Service is steadily consuming error budget over a 3-day window and 6-hour window. Create tracking ticket for service owners." - runbook_url: "https://github.com/umesh0492/cloud-native-observability/blob/main/docs/RUNBOOKS.md#serviceerrorbudgetburnrateslow3d" + runbook_url: "https://github.com/Abeta-dev/cloud-native-observability/blob/main/docs/RUNBOOKS.md#serviceerrorbudgetburnrateslow3d" diff --git a/deploy/kubernetes/alerts/tests/k8s-node-alerts-test.yaml b/deploy/kubernetes/alerts/tests/k8s-node-alerts-test.yaml index 0d56160..da4f7e2 100644 --- a/deploy/kubernetes/alerts/tests/k8s-node-alerts-test.yaml +++ b/deploy/kubernetes/alerts/tests/k8s-node-alerts-test.yaml @@ -28,7 +28,7 @@ tests: exp_annotations: summary: "Kubernetes node is not ready" description: "Node node-unready has been unready for more than 5 minutes." - runbook_url: "https://github.com/umesh0492/cloud-native-observability/blob/main/docs/RUNBOOKS.md#kubenodenotready" + runbook_url: "https://github.com/Abeta-dev/cloud-native-observability/blob/main/docs/RUNBOOKS.md#kubenodenotready" # --------------------------------------------------------------------------- # Test 2: KubeNodeMemoryPressure Alert @@ -54,7 +54,7 @@ tests: exp_annotations: summary: "Node is experiencing memory pressure" description: "Node node-mem-pressure has memory pressure condition active." - runbook_url: "https://github.com/umesh0492/cloud-native-observability/blob/main/docs/RUNBOOKS.md#kubenodememorypressure" + runbook_url: "https://github.com/Abeta-dev/cloud-native-observability/blob/main/docs/RUNBOOKS.md#kubenodememorypressure" # --------------------------------------------------------------------------- # Test 3: KubeNodeDiskPressure Alert @@ -78,7 +78,7 @@ tests: exp_annotations: summary: "Node is experiencing disk pressure" description: "Node node-disk-pressure has low available disk space (<10% free)." - runbook_url: "https://github.com/umesh0492/cloud-native-observability/blob/main/docs/RUNBOOKS.md#kubenodediskpressure" + runbook_url: "https://github.com/Abeta-dev/cloud-native-observability/blob/main/docs/RUNBOOKS.md#kubenodediskpressure" # --------------------------------------------------------------------------- # Test 4: KubePodCrashLooping Alert @@ -104,7 +104,7 @@ tests: exp_annotations: summary: "Pod is CrashLooping" description: "Pod prod/demo-app-crash container demo-app is restarting frequently (>2 restarts/min)." - runbook_url: "https://github.com/umesh0492/cloud-native-observability/blob/main/docs/RUNBOOKS.md#kubepodcrashlooping" + runbook_url: "https://github.com/Abeta-dev/cloud-native-observability/blob/main/docs/RUNBOOKS.md#kubepodcrashlooping" # --------------------------------------------------------------------------- # Test 5: KubeDeploymentReplicasMismatch Alert @@ -133,4 +133,4 @@ tests: exp_annotations: summary: "Deployment available replicas mismatch" description: "Deployment prod/api-mismatch has fewer replicas available than desired for >10 minutes." - runbook_url: "https://github.com/umesh0492/cloud-native-observability/blob/main/docs/RUNBOOKS.md#kubedeploymentreplicasmismatch" + runbook_url: "https://github.com/Abeta-dev/cloud-native-observability/blob/main/docs/RUNBOOKS.md#kubedeploymentreplicasmismatch" diff --git a/deploy/kubernetes/alerts/tests/slo-alerts-test.yaml b/deploy/kubernetes/alerts/tests/slo-alerts-test.yaml index a332fd9..7cbe76b 100644 --- a/deploy/kubernetes/alerts/tests/slo-alerts-test.yaml +++ b/deploy/kubernetes/alerts/tests/slo-alerts-test.yaml @@ -32,7 +32,7 @@ tests: exp_annotations: summary: "Critical 1h Error Budget Burn Rate (14.4x)" description: "Service is burning error budget at 14.4x over 1 hour and 5 minutes (2% of monthly budget consumed in 1 hour). Requires immediate intervention." - runbook_url: "https://github.com/umesh0492/cloud-native-observability/blob/main/docs/RUNBOOKS.md#serviceerrorbudgetburnratehigh1h" + runbook_url: "https://github.com/Abeta-dev/cloud-native-observability/blob/main/docs/RUNBOOKS.md#serviceerrorbudgetburnratehigh1h" # --------------------------------------------------------------------------- # Test 2: ServiceErrorBudgetBurnRateHigh6h (6x burn rate over 6h and 30m) @@ -62,7 +62,7 @@ tests: exp_annotations: summary: "High 6h Error Budget Burn Rate (6x)" description: "Service is burning error budget at 6x over 6 hours (5% of monthly budget consumed in 6 hours)." - runbook_url: "https://github.com/umesh0492/cloud-native-observability/blob/main/docs/RUNBOOKS.md#serviceerrorbudgetburnratehigh6h" + runbook_url: "https://github.com/Abeta-dev/cloud-native-observability/blob/main/docs/RUNBOOKS.md#serviceerrorbudgetburnratehigh6h" # --------------------------------------------------------------------------- # Test 3: ServiceErrorBudgetBurnRateSlow3d (1x burn rate over 3d and 6h) @@ -92,4 +92,4 @@ tests: exp_annotations: summary: "Slow 3-day Error Budget Burn Rate (1x)" description: "Service is steadily consuming error budget over a 3-day window and 6-hour window. Create tracking ticket for service owners." - runbook_url: "https://github.com/umesh0492/cloud-native-observability/blob/main/docs/RUNBOOKS.md#serviceerrorbudgetburnrateslow3d" + runbook_url: "https://github.com/Abeta-dev/cloud-native-observability/blob/main/docs/RUNBOOKS.md#serviceerrorbudgetburnrateslow3d" diff --git a/deploy/kubernetes/argocd/app-of-apps.yaml b/deploy/kubernetes/argocd/app-of-apps.yaml index 647b79f..fcf8c48 100644 --- a/deploy/kubernetes/argocd/app-of-apps.yaml +++ b/deploy/kubernetes/argocd/app-of-apps.yaml @@ -8,7 +8,7 @@ metadata: spec: project: default source: - repoURL: https://github.com/umesh0492/cloud-native-observability.git + repoURL: https://github.com/Abeta-dev/cloud-native-observability.git targetRevision: v0.2.2 path: deploy/kubernetes/argocd/apps destination: diff --git a/deploy/kubernetes/argocd/apps/kube-prometheus-stack.yaml b/deploy/kubernetes/argocd/apps/kube-prometheus-stack.yaml index 323a484..4d71242 100644 --- a/deploy/kubernetes/argocd/apps/kube-prometheus-stack.yaml +++ b/deploy/kubernetes/argocd/apps/kube-prometheus-stack.yaml @@ -16,7 +16,7 @@ spec: targetRevision: 58.7.1 helm: valueFiles: - - https://raw.githubusercontent.com/umesh0492/cloud-native-observability/v0.2.2/deploy/kubernetes/helm/kube-prometheus-stack/values-base.yaml + - https://raw.githubusercontent.com/Abeta-dev/cloud-native-observability/v0.2.2/deploy/kubernetes/helm/kube-prometheus-stack/values-base.yaml destination: server: https://kubernetes.default.svc namespace: monitoring diff --git a/deploy/kubernetes/argocd/apps/loki-stack.yaml b/deploy/kubernetes/argocd/apps/loki-stack.yaml index 8d2a7f4..a9efb59 100644 --- a/deploy/kubernetes/argocd/apps/loki-stack.yaml +++ b/deploy/kubernetes/argocd/apps/loki-stack.yaml @@ -16,7 +16,7 @@ spec: targetRevision: 5.43.3 helm: valueFiles: - - https://raw.githubusercontent.com/umesh0492/cloud-native-observability/v0.2.2/deploy/kubernetes/helm/loki/values.yaml + - https://raw.githubusercontent.com/Abeta-dev/cloud-native-observability/v0.2.2/deploy/kubernetes/helm/loki/values.yaml destination: server: https://kubernetes.default.svc namespace: logging diff --git a/deploy/kubernetes/argocd/apps/otel-collector.yaml b/deploy/kubernetes/argocd/apps/otel-collector.yaml index 90bf051..38baf7d 100644 --- a/deploy/kubernetes/argocd/apps/otel-collector.yaml +++ b/deploy/kubernetes/argocd/apps/otel-collector.yaml @@ -16,7 +16,7 @@ spec: targetRevision: 0.88.0 helm: valueFiles: - - https://raw.githubusercontent.com/umesh0492/cloud-native-observability/v0.2.2/deploy/kubernetes/helm/otel-collector/values.yaml + - https://raw.githubusercontent.com/Abeta-dev/cloud-native-observability/v0.2.2/deploy/kubernetes/helm/otel-collector/values.yaml destination: server: https://kubernetes.default.svc namespace: opentelemetry diff --git a/deploy/kubernetes/argocd/apps/secrets.yaml b/deploy/kubernetes/argocd/apps/secrets.yaml index 03922e4..8ddcea0 100644 --- a/deploy/kubernetes/argocd/apps/secrets.yaml +++ b/deploy/kubernetes/argocd/apps/secrets.yaml @@ -11,7 +11,7 @@ metadata: spec: project: default source: - repoURL: https://github.com/umesh0492/cloud-native-observability.git + repoURL: https://github.com/Abeta-dev/cloud-native-observability.git targetRevision: v0.2.2 path: deploy/kubernetes/secrets destination: diff --git a/deploy/kubernetes/argocd/apps/tempo-stack.yaml b/deploy/kubernetes/argocd/apps/tempo-stack.yaml index aab6581..ab6c109 100644 --- a/deploy/kubernetes/argocd/apps/tempo-stack.yaml +++ b/deploy/kubernetes/argocd/apps/tempo-stack.yaml @@ -16,7 +16,7 @@ spec: targetRevision: 1.9.1 helm: valueFiles: - - https://raw.githubusercontent.com/umesh0492/cloud-native-observability/v0.2.2/deploy/kubernetes/helm/tempo/values.yaml + - https://raw.githubusercontent.com/Abeta-dev/cloud-native-observability/v0.2.2/deploy/kubernetes/helm/tempo/values.yaml destination: server: https://kubernetes.default.svc namespace: tracing diff --git a/deploy/terraform/modules/grafana_provisioning/alerts.tf b/deploy/terraform/modules/grafana_provisioning/alerts.tf index 0eb2e22..f3daad9 100644 --- a/deploy/terraform/modules/grafana_provisioning/alerts.tf +++ b/deploy/terraform/modules/grafana_provisioning/alerts.tf @@ -16,7 +16,7 @@ resource "grafana_rule_group" "golden_signal_rules" { annotations = { summary = "Microservice HTTP 5xx error rate exceeded 5%" description = "Microservice HTTP 5xx error rate is currently {{ $values.B.Value }}% which exceeds the 5% SLO threshold over 5m." - runbook_url = "https://github.com/umesh0492/cloud-native-observability/blob/main/docs/RUNBOOKS.md#higherrorrate" + runbook_url = "https://github.com/Abeta-dev/cloud-native-observability/blob/main/docs/RUNBOOKS.md#higherrorrate" } labels = { @@ -92,7 +92,7 @@ resource "grafana_rule_group" "golden_signal_rules" { annotations = { summary = "Upstream dependency Circuit Breaker tripped to OPEN state" description = "Circuit breaker has opened to protect downstream services from cascading failure." - runbook_url = "https://github.com/umesh0492/cloud-native-observability/blob/main/docs/RUNBOOKS.md#circuit-breaker-open" + runbook_url = "https://github.com/Abeta-dev/cloud-native-observability/blob/main/docs/RUNBOOKS.md#circuit-breaker-open" } labels = { diff --git a/docs/INTEGRATION_GUIDE.md b/docs/INTEGRATION_GUIDE.md index b012b33..b98a3d2 100644 --- a/docs/INTEGRATION_GUIDE.md +++ b/docs/INTEGRATION_GUIDE.md @@ -1,6 +1,6 @@ # Downstream Microservice Integration Guide -This guide explains how to connect any microservice (specifically Go services using `github.com/umesh0492/go-libs`) to this centralized Cloud-Native Observability platform. +This guide explains how to connect any microservice (specifically Go services using Abeta go-libs (github.com/umesh0492/go-libs)) to this centralized Cloud-Native Observability platform. --- diff --git a/docs/TERRAFORM_GUIDE.md b/docs/TERRAFORM_GUIDE.md index 6b7f4a2..895e90e 100644 --- a/docs/TERRAFORM_GUIDE.md +++ b/docs/TERRAFORM_GUIDE.md @@ -98,7 +98,7 @@ resource "grafana_rule_group" "golden_signal_rules" { annotations = { summary = "Microservice HTTP 5xx error rate exceeded 5%" description = "Microservice HTTP 5xx error rate is currently {{ $values.B.Value }}% which exceeds the 5% SLO threshold over 5m." - runbook_url = "https://github.com/umesh0492/cloud-native-observability/blob/main/docs/RUNBOOKS.md#higherrorrate" + runbook_url = "https://github.com/Abeta-dev/cloud-native-observability/blob/main/docs/RUNBOOKS.md#higherrorrate" } labels = { From c74de5214b96450b9855efbee971c7e4b29d7ccc Mon Sep 17 00:00:00 2001 From: Umesh Date: Sat, 19 Sep 2026 01:52:27 +0530 Subject: [PATCH 2/3] fix(ci): resolve TFLint rule violations and gate releases on CI - Add versions.tf with required_version and provider version constraints to modules/grafana_provisioning, modules/kubernetes_stack, and modules/storage - Update .tflint.hcl to use call_module_type = "local" instead of deprecated module = true - Gate releases on CI in .github/workflows/release.yml to verify commit check-runs and quality gates prior to publishing - Add check_tag_readiness.sh and Makefile targets lint-terraform and check-release-readiness --- .github/workflows/ci.yml | 2 + .github/workflows/release.yml | 140 +++++++++++++++++- Makefile | 12 ++ deploy/terraform/.tflint.hcl | 4 +- .../modules/grafana_provisioning/main.tf | 9 -- .../modules/grafana_provisioning/versions.tf | 10 ++ .../modules/kubernetes_stack/versions.tf | 18 +++ deploy/terraform/modules/storage/versions.tf | 14 ++ scripts/check_tag_readiness.sh | 70 +++++++++ 9 files changed, 264 insertions(+), 15 deletions(-) create mode 100644 deploy/terraform/modules/grafana_provisioning/versions.tf create mode 100644 deploy/terraform/modules/kubernetes_stack/versions.tf create mode 100644 deploy/terraform/modules/storage/versions.tf create mode 100755 scripts/check_tag_readiness.sh diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1cea3d7..dff9b26 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -3,6 +3,8 @@ name: Observability Platform CI on: push: branches: [main] + tags: + - "v*" pull_request: branches: [main] diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index fdc7c82..9ba0013 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -4,21 +4,153 @@ on: push: tags: - 'v*' + workflow_dispatch: + inputs: + tag: + description: 'Existing immutable SemVer tag to verify and release (for example v0.2.2)' + required: true + type: string permissions: read-all +env: + FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true + jobs: - release: + gate-ci-and-verify: + name: Gate Release on CI & Quality Verification + runs-on: ubuntu-latest + steps: + - name: Resolve release tag + id: release + env: + INPUT_TAG: ${{ inputs.tag }} + run: | + TAG="${INPUT_TAG:-${GITHUB_REF_NAME}}" + if ! [[ "$TAG" =~ ^v(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)(-[0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*)?$ ]]; then + echo "โŒ Release tag must use vMAJOR.MINOR.PATCH[-PRERELEASE]: $TAG" >&2 + exit 1 + fi + echo "tag=$TAG" >> "$GITHUB_OUTPUT" + + - name: Checkout immutable release tag + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + ref: ${{ steps.release.outputs.tag }} + fetch-depth: 0 + + - name: Verify CI Check-Runs on Commit + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + echo "Verifying that commit ${{ github.sha }} has no failed CI check-runs..." + # Query GitHub API check-runs for this commit + FAILED_CHECKS=$(gh api "repos/${{ github.repository }}/commits/${{ github.sha }}/check-runs" \ + --jq '.check_runs[] | select(.conclusion == "failure" and (.name | test("release|Release|gate-ci") | not)) | .name' || true) + if [ -n "$FAILED_CHECKS" ]; then + echo "โŒ Cannot release: One or more CI check-runs failed on commit ${{ github.sha }}:" >&2 + echo "$FAILED_CHECKS" >&2 + exit 1 + fi + echo "โœ… No failed CI check-runs found on commit ${{ github.sha }}." + + - name: Verify Version & Documentation Synchronization + env: + GIT_TAG: ${{ steps.release.outputs.tag }} + run: ./scripts/check_version.sh + + - name: Install promtool and amtool + run: | + PROM_VERSION="2.51.0" + curl -fsSL "https://github.com/prometheus/prometheus/releases/download/v${PROM_VERSION}/prometheus-${PROM_VERSION}.linux-amd64.tar.gz" | tar -xz -C /tmp + echo "/tmp/prometheus-${PROM_VERSION}.linux-amd64" >> $GITHUB_PATH + + AM_VERSION="0.27.0" + curl -fsSL "https://github.com/prometheus/alertmanager/releases/download/v${AM_VERSION}/alertmanager-${AM_VERSION}.linux-amd64.tar.gz" | tar -xz -C /tmp + echo "/tmp/alertmanager-${AM_VERSION}.linux-amd64" >> $GITHUB_PATH + + - name: Validate Prometheus Alert Rules & Run Promtool Unit Tests + run: | + echo "Validating alert rules and running test suites..." + bash ./scripts/test_alerts.sh + + - name: Validate Alertmanager Configuration + run: | + echo "Validating Alertmanager configuration..." + amtool check-config deploy/kubernetes/alerts/alertmanager.yaml + + - name: Setup Terraform + uses: hashicorp/setup-terraform@b9cd54a3c349d3f38e8881555d616ced269862dd # v3.1.2 + with: + terraform_version: 1.7.5 + + - name: Setup TFLint + uses: terraform-linters/setup-tflint@90f302c255ef959cbfb4bd10581afecdb7ece3e6 # v4.1.1 + with: + tflint_version: v0.51.1 + + - name: Validate Terraform Formatting, Syntax and TFLint + run: | + echo "Checking Terraform formatting..." + terraform -chdir=deploy/terraform fmt -check -recursive + echo "Validating Terraform modules and syntax..." + terraform -chdir=deploy/terraform init -backend=false + terraform -chdir=deploy/terraform validate + echo "Running TFLint..." + cd deploy/terraform + tflint --init + tflint --recursive + + - name: Run End-to-End Telemetry Smoke Test + run: bash ./scripts/smoke_test.sh + + publish: + name: Publish Release + needs: [gate-ci-and-verify] runs-on: ubuntu-latest permissions: contents: write steps: + - name: Resolve release tag + id: release + env: + INPUT_TAG: ${{ inputs.tag }} + run: | + TAG="${INPUT_TAG:-${GITHUB_REF_NAME}}" + echo "tag=$TAG" >> "$GITHUB_OUTPUT" + - name: Checkout repository uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + ref: ${{ steps.release.outputs.tag }} + + - name: Check release status + id: release-status + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + TAG: ${{ steps.release.outputs.tag }} + run: | + if gh release view "$TAG" >/dev/null 2>&1; then + echo "exists=true" >> "$GITHUB_OUTPUT" + echo "Release $TAG already exists." + else + echo "exists=false" >> "$GITHUB_OUTPUT" + fi - - name: Create GitHub Release + - name: Create GitHub release + if: steps.release-status.outputs.exists == 'false' env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - TAG: ${{ github.ref_name }} + TAG: ${{ steps.release.outputs.tag }} run: | - gh release create "$TAG" --notes-file <(awk '/^## \[/{n++} n==1' CHANGELOG.md) + NOTES=$(mktemp) + awk -v ver="${TAG#v}" ' + index($0, "## [" ver "]") == 1 { found=1; print; next } + found && /^## \[/ { exit } + found { print } + ' CHANGELOG.md > "$NOTES" + test -s "$NOTES" || { + echo "No CHANGELOG section found for $TAG" >&2 + exit 1 + } + gh release create "$TAG" --verify-tag --title "cloud-native-observability $TAG" --notes-file "$NOTES" diff --git a/Makefile b/Makefile index e462d0b..58b6010 100644 --- a/Makefile +++ b/Makefile @@ -38,6 +38,18 @@ lint: ## Validate Kubernetes YAML and Helm values schemas @echo "Linting Kubernetes and Alertmanager configurations..." @which yamllint > /dev/null 2>&1 && yamllint -d relaxed deploy/ || echo "yamllint not installed, skipping syntax check" +lint-terraform: ## Lint Terraform with TFLint and format check + @echo "Checking Terraform formatting..." + terraform -chdir=deploy/terraform fmt -check -recursive + @echo "Validating Terraform syntax..." + terraform -chdir=deploy/terraform init -backend=false + terraform -chdir=deploy/terraform validate + @echo "Running TFLint..." + cd deploy/terraform && tflint --init && tflint --recursive + +check-release-readiness: ## Verify repository readiness before tagging a release (usage: make check-release-readiness TAG=v0.2.2) + @./scripts/check_tag_readiness.sh $(TAG) + clean: ## Remove temporary containers, networks, and volumes docker compose -f $(COMPOSE_FILE) down -v --remove-orphans diff --git a/deploy/terraform/.tflint.hcl b/deploy/terraform/.tflint.hcl index c27d5ec..c2cea9d 100644 --- a/deploy/terraform/.tflint.hcl +++ b/deploy/terraform/.tflint.hcl @@ -1,6 +1,6 @@ config { - module = true - force = false + call_module_type = "local" + force = false } plugin "terraform" { diff --git a/deploy/terraform/modules/grafana_provisioning/main.tf b/deploy/terraform/modules/grafana_provisioning/main.tf index 8bac407..7e627ef 100644 --- a/deploy/terraform/modules/grafana_provisioning/main.tf +++ b/deploy/terraform/modules/grafana_provisioning/main.tf @@ -1,12 +1,3 @@ -terraform { - required_providers { - grafana = { - source = "grafana/grafana" - version = ">= 3.0.0" - } - } -} - # ----------------------------------------------------------------------------- # Data Sources # ----------------------------------------------------------------------------- diff --git a/deploy/terraform/modules/grafana_provisioning/versions.tf b/deploy/terraform/modules/grafana_provisioning/versions.tf new file mode 100644 index 0000000..8b03c23 --- /dev/null +++ b/deploy/terraform/modules/grafana_provisioning/versions.tf @@ -0,0 +1,10 @@ +terraform { + required_version = ">= 1.5.0" + + required_providers { + grafana = { + source = "grafana/grafana" + version = ">= 3.0.0" + } + } +} diff --git a/deploy/terraform/modules/kubernetes_stack/versions.tf b/deploy/terraform/modules/kubernetes_stack/versions.tf new file mode 100644 index 0000000..e72f946 --- /dev/null +++ b/deploy/terraform/modules/kubernetes_stack/versions.tf @@ -0,0 +1,18 @@ +terraform { + required_version = ">= 1.5.0" + + required_providers { + kubernetes = { + source = "hashicorp/kubernetes" + version = ">= 2.26.0" + } + helm = { + source = "hashicorp/helm" + version = ">= 2.12.0" + } + random = { + source = "hashicorp/random" + version = ">= 3.6.0" + } + } +} diff --git a/deploy/terraform/modules/storage/versions.tf b/deploy/terraform/modules/storage/versions.tf new file mode 100644 index 0000000..9de9370 --- /dev/null +++ b/deploy/terraform/modules/storage/versions.tf @@ -0,0 +1,14 @@ +terraform { + required_version = ">= 1.5.0" + + required_providers { + aws = { + source = "hashicorp/aws" + version = ">= 5.30.0" + } + random = { + source = "hashicorp/random" + version = ">= 3.6.0" + } + } +} diff --git a/scripts/check_tag_readiness.sh b/scripts/check_tag_readiness.sh new file mode 100755 index 0000000..e2e6663 --- /dev/null +++ b/scripts/check_tag_readiness.sh @@ -0,0 +1,70 @@ +#!/usr/bin/env bash +set -euo pipefail + +# Validates repository, documentation, and test state before creating or pushing a release tag. + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +ROOT_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)" +cd "${ROOT_DIR}" + +readonly SEMVER_PATTERN='[0-9]+\.[0-9]+\.[0-9]+' + +fail() { + printf '\033[0;31mERROR: %s\033[0m\n' "$*" >&2 + exit 1 +} + +tag="${1:-}" +if [[ -z "${tag}" ]]; then + fail "Usage: $0 " +fi + +if [[ ! "${tag}" =~ ^v${SEMVER_PATTERN}$ ]]; then + fail "Tag must be valid SemVer prefixed with 'v' (e.g. v0.2.2): ${tag}" +fi + +version="${tag#v}" + +echo "========================================================" +echo "Checking release tag readiness for: ${tag}" +echo "========================================================" + +# 1. Validates that the working tree is clean. +echo "-> Checking working tree status..." +if [[ -n "$(git status --porcelain)" ]]; then + git status --short >&2 + fail "Working tree has uncommitted or untracked changes. Commit or stash them before releasing." +fi + +# 2. Validates that CHANGELOG.md has an entry for this exact version as its top released section. +echo "-> Validating CHANGELOG.md top released version..." +top_changelog_version="$(grep -E "^## \[${SEMVER_PATTERN}\]" CHANGELOG.md | head -n1 | sed -E "s/^## \[(${SEMVER_PATTERN})\].*/\1/")" +if [[ "${top_changelog_version}" != "${version}" ]]; then + fail "Top CHANGELOG.md release entry is v${top_changelog_version:-none}, but expected v${version}" +fi + +# 3. Validates that README.md has this exact version. +echo "-> Validating README.md version references..." +readme_header="$(grep -E '^# cloud-native-observability ยท v' README.md | head -n1 | sed -E 's/.*ยท v([0-9]+\.[0-9]+\.[0-9]+).*/\1/')" +if [[ "${readme_header}" != "${version}" ]]; then + fail "README.md header version is v${readme_header:-none}, but expected v${version}" +fi + +# 4. Runs GIT_TAG=$1 ./scripts/check_version.sh +echo "-> Running check_version.sh for ${tag}..." +GIT_TAG="${tag}" ./scripts/check_version.sh + +# 5. Runs Promtool alert rules and unit tests +echo "-> Running Promtool alert test suites..." +bash ./scripts/test_alerts.sh + +# 6. Runs Terraform formatting, validation, and TFLint +echo "-> Validating Terraform formatting, syntax, and TFLint..." +terraform -chdir=deploy/terraform fmt -check -recursive +terraform -chdir=deploy/terraform init -backend=false +terraform -chdir=deploy/terraform validate +(cd deploy/terraform && tflint --init && tflint --recursive) + +echo "========================================================" +echo "โœ… Release tag readiness check passed for ${tag}!" +echo "========================================================" From 84e8ea3567579f8de83b37c91233ef9b7e207ef0 Mon Sep 17 00:00:00 2001 From: Umesh Date: Sat, 19 Sep 2026 02:13:30 +0530 Subject: [PATCH 3/3] ci: trigger CI on fix/**, feat/**, tags, and workflow_dispatch --- .github/workflows/ci.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index dff9b26..3ed55ec 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -2,11 +2,15 @@ name: Observability Platform CI on: push: - branches: [main] + branches: + - main + - "fix/**" + - "feat/**" tags: - "v*" pull_request: branches: [main] + workflow_dispatch: permissions: read-all