You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CHANGELOG.md
+84-1Lines changed: 84 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,18 +1,44 @@
1
1
# Changelog
2
2
3
+
<aid="top"></a>
4
+
3
5
All notable changes to this project will be documented in this file.
4
6
5
7
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
8
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
9
10
+
[↑ Back to top](#top)
11
+
8
12
## [Unreleased]
9
13
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
+
10
34
## [1.0.1] - 2026-07-15
11
35
12
36
### Fixed
13
37
14
38
-**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.
15
39
40
+
[↑ Back to top](#top)
41
+
16
42
## [1.0.0] - 2026-07-15
17
43
18
44
### Added
@@ -35,6 +61,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
35
61
36
62
-**CLI tests:** drop `t.Parallel` from completion tests that call `newRootCmd` — global Viper/`cobra.OnInitialize` raced under CI `go test -race`.
37
63
64
+
[↑ Back to top](#top)
65
+
38
66
## [0.9.2] - 2026-07-11
39
67
40
68
### Added
@@ -49,6 +77,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
49
77
-**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.
50
78
-**Docs (#48):** README trim + Cosign verify examples; retry table documents full jitter.
51
79
80
+
[↑ Back to top](#top)
81
+
52
82
## [0.9.1] - 2026-07-11
53
83
54
84
### Security
@@ -66,6 +96,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
-**Engine preflight tests:** inject **`Engine.PreflightFactory`** so parallel live **`RunDown`** tests do not clobber the process-wide factory before the pipeline step starts.
68
98
99
+
[↑ Back to top](#top)
100
+
69
101
## [0.9.0] - 2026-07-08
70
102
71
103
### Added
@@ -93,6 +125,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
93
125
94
126
-**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).
95
127
128
+
[↑ Back to top](#top)
129
+
96
130
## [0.8.1] - 2026-06-29
97
131
98
132
### Fixed
@@ -103,6 +137,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
103
137
104
138
-**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**”).
105
139
140
+
[↑ Back to top](#top)
141
+
106
142
## [0.8.0] - 2026-06-29
107
143
108
144
### Added
@@ -117,6 +153,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
117
153
118
154
-**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**).
119
155
156
+
[↑ Back to top](#top)
157
+
120
158
## [0.7.4] - 2026-06-16
121
159
122
160
### Added
@@ -133,6 +171,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
133
171
134
172
-**Docker image build:** include **`configs/`** in build context so embedded sample YAML compiles in CI **`docker-scan`**.
135
173
174
+
[↑ Back to top](#top)
175
+
136
176
## [0.7.3] - 2026-06-12
137
177
138
178
### Added
@@ -146,6 +186,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
146
186
147
187
-**Helm SDK OCI:** registry login before chart pull; improved credential resolution for private OCI charts.
148
188
189
+
[↑ Back to top](#top)
190
+
149
191
## [0.7.2] - 2026-06-10
150
192
151
193
### Added
@@ -165,6 +207,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
165
207
166
208
-**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.
167
209
210
+
[↑ Back to top](#top)
211
+
168
212
## [0.7.1] - 2026-06-10
169
213
170
214
### Added
@@ -173,18 +217,24 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
173
217
-**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.
174
218
-**`run.no_env_passthrough`** and **`--no-env-passthrough`** on pipeline commands — hooks and kubectl subprocesses receive only **`KZERO_*`**, optional **`KUBECONFIG`**, and correlation fields.
175
219
220
+
[↑ Back to top](#top)
221
+
176
222
## [0.7.0] - 2026-06-10
177
223
178
224
### Added
179
225
180
226
-**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)).
181
227
228
+
[↑ Back to top](#top)
229
+
182
230
## [0.6.2] - 2026-06-10
183
231
184
232
### Changed
185
233
186
234
-**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).
187
235
236
+
[↑ Back to top](#top)
237
+
188
238
## [0.6.1] - 2026-06-07
189
239
190
240
### Added
@@ -197,6 +247,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
197
247
- Release **archives** and **`.deb`/`.rpm`** include **`share/man/man1/kzero.1`** (packages install **`/usr/share/man/man1/kzero.1.gz`**).
198
248
- FreeBSD and OpenBSD port skeletons install the man page from distfiles.
199
249
250
+
[↑ Back to top](#top)
251
+
200
252
## [0.6.0] - 2026-06-03
201
253
202
254
### Added
@@ -219,6 +271,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
-**Ports:** sync FreeBSD and OpenBSD port Makefiles to **0.6.0**.
221
273
274
+
[↑ Back to top](#top)
275
+
222
276
## [0.5.7] - 2026-06-05
223
277
224
278
### Added
@@ -229,6 +283,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
229
283
230
284
-**Shell path** (scale, rollout wait, helm uninstall, release scripts, hooks) returns classified errors instead of raw `exec` messages.
231
285
286
+
[↑ Back to top](#top)
287
+
232
288
## [0.5.6] - 2026-06-05
233
289
234
290
### Changed
@@ -241,6 +297,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
241
297
-**Tests:** raise `internal/cli`, `internal/cluster`, and `internal/engine` coverage above 80%; total statement coverage **84%**.
242
298
-**Ports:** sync FreeBSD and OpenBSD port Makefiles to **0.5.6**.
243
299
300
+
[↑ Back to top](#top)
301
+
244
302
## [0.5.5] - 2026-06-05
245
303
246
304
### Added
@@ -260,6 +318,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
260
318
-**[wait-helm-release-ready.sh](docs/examples/hooks/wait-helm-release-ready.sh):** use `kubectl rollout status` / `kubectl wait` (`helm status` has no `--wait`).
261
319
-**Docs:** CHANGELOG compare links for 0.5.2–0.5.4; SPEC `release` down documents `helm uninstall` (0.5.4 behavior).
262
320
321
+
[↑ Back to top](#top)
322
+
263
323
## [0.5.4] - 2026-06-04
264
324
265
325
### Added
@@ -271,18 +331,24 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
271
331
272
332
-**`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.
273
333
334
+
[↑ Back to top](#top)
335
+
274
336
## [0.5.3] - 2026-06-04
275
337
276
338
### Removed
277
339
278
340
-**`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.
279
341
342
+
[↑ Back to top](#top)
343
+
280
344
## [0.5.2] - 2026-06-04
281
345
282
346
### Added
283
347
284
348
-**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.
285
349
350
+
[↑ Back to top](#top)
351
+
286
352
## [0.5.1] - 2026-06-04
287
353
288
354
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
292
358
-**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.
293
359
-**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`.
294
360
361
+
[↑ Back to top](#top)
362
+
295
363
## [0.5.0] - 2026-06-04
296
364
297
365
First **pilot-ready** operator release: safe cluster identification, env overrides, and run timing for live Helm/script pipelines.
-**Elapsed time** on every command: final line `kzero <command> finished in …` or `failed after …`.
304
372
-**`KZERO_*` env overrides** for `run.mode`, `run.kubeconfig`, and related keys now apply on config load (`BindEnv`).
305
373
374
+
[↑ Back to top](#top)
375
+
306
376
## [0.4.1] - 2026-06-04
307
377
308
378
### Added
309
379
310
380
-**`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.
- 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.
-**`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.
-`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.
0 commit comments