Compare commits

..
Author SHA1 Message Date
james.maes cc435bb7eb Merge pull request #54 from KofTwentyTwo/main
chore: synchronize Munitor 0.3.11 release into develop
2026-10-19 15:31:33 -05:00
james.maes e4500339b4 Merge pull request #53 from KofTwentyTwo/release/0.3.11
chore(release): Munitor 0.3.11 deployment health parameters
2026-10-19 15:28:15 -05:00
james.maesandCodex 7f85781879 chore(release): prepare Munitor 0.3.11
Co-Authored-By: Codex <noreply@openai.com>
Signed-off-by: James Maes <james@kof22.com>
2026-10-19 15:25:37 -05:00
james.maes d76a46ce11 Merge pull request #52 from KofTwentyTwo/feature/deploy-health-parameters
fix: forward Java deployment migration and smoke settings
2026-10-19 15:25:19 -05:00
james.maesandCodex 18ea857841 fix: forward Java deployment migration and smoke settings
Co-Authored-By: Codex <noreply@openai.com>
Signed-off-by: James Maes <james@kof22.com>
2026-10-19 15:22:33 -05:00
james.maes ee31744cb9 Merge pull request #51 from KofTwentyTwo/feature/ci-rollout-notes
docs: record verified agile CI rollout
2026-10-19 14:53:49 -05:00
7 changed files with 87 additions and 6 deletions

No files matched your search

