Skip to content

Commit b182f9d

Browse files
authored
Merge pull request #3 from hrodrig/develop
Release v1.0.2
2 parents 747a261 + 8c3157f commit b182f9d

32 files changed

Lines changed: 579 additions & 93 deletions

.grype.yaml

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,27 @@
11
# Grype policy for `make docker-scan` / CI (default --fail-on high).
22
#
33
# oras-go GHSA-fxhp-mv3v-67qp: fixed in v2.6.2 (0.9.1) — no ignore needed.
4-
# govulncheck transitive findings (containerd v2-only, Helm openpgp): .govulncheck-ignore.yaml
5-
# Add `ignore:` entries here only for image-scan false positives Grype cannot resolve upstream.
4+
# govulncheck: same IDs in .govulncheck-ignore.yaml (make security).
5+
# Grype scans the image SBOM and does not honor govulncheck ignores — mirror here.
6+
#
7+
# containerd: vulndb flags v1.7.x for CRI-checkpoint issues that apply to v2 only.
8+
# x/crypto GO-2026-5932: openpgp via helm.sh/helm/v3; pin ≥v0.54.0 for scanner
9+
# hygiene (groot-style); keep ignore until Helm SDK v4 (#59) drops openpgp.
10+
11+
ignore:
12+
- vulnerability: GO-2026-5064
13+
reason: "containerd v2-only CRI checkpoint CDI smuggling — does not affect containerd v1"
14+
package:
15+
name: github.com/containerd/containerd
16+
- vulnerability: GO-2026-5338
17+
reason: "containerd v2-only CRI checkpoint image tag poisoning — does not affect containerd v1"
18+
package:
19+
name: github.com/containerd/containerd
20+
- vulnerability: GO-2026-5622
21+
reason: "containerd v2-only CRI checkpoint symlink — does not affect containerd v1"
22+
package:
23+
name: github.com/containerd/containerd
24+
- vulnerability: GO-2026-5932
25+
reason: "Helm v3 transitive golang.org/x/crypto/openpgp (chart provenance); remove after helm.sh/helm/v4 (#59)"
26+
package:
27+
name: golang.org/x/crypto

CHANGELOG.md

Lines changed: 84 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,44 @@
11
# Changelog
22

3+
<a id="top"></a>
4+
35
All notable changes to this project will be documented in this file.
46

57
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
68
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
79