+1 -1
View File
@@ -29,7 +29,7 @@ GitHub Issues (org: KofTwentyTwo). Commit format: `feat(#N): description` or `Cl
- Namespace: `kof22`
- Orb: `kof22/munitor`
- Latest stable: `kof22/munitor@0.3.10`
- Latest stable: `kof22/munitor@0.3.11`
- Dev snapshot: `kof22/munitor@dev:snapshot`
`0.3.0` includes first-class pnpm support, repository-owned Dockerfiles for
+5 -5
View File
@@ -6,7 +6,7 @@ Latin: *munitor* (fortifier, protector) -- KofTwentyTwo's unified CircleCI orb f
| --- | --- |
| **Tier** | Internal until classified -- listed under *Awaiting classification* in the KofTwentyTwo standards [MAINTAINERS.md](https://github.com/KofTwentyTwo/standards/blob/main/MAINTAINERS.md); Product-tier requirements are being adopted |
| **Standards** | Targets [KofTwentyTwo standards](https://github.com/KofTwentyTwo/standards) 1.0.0 |
| **Orb** | [`kof22/munitor`](https://circleci.com/developer/orbs/orb/kof22/munitor), latest stable `0.3.10` |
| **Orb** | [`kof22/munitor`](https://circleci.com/developer/orbs/orb/kof22/munitor), latest stable `0.3.11` |
| **Security** | [SECURITY.md](SECURITY.md) |
| **Contributing** | [CONTRIBUTING.md](CONTRIBUTING.md) |
@@ -78,7 +78,7 @@ preserving all other branch rules. A single adoption PR may update both orb pins
and enable `ci.docs_only`: those config changes force full CI. Verify the gate
and migrate required checks before merging it or opening a docs-only PR. Munitor's
own native no-op gate reports `ci/circleci: lint-pack/ci-ready`. Both features
ship in 0.3.10. Verify each consumer's actual successful context before changing
ship in 0.3.11. Verify each consumer's actual successful context before changing
its rules; see [the adoption record](docs/PLAN-agile-ci.md).
Use native [Website-Backend Insights](https://app.circleci.com/insights/github/KofTwentyTwo/Website-Backend/workflows),
@@ -111,16 +111,16 @@ would not receive that exemption.
Munitor is a public CircleCI orb: any CircleCI organization can use it without forking. This checklist covers what a new consumer needs, for example a Java/Maven web service. A QQQ application should also read the [QQQ adoption checklist](https://github.com/QRun-IO/qqq/blob/develop/docs/migration/adoption-checklist.adoc) (section 7 covers release tooling).
**Version.** Use `kof22/munitor@0.3.10` (or `@0.3` to float on the 0.3 line) in `.circleci/config.yml`, and the same value as `orb_version` in `.munitor.yml`. Keep the setup orb and the generated pipeline on the same line.
**Version.** Use `kof22/munitor@0.3.11` (or `@0.3` to float on the 0.3 line) in `.circleci/config.yml`, and the same value as `orb_version` in `.munitor.yml`. Keep the setup orb and the generated pipeline on the same line.
### 1. Repository files
- `.circleci/config.yml`: the setup config from [Quick Start](#quick-start), pinned to `kof22/munitor@0.3.10`.
- `.circleci/config.yml`: the setup config from [Quick Start](#quick-start), pinned to `kof22/munitor@0.3.11`.
- `.munitor.yml`: pick a [pipeline type](#pipeline-types). A Java service is `java-webapp`. KofTwentyTwo's Website-Backend is a working example; a generalized version:
```yaml
pipeline: java-webapp
orb_version: "0.3.10"
orb_version: "0.3.11"
image_name: my-service
java_version: "21"
docker:
+21
View File
@@ -1,3 +1,24 @@
## Release 0.3.11 (2026-10-19)
PR52 passed all eight hosted checks on 18ea857 and merged as d76a46c.
This release forwards configured Java migration images and smoke paths to develop
and staging. Source and packed generator regressions, make all and 20 BATS pass.
Release metadata is the only change from the verified implementation; stable
publication and backend adoption follow. Production 0.1.138 remains healthy.
## Java deployment health parameter correction (2026-10-19)
Backend develop job 6405 exposed missing migration/smoke configuration in the
shared Java deployment partial: startup failed because slack_template was absent.
The partial now forwards health_migrations and health_smoke_paths just like the
production and release workflows. No application or scan policy changes.
tests/test_java_deploy_health.sh checks configured values and empty defaults in
develop, staging, production and release-candidate using both source and packed
generators. Full make all, 20 BATS tests, focused regression rerun and shell lint
passed through WSL. Packed scripts are synchronized. Publication and consumer
verification are pending.
## Verified agile CI rollout (2026-10-19)
Munitor 0.3.10 is published from main 19192d07 (PR48 implementation, PR49 release,
+2
View File
@@ -2,6 +2,8 @@
## Pending
- [ ] Validate and release Java develop/staging health_migrations and health_smoke_paths propagation; verify both generators and a corrected consumer build before claiming rollout success.
- [x] Publish 0.3.10, adopt in backend PR333, verify aggregate check names and migrate required lists; docs PR335 passed in 5m23 and native cancellation was observed (docs/PLAN-agile-ci.md).
- [x] Publish fast Java CI as 0.3.9; backend PR330 adopted it and measured the warm workflow at 20m45 (from 37m04).
+2
View File
@@ -2694,6 +2694,8 @@ cat > /tmp/munitor/templates/partials/java-webapp-deploy.yml.tpl << 'MUNITOR_PAR
health_path: ${MUNITOR_HEALTH_PATH}
health_port: "${MUNITOR_HEALTH_PORT}"
health_db: "${MUNITOR_HEALTH_DB}"
health_migrations: "${MUNITOR_HEALTH_MIGRATIONS}"
health_smoke_paths: "${MUNITOR_HEALTH_SMOKE_PATHS}"
##IF_SUPPLEMENTAL##
supplemental_images: '${MUNITOR_SUPPLEMENTAL_IMAGES_JSON}'
##ENDIF_SUPPLEMENTAL##
@@ -66,6 +66,8 @@
health_path: ${MUNITOR_HEALTH_PATH}
health_port: "${MUNITOR_HEALTH_PORT}"
health_db: "${MUNITOR_HEALTH_DB}"
health_migrations: "${MUNITOR_HEALTH_MIGRATIONS}"
health_smoke_paths: "${MUNITOR_HEALTH_SMOKE_PATHS}"
##IF_SUPPLEMENTAL##
supplemental_images: '${MUNITOR_SUPPLEMENTAL_IMAGES_JSON}'
##ENDIF_SUPPLEMENTAL##
+54
View File
@@ -0,0 +1,54 @@
#!/usr/bin/env bash
# Verify deployment health configuration reaches source and shipped generators.
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
WORK=$(mktemp -d)
trap 'rm -rf -- "$WORK"' EXIT
export CIRCLE_BRANCH=develop CIRCLE_TAG=""
cp "${SCRIPT_DIR}/fixtures/java-webapp.munitor.yml" "${WORK}/defaults.yml"
cp "${WORK}/defaults.yml" "${WORK}/configured.yml"
cat >>"${WORK}/configured.yml" <<'YAML'
health:
path: /health/ready
port: 8181
db: "true"
migrations: migrations
smoke_paths:
- /api/templates
- /api/version
YAML
# Packed helpers share /tmp/munitor; run these generators sequentially.
for generator in generate_config.sh packed_generate_config.sh; do
for mode in configured defaults; do
MUNITOR_CONFIG="${WORK}/${mode}.yml" MUNITOR_OUTPUT_FILE="${WORK}/generated.yml" \
bash "${SCRIPT_DIR}/../src/scripts/${generator}" >"${WORK}/generator.log" 2>&1 || {
cat "${WORK}/generator.log"
exit 1
}
yq -o=json '.' "${WORK}/generated.yml" >"${WORK}/generated.json"
python3 - "${WORK}/generated.json" "$mode" <<'PY'
import json
import sys
with open(sys.argv[1], encoding='utf-8') as source:
workflows = json.load(source)['workflows']
expected = {'health_migrations': '', 'health_smoke_paths': ''}
if sys.argv[2] == 'configured':
expected = {
'health_path': '/health/ready',
'health_port': '8181',
'health_db': 'true',
'health_migrations': 'migrations',
'health_smoke_paths': '/api/templates,/api/version',
}
for workflow in ('develop', 'staging', 'production', 'release-candidate'):
jobs = [job['munitor/docker_build_push'] for job in workflows[workflow]['jobs']
if isinstance(job, dict) and 'munitor/docker_build_push' in job]
assert len(jobs) == 1, (workflow, 'expected one Docker build job', jobs)
for parameter, value in expected.items():
assert jobs[0].get(parameter) == value, (workflow, parameter, jobs[0].get(parameter), value)
PY
printf 'PASS: %s %s deployment health parameters\n' "$generator" "$mode"
done
done