10+
[↑ Back to top](#top)
11+
812
## [Unreleased]
913

14+
[↑ Back to top](#top)
15+
16+
## [1.0.2] - 2026-07-31
17+
18+
### Added
19+
20+
- **`command.shell` (#56):** opt-in interpreter for phase hooks, per-step **`pre`/`post`**, **`custom:`**, and shell-path **`release.*`** `.sh` scripts (default **`/bin/sh`**; shebang still ignored). Env **`KZERO_COMMAND_SHELL`**. **`kzero doctor`** checks the interpreter when hooks/scripts are configured.
21+
22+
### Changed
23+
24+
- **Dependencies:** bump transitive `golang.org/x/crypto` to **v0.54.0** (and related `golang.org/x/*`) — Grype hygiene for **GO-2026-5932** (Helm `openpgp`); same approach as groot.
25+
- **Grype:** `.grype.yaml` ignore rules for containerd v2-only advisories (**GO-2026-5064**, **GO-2026-5338**, **GO-2026-5622**) and **GO-2026-5932** until Helm SDK v4 (#59); mirrors `.govulncheck-ignore.yaml`.
26+
27+
### Removed
28+
29+
- **README:** drop retired Go Report Card badge (service retired).
30+
- **README:** badge meanings moved to [docs/readme-badges.md](docs/readme-badges.md); intro states problem/solution.
31+
32+
[↑ Back to top](#top)
33+
1034
## [1.0.1] - 2026-07-15
1135

1236
### Fixed
1337

1438
- **Retry / subprocess taxonomy:** treat **`connection lost`** and **`http2: client connection lost`** (client-go mid-stream drops on slow/remote APIs) as transient — live per-step **`retry`** and **`WrapSubprocess`** **`ErrTransient`** now match those strings.
1539

40+
[↑ Back to top](#top)
41+
1642
## [1.0.0] - 2026-07-15
1743

1844
### Added
@@ -35,6 +61,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
3561

3662
- **CLI tests:** drop `t.Parallel` from completion tests that call `newRootCmd` — global Viper/`cobra.OnInitialize` raced under CI `go test -race`.
3763

64+
[↑ Back to top](#top)
65+
3866
## [0.9.2] - 2026-07-11
3967

4068
### Added
@@ -49,6 +77,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
4977
- **Retry backoff (#50):** live per-step retry waits use **full jitter** uniformly in **`[0, exponential]`** (still capped at **2m**) so concurrent runs do not align on the same delay.
5078
- **Docs (#48):** README trim + Cosign verify examples; retry table documents full jitter.
5179

80+
[↑ Back to top](#top)
81+
5282
## [0.9.1] - 2026-07-11
5383

5484
### Security
@@ -66,6 +96,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
6696
- **Validate client factory:** replace mutable **`DefaultClientFactory`** with thread-safe **`ClientFactoryDefault()`** / **`SwapDefaultClientFactory()`**.
6797
- **Engine preflight tests:** inject **`Engine.PreflightFactory`** so parallel live **`RunDown`** tests do not clobber the process-wide factory before the pipeline step starts.
6898

99+
[↑ Back to top](#top)
100+
69101
## [0.9.0] - 2026-07-08
70102

71103
### Added
@@ -93,6 +125,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
93125

94126
- **API watchdog client:** probe `/healthz` via `rest.HTTPClientFor` and a direct GET (previously `rest.RESTClientFor` required `GroupVersion` / `NegotiatedSerializer` and disabled the watchdog silently with a normal kubeconfig).
95127

128+
[↑ Back to top](#top)
129+
96130
## [0.8.1] - 2026-06-29
97131

98132
### Fixed
@@ -103,6 +137,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
103137

104138
- **Docs:** post-**v0.8.0** sync for [pipeline-network-loss.md](docs/examples/pipeline-network-loss.md), [docs/README.md](docs/README.md), and related operator cookbooks (no longer “until **0.8.0**”).
105139

140+
[↑ Back to top](#top)
141+
106142
## [0.8.0] - 2026-06-29
107143

108144
### Added
@@ -117,6 +153,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
117153

118154
- **Notify dispatch failures now logged**: `_ = notify.Dispatch(...)` replaced with error handling across all three call sites (CLI `EventStart`/`EventSuccess`, engine `EventError`). Failed notify POSTs produce `[ERR]` log lines with redacted webhook URLs (**#35**).
119155

156+
[↑ Back to top](#top)
157+
120158
## [0.7.4] - 2026-06-16
121159

122160
### Added
@@ -133,6 +171,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
133171

134172
- **Docker image build:** include **`configs/`** in build context so embedded sample YAML compiles in CI **`docker-scan`**.
135173

174+
[↑ Back to top](#top)
175+
136176
## [0.7.3] - 2026-06-12
137177

138178
### Added
@@ -146,6 +186,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
146186

147187
- **Helm SDK OCI:** registry login before chart pull; improved credential resolution for private OCI charts.
148188

189+
[↑ Back to top](#top)
190+
149191
## [0.7.2] - 2026-06-10
150192

151193
### Added
@@ -165,6 +207,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
165207

166208
- **0.7.x band close** on **`develop`**: bundles PR3–PR7 (**Helm SDK**, **`pvc`**, **`exec`**, probe native, scheduling, OCI auth, helm path ergonomics, custom env parity). **`#29`** (`job`/`cronjob`) remains open on the roadmap.
167209

210+
[↑ Back to top](#top)
211+
168212
## [0.7.1] - 2026-06-10
169213

170214
### Added
@@ -173,18 +217,24 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
173217
- **Secret redaction (#17):** `internal/redact` scrubs bearer tokens, webhook URLs, and common `*_TOKEN` / `*_KEY` env patterns in engine logs, notify error payloads, and subprocess output.
174218
- **`run.no_env_passthrough`** and **`--no-env-passthrough`** on pipeline commands — hooks and kubectl subprocesses receive only **`KZERO_*`**, optional **`KUBECONFIG`**, and correlation fields.
175219

220+
[↑ Back to top](#top)
221+
176222
## [0.7.0] - 2026-06-10
177223

178224
### Added
179225

180226
- **Supply chain (GoReleaser):** **Cosign** keyless signing for **`checksums.txt`** and **`ghcr.io/hrodrig/kzero`** images; **SPDX** and **CycloneDX** SBOMs per release (Syft, source catalog). Release workflow installs **cosign** and **syft** and grants **`id-token: write`** for OIDC signing (same pattern as [groot](https://github.com/hrodrig/groot)).
181227

228+
[↑ Back to top](#top)
229+
182230
## [0.6.2] - 2026-06-10
183231

184232
### Changed
185233

186234
- **Product vs operator split:** operator deployment docs (cron/CI, reference hook scripts, infra-probe assets) moved to **[kzero-selfhosted](https://github.com/hrodrig/kzero-selfhosted)**; stubs and links remain in this repo. README adds **Operator deployment** table; new **[AGENTS.md](AGENTS.md)** documents scope (same pattern as pgwd / pgwd-selfhosted).
187235

236+
[↑ Back to top](#top)
237+
188238
## [0.6.1] - 2026-06-07
189239

190240
### Added
@@ -197,6 +247,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
197247
- Release **archives** and **`.deb`/`.rpm`** include **`share/man/man1/kzero.1`** (packages install **`/usr/share/man/man1/kzero.1.gz`**).
198248
- FreeBSD and OpenBSD port skeletons install the man page from distfiles.
199249

250+
[↑ Back to top](#top)
251+
200252
## [0.6.0] - 2026-06-03
201253

202254
### Added
@@ -219,6 +271,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
219271
- **`make clean`**: removes **`coverage.out`** (artifact stays gitignored).
220272
- **Ports:** sync FreeBSD and OpenBSD port Makefiles to **0.6.0**.
221273

274+
[↑ Back to top](#top)
275+
222276
## [0.5.7] - 2026-06-05
223277

224278
### Added
@@ -229,6 +283,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
229283

230284
- **Shell path** (scale, rollout wait, helm uninstall, release scripts, hooks) returns classified errors instead of raw `exec` messages.
231285

286+
[↑ Back to top](#top)
287+
232288
## [0.5.6] - 2026-06-05
233289

234290
### Changed
@@ -241,6 +297,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
241297
- **Tests:** raise `internal/cli`, `internal/cluster`, and `internal/engine` coverage above 80%; total statement coverage **84%**.
242298
- **Ports:** sync FreeBSD and OpenBSD port Makefiles to **0.5.6**.
243299

300+
[↑ Back to top](#top)
301+
244302
## [0.5.5] - 2026-06-05
245303

246304
### Added
@@ -260,6 +318,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
260318
- **[wait-helm-release-ready.sh](docs/examples/hooks/wait-helm-release-ready.sh):** use `kubectl rollout status` / `kubectl wait` (`helm status` has no `--wait`).
261319
- **Docs:** CHANGELOG compare links for 0.5.2–0.5.4; SPEC `release` down documents `helm uninstall` (0.5.4 behavior).
262320

321+
[↑ Back to top](#top)
322+
263323
## [0.5.4] - 2026-06-04
264324

265325
### Added
@@ -271,18 +331,24 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
271331

272332
- **`release.*` on `down`:** live mode runs **`helm uninstall <release> -n <namespace> --wait --ignore-not-found`** instead of executing `<helm.workspace>/<release>.sh`. **`up`** still runs the install script. `kzero analyze` shows `helm uninstall` in the down plan.
273333

334+
[↑ Back to top](#top)
335+
274336
## [0.5.3] - 2026-06-04
275337

276338
### Removed
277339

278340
- **`run.worker_concurrency`** removed from the configuration contract. The engine always runs pipeline steps **sequentially** in YAML order. Legacy YAML keys are ignored; CLI warnings for `worker_concurrency` are dropped. Roadmap item **0.5.x #13** (pipeline parallelism) is **closed** as out of scope.
279341

342+
[↑ Back to top](#top)
343+
280344
## [0.5.2] - 2026-06-04
281345

282346
### Added
283347

284348
- **Per-step retry in live mode**: `retry.attempts` and `retry.delay` are honored for each pipeline step (pre + main + post). Transient failures (API timeout/conflict/429/503, rollout deadlines, common connection errors) retry with backoff **`delay × 2^(n−1)`** (max **2m**). Non-retriable: `NotFound`, `Forbidden`, `context.Canceled`. **`dry-run`** unchanged (no retries). Logs `[retry] pipeline …` before each wait.
285349

350+
[↑ Back to top](#top)
351+
286352
## [0.5.1] - 2026-06-04
287353

288354
Pilot polish after **0.5.0**: stronger dry-run on the native path and configurable timing-line colors.
@@ -292,6 +358,8 @@ Pilot polish after **0.5.0**: stronger dry-run on the native path and configurab
292358
- **Server-side dry-run for native scale**: with `run.mode: dry-run` and `run.execution: native` or `auto`, `deployment` / `statefulset` steps call the API with `DryRun=All` (validates RBAC and object state without persisting replica changes). Shell execution and `release` / `custom` steps remain plan-only.
293359
- **Colored elapsed time** on command summary lines: green when the command succeeds, yellow when it fails. Controlled by **`run.color`** in YAML (`auto`, `always`, `never`; default `auto`), overridable with **`KZERO_RUN_COLOR`** / legacy **`KZERO_COLOR`** when `auto`, plus **`NO_COLOR`** and **`FORCE_COLOR`**. Summary is written to **stderr** so `kzero down | tee log` still shows colors on the terminal when `run.color: always`.
294360

361+
[↑ Back to top](#top)
362+
295363
## [0.5.0] - 2026-06-04
296364

297365
First **pilot-ready** operator release: safe cluster identification, env overrides, and run timing for live Helm/script pipelines.
@@ -303,12 +371,16 @@ First **pilot-ready** operator release: safe cluster identification, env overrid
303371
- **Elapsed time** on every command: final line `kzero <command> finished in …` or `failed after …`.
304372
- **`KZERO_*` env overrides** for `run.mode`, `run.kubeconfig`, and related keys now apply on config load (`BindEnv`).
305373

374+
[↑ Back to top](#top)
375+
306376
## [0.4.1] - 2026-06-04
307377

308378
### Added
309379

310380
- **`kzero analyze` cluster validation**: when kubeconfig loads, **Get** checks for each unique `deployment` / `statefulset` ref; **FAIL** lines and non-zero exit if missing or not scalable; **stderr** skip note when the API client cannot be built.
311381

382+
[↑ Back to top](#top)
383+
312384
## [0.4.0] - 2026-06-04
313385

314386
### Added
@@ -321,6 +393,8 @@ First **pilot-ready** operator release: safe cluster identification, env overrid
321393
- **Docs:** [docs/SPECIFICATIONS.md](docs/SPECIFICATIONS.md) documents workload execution backend; [docs/ROADMAP.md](docs/ROADMAP.md) marks 0.4.x items 5–9 shipped in **0.4.0**.
322394
- **Dependencies:** `k8s.io/client-go` and `k8s.io/api` for native execution; `golang.org/x/net` v0.55.0 (govulncheck clean with client-go).
323395

396+
[↑ Back to top](#top)
397+
324398
## [0.2.3] - 2026-06-04
325399

326400
### Added
@@ -338,6 +412,8 @@ First **pilot-ready** operator release: safe cluster identification, env overrid
338412

339413
- Bump minimum Go version to **1.26.4** to address [GO-2026-5037](https://pkg.go.dev/vuln/GO-2026-5037) (`crypto/x509` hostname parsing) reported by `govulncheck` on Go 1.26.3.
340414

415+
[↑ Back to top](#top)
416+
341417
## [0.2.2] - 2026-05-13
342418

343419
### Added
@@ -352,6 +428,8 @@ First **pilot-ready** operator release: safe cluster identification, env overrid
352428

353429
- **`CHANGELOG.md`**: restore the **`[0.2.1]`** section (Removed / Changed) that had been folded under **`[Unreleased]`** by mistake, so published **0.2.1** release notes match the tagged release again.
354430

431+
[↑ Back to top](#top)
432+
355433
## [0.2.1] - 2026-05-13
356434

357435
### Removed
@@ -362,6 +440,8 @@ First **pilot-ready** operator release: safe cluster identification, env overrid
362440

363441
- `pipelines.{down,up}` reject unsupported step kinds at config load time via an explicit allow-list (`deployment`, `statefulset`, `release`). Previously, refs such as `cronjob.<ns>/<name>`, `job.<ns>/<name>`, or `service.<ns>/<name>` passed validation and failed only later in live mode with `unsupported pipeline resource type`. `kzero analyze` now surfaces the problem before any cluster mutation.
364442

443+
[↑ Back to top](#top)
444+
365445
## [0.2.0] - 2026-05-13
366446

367447
### Added
@@ -375,7 +455,10 @@ First **pilot-ready** operator release: safe cluster identification, env overrid
375455

376456
- **Makefile** is a FreeBSD-friendly stub that forwards to **gmake** / **GNUmakefile** (same pattern as pgwd).
377457

378-
[Unreleased]: https://github.com/hrodrig/kzero/compare/v1.0.1...HEAD
458+
[↑ Back to top](#top)
459+
460+
[Unreleased]: https://github.com/hrodrig/kzero/compare/v1.0.2...HEAD
461+
[1.0.2]: https://github.com/hrodrig/kzero/compare/v1.0.1...v1.0.2
379462
[1.0.1]: https://github.com/hrodrig/kzero/compare/v1.0.0...v1.0.1
380463
[1.0.0]: https://github.com/hrodrig/kzero/compare/v0.9.2...v1.0.0
381464
[0.9.2]: https://github.com/hrodrig/kzero/compare/v0.9.1...v0.9.2

0 commit comments

Comments
 (0)