Skip to content

v0.2.0

Latest

Choose a tag to compare

@github-actions github-actions released this 01 May 08:12
· 24 commits to master since this release
70152fc

Changelog

  • bd2a61a: fix(cli): surface errors on stderr instead of silent exit 1 (@leosocy)
  • 0523abc: Merge pull request #2 from leosocy/fix/main-error-reporting (@leosocy)
  • 6216867: fix(import): reject cross-format output that would break byte-exactness (@leosocy)
  • 945acba: Merge pull request #3 from leosocy/fix/cross-format-byte-preservation (@leosocy)
  • 068d398: fix(diff): ComputePlan returns non-nil slices for empty partitions (@leosocy)
  • 89c7897: Merge pull request #4 from leosocy/fix/empty-partition-sidecar (@leosocy)
  • c85efa4: docs(spec): add v2 Phase 1 intra-layer binary diff design (@leosocy)
  • 22f55a0: docs(plan): add v2 Phase 1 intra-layer binary diff implementation plan (@leosocy)
  • 9a5f5dc: chore: ignore .worktrees/ for isolated development (@leosocy)
  • ef0ad95: docs(decision): select os/exec zstd as patch-from backend (@leosocy)
  • 6053cef: feat(zstdpatch): add internal package for zstd patch-from encode/decode (@leosocy)
  • 92ced62: feat(diff): extend BlobRef schema + sidecar validation for intra-layer encoding (@leosocy)
  • 18a7b06: feat(exporter): add IntraLayerPlanner with size-closest matching (@leosocy)
  • b283fc2: feat(exporter): expose LayerMeta on BaselineSet for intra-layer planner (@leosocy)
  • 59e05cc: feat(exporter): wire IntraLayerPlanner into export orchestration (@leosocy)
  • cf55cc4: refactor(importer): CompositeSource dispatches on sidecar encoding (@leosocy)
  • b1237aa: feat(importer): probe baseline for patch_from_digest union (@leosocy)
  • 763df84: feat(importer): DryRun reports patch_from_digest reachability (@leosocy)
  • 890a96f: feat(cli): add --intra-layer=auto|off flag to export command (@leosocy)
  • 09c5cde: test(fixtures): add v3 fixture pair for intra-layer testing (@leosocy)
  • 89a872b: feat(cli): inspect reports full/patch split and archive totals (@leosocy)
  • 4ea98e6: test(e2e): add intra-layer roundtrip integration tests (@leosocy)
  • 95b09fd: docs(spec): add v2 intra-layer backend resilience design (@leosocy)
  • a2fb122: docs(spec): correct backend-resilience spec re: encoding=full semantics (@leosocy)
  • b5efb4a: fix: make zstd empty-target path safe, clean lint baseline to zero (@leosocy)
  • 2a17f61: style(fixtures): suppress G115 on bounded byte cast (@leosocy)
  • 033e7b8: fix(test): propagate btrfs/devicemapper exclude tags to cmd subprocess tests (@leosocy)
  • a4a5e64: docs(spec): add v2 intra-layer backend resilience design (@leosocy)
  • 42f214b: docs(spec): add v2 content-similarity layer matching design (@leosocy)
  • 6cd70fe: docs(plan): add v2 content-similarity matching implementation plan (@leosocy)
  • 1eeaf05: docs(decision): record content-similarity spike results (@leosocy)
  • 6519cfa: feat(exporter): add Fingerprint type and score helper (@leosocy)
  • 6919498: refactor(exporter): rename score accumulator to avoid bytes-package shadow (@leosocy)
  • 8cb3c75: feat(exporter): add DefaultFingerprinter for plain tar layers (@leosocy)
  • 7af483b: style(exporter): suppress gosec G110 and revive unused-parameter on fingerprinter (@leosocy)
  • dc9cc65: feat(exporter): DefaultFingerprinter handles gzip tar layers (@leosocy)
  • 63ba356: test(exporter): cover gzip construction failure and explain truncation (@leosocy)
  • ca39ad5: feat(exporter): DefaultFingerprinter handles zstd tar layers (@leosocy)
  • 4138682: docs(exporter): correct zstd corrupt-header test comment on lazy NewReader (@leosocy)
  • 1f52b9b: refactor(exporter): Planner accepts Fingerprinter dependency (@leosocy)
  • 3564ed5: feat(exporter): eager baseline fingerprinting in Planner (@leosocy)
  • 5262f54: feat(exporter): add pickSimilar content-matching baseline picker (@leosocy)
  • a36ffb7: feat(exporter): Run uses pickSimilar for baseline selection (@leosocy)
  • 87cd07b: fix(exporter): make sidecar timestamp deterministic for testing (@leosocy)
  • 69eef34: test(exporter): regression for deterministic archive output (@leosocy)
  • 8171012: test(fixtures): add v4 fixture pair for content-similarity matching (@leosocy)
  • fd0189c: fix(fixtures): align v4 shared file sizes and tune bSizeTrap for clear divergence (@leosocy)
  • 1d73176: test(integration): content-match beats size-closest on v4 fixture (@leosocy)
  • 305e410: docs(readme): describe content-similarity baseline picker (@leosocy)
  • 6b798b5: test(integration): tighten v4 round-trip to manifest-digest equality (@leosocy)
  • 0374fed: refactor(exporter): hide Fingerprinter behind ExportWithFingerprinter test helper (@leosocy)
  • ede0ae6: docs(review): address code-review minor findings (@leosocy)
  • 7068272: style(fixtures): drop nested block in v4 dispatch, prealloc outputs (@leosocy)
  • 792fb4f: Merge pull request #5 from leosocy/spec/v2-intra-layer-design (@leosocy)
  • 8af11b5: Merge pull request #6 from leosocy/spec/v2-content-similarity-matching (@leosocy)
  • efa34e1: feat: multi-image bundle import with streaming compose (#7) (@leosocy)
  • f0a34dc: Merge branch 'master' of github.com:leosocy/diffah into spec/v2-zstd-backend-resilience (@leosocy)
  • 9932061: docs(spec): refresh zstd-backend-resilience spec against post-PR-#6 master (@leosocy)
  • 740a6e1: docs(plan): add implementation plan for diffah v2 zstd backend resilience (@leosocy)
  • 7696304: refactor(zstdpatch): move EncodeFull/DecodeFull to klauspost/compress (@leosocy)
  • 7ae865c: fix(zstdpatch): remove exported mutable state and race-prone reset (@leosocy)
  • 85dff84: feat(exporter): add resolveMode + Probe/WarnOut options (@leosocy)
  • d190ced: test(exporter): cover required-mode hard-fail and auto-mode silent downgrade (@leosocy)
  • 13a8abe: chore(exporter_test): fix test assertion ordering and add explanatory comment (@leosocy)
  • 7b29e7a: feat(importer): probe-early-fail when archive has patch entries (@leosocy)
  • 88fd323: chore(importer): add clarifying comment for probe result discard (@leosocy)
  • 16a5528: feat(cli): accept --intra-layer=required; surface probe state in inspect (@leosocy)
  • 72d277c: chore(cmd): add defensive t.Skip to TestInspectCommand_PrintsSidecarFields (@leosocy)
  • 61f7a4a: test(integration): cover auto-mode silent downgrade under scrubbed $PATH (@leosocy)
  • e91f2c9: chore(integration): remove unused origPath variable in TestIntegration_AutoDowngradesUnderReducedPATH (@leosocy)
  • b485589: docs(readme): narrow zstd requirement to required-mode + patch-bearing imports (@leosocy)
  • 6a05f19: chore: fix lint violations (goconst, gocritic, gofmt, revive) (@leosocy)
  • a32c4cf: test(zstdpatch): add ResetProbeCache for test isolation (@leosocy)
  • 811421c: docs(spec): add zstd-backend-resilience cleanup design (@leosocy)
  • 89f8ae9: docs(plan): add zstd-backend-resilience cleanup implementation plan (@leosocy)
  • 5438d2b: refactor(diff): promote sidecarHasPatch to Sidecar.RequiresZstd method (@leosocy)
  • 35e2713: fix(zstdpatch): wrap ctx.Err() on probe timeout so callers can errors.Is (@leosocy)
  • 0e796bc: refactor(zstdpatch): drop sync.Once probe cache and ResetProbeCache (@leosocy)
  • bcd0fed: fix(zstdpatch): thread ctx into Encode/Decode via CommandContext (@leosocy)
  • 74b136e: test(zstdpatch): tighten cancellation assertion to ErrorIs(Canceled) (@leosocy)
  • 613a199: perf(inspect): stop double-reading the sidecar via importer.DryRun (@leosocy)
  • 4b33ce1: test(inspect): delete dead Task-17 skips; add subprocess integration test (@leosocy)
  • 1a3596c: chore: add modeRequired const; rewrite WHAT comments as WHY (@leosocy)
  • 31ff22e: test(zstdpatch): rename cancellation test to match what it verifies (@leosocy)
  • 2182565: fix(test): propagate build tags to TestExport_RejectsUnknownIntraLayerValue (@leosocy)
  • ff6f739: Merge pull request #8 from leosocy/spec/v2-zstd-backend-resilience (@leosocy)
  • 3c81b3a: docs(spec): add Phase 1 observability foundations design (@leosocy)
  • d82c4e1: docs(plan): add Phase 1 observability foundations implementation plan (@leosocy)
  • f3f7c21: feat(errs): add Category + Classify taxonomy (@leosocy)
  • d1f36d2: feat(cmd): classify errors into exit codes 0/1/2/3/4 (@leosocy)
  • 9ff243c: refactor(errs,cmd): address code quality review findings (@leosocy)
  • 140e52b: feat(cmd): slog bootstrap with --log-level/--log-format (@leosocy)
  • d3166ec: feat(*): thread slog.Default through every package (@leosocy)
  • 86b2218: feat(progress): add Reporter interface with Discard, Line, and FromWriter (@leosocy)
  • e42d71e: feat(progress): add Reporter/Layer interfaces, wire into exporter+importer (@leosocy)
  • dedf280: feat(progress): add mpb multi-bar reporter + --progress flag (@leosocy)
  • aeb1681: feat(cmd): --output json on inspect and errors (@leosocy)
  • 240fdd2: feat(cmd): add --output json support for export and import dry-run (@leosocy)
  • 5aab119: docs(compat): add exit-code, schema, and log stability contract (@leosocy)
  • 3a31e8d: feat(cmd): add diffah doctor preflight scaffold (@leosocy)
  • 871222a: fix(compat,doctor): address spec review findings (@leosocy)
  • c83a796: refactor(zstdpatch,doctor): address code quality review findings (@leosocy)
  • 9ab9e74: fix(cmd,progress,errs): address code review findings from spec compliance audit (@leosocy)
  • a9b4bf5: refactor(progress,cmd): export progress.IsTTY and remove cmd-local duplicate (@leosocy)
  • c849eb0: fix(errs): classify cobra arg-count errors as user (exit 2) (@leosocy)
  • 38c5646: fix(cmd): rewireSlogToBars must preserve auto-format TTY decision (@leosocy)
  • 9e2ff80: refactor(cmd): rename importFlags.outputFormat to imageFormat (@leosocy)
  • 5b3cf1c: refactor(cmd): unexport ClassifyExitCode/RenderError, share classifyAndExit (@leosocy)
  • e38073d: refactor(cmd): promote doctorErr to errDoctorChecksFailed sentinel (@leosocy)
  • 947731c: refactor(cmd): inline trivial currentLogFormat wrapper (@leosocy)
  • 79e81f0: fix(cmd): normalize zstd_available in inspect snapshot for CI portability (@leosocy)
  • 28b8d9d: test(cmd): cache diffah binary across integration suite via sync.Once (@leosocy)
  • 53351dd: style(cmd,errs): gofmt test files and share logger defaults in cmd tests (@leosocy)
  • 72f35ab: test(cmd): unset CI env in auto+TTY tests that assert text handler (@leosocy)
  • c071c3d: Merge pull request #9 from leosocy/spec/v2-observability-foundations (@leosocy)
  • 7c9e2b9: docs(cli): spec skopeo-inspired CLI redesign (@leosocy)
  • 8f87537: docs(cli): add implementation plan for skopeo-inspired redesign (@leosocy)
  • ac40599: feat(cmd): add transport-prefixed image reference parser (@leosocy)
  • f844939: feat(cmd): add requireArgs validator with usage+example guidance (@leosocy)
  • 47f36be: feat(cmd): install usage template with Arguments section (@leosocy)
  • aadc40b: feat(cmd): trap removed 'export'/'import' verbs with migration hint (@leosocy)
  • 913d71e: feat(cmd): rename global --output to --format (-o) and add -q/-v (@leosocy)
  • ac7429c: fix(cmd): reset flag state in test Run helper (@leosocy)
  • a46b887: feat(cmd): add 'diff' subcommand for single-image delta (@leosocy)
  • f46bb08: test(cmd): integration coverage for 'diff' subcommand (@leosocy)
  • 2c21b17: feat(cmd): add 'apply' subcommand for single-image reconstruction (@leosocy)
  • eb067e7: test(cmd): integration coverage for 'apply' round-trip (@leosocy)
  • d053e6d: feat(cmd): add 'bundle' subcommand for multi-image bundling (@leosocy)
  • dd6c2f0: test(cmd): integration coverage for 'bundle' with spec file (@leosocy)
  • c231ef5: fix(cmd): tighten findSingleImageArtifact exact-match (@leosocy)
  • c66e767: test(cmd): fix swallowed marshal err and add multi-pair bundle case (@leosocy)
  • 9555137: feat(cmd): add 'unbundle' subcommand for multi-image reconstruction (@leosocy)
  • 999718d: test(cmd): integration coverage for bundle -> unbundle round-trip (@leosocy)
  • 8c9bb13: test(cmd): strengthen unbundle round-trip assertion (@leosocy)
  • 485b088: refactor(cmd): delete export/import; consolidate dry-run helpers (@leosocy)
  • ec3d2b7: test(cmd): tighten inspect assertion to match 'default' name (@leosocy)
  • b2cc821: test(importer): restore fixturePair helper (@leosocy)
  • b2ce534: docs: CHANGELOG entry for CLI redesign (@leosocy)
  • ce5aa5a: docs: fix stale exit-code row and CHANGELOG wording (post-review polish) (@leosocy)
  • 087a4a7: fix(errs): align library hints/types with skopeo-inspired CLI surface (@leosocy)
  • 248b59f: fix(cmd): classify apply/inspect boundary conditions as user/content (@leosocy)
  • 7febbcc: fix(cmd): tidy CLI error UX rough edges found in e2e sweep (@leosocy)
  • 02f99c7: docs(compat): split digest-mismatch row between user and content codes (@leosocy)
  • 74b25cb: refactor(cmd): simplify sweep on recent e2e fixes (@leosocy)
  • d814592: style: resolve golangci-lint findings on the PR branch (@leosocy)
  • dadffbb: Merge pull request #11 from leosocy/spec/cli-redesign-skopeo-inspired (@leosocy)
  • a515add: perf(exporter): hoist Planner per-pair instead of per-shipped-blob (@leosocy)
  • 395ff4e: fix(progress): NewBars falls back to line reporter on non-TTY writers (@leosocy)
  • ba9c5c3: fix(exporter): stream Written() per chunk so progress bars actually animate (@leosocy)
  • 2aa0510: style(exporter): gofmt encode_test.go and drop trailing blank line (@leosocy)
  • 180bf24: Merge pull request #12 from leosocy/fix/progress-and-planner-hoist-followup (@leosocy)
  • 6ff6063: docs(spec): add production-readiness roadmap design (@leosocy)
  • 751471d: Merge pull request #13 from leosocy/spec/v2-production-readiness-roadmap (@leosocy)
  • 21750a1: docs(spec): add Phase 2 registry-native import design (@leosocy)
  • 2f06a90: docs(plan): add Phase 2 registry-native import implementation plan (@leosocy)
  • ee09859: chore: add go-containerregistry for in-process registry tests (@leosocy)
  • dbc963a: feat(errs): add ErrRegistry{Auth,Network,ManifestMissing,ManifestInvalid} (@leosocy)
  • 7c4ef11: feat(diff): add ClassifyRegistryErr helper (@leosocy)
  • 8fd6456: docs(diff): note string-match brittleness + case-ordering rationale (@leosocy)
  • d26e86d: feat(diff): add ParseOutputSpec + strict-prefix BASELINE-SPEC (@leosocy)
  • 4acb9e4: refactor(diff): move ParseBaselineSpec tests to bundle_spec_test.go (@leosocy)
  • 647e989: feat(imageio): add BuildSystemContext flag translator (@leosocy)
  • 03b327a: docs(imageio): correct OptionalBoolPtr comment (not test-only) (@leosocy)
  • cb295c6: refactor(importer): transport-agnostic baselines + lazy blob fetch (@leosocy)
  • c8e3d15: fix(importer): include 'oci' transport in enforceOutputCompat check (@leosocy)
  • 28b5f6a: fix(importer): preserve error context + enforceOutputCompat coverage + oci mkdir (@leosocy)
  • 3a820ee: feat(registrytest): in-process OCI registry harness (@leosocy)
  • c58545a: feat(registrytest): WithTLS option for self-signed HTTPS (@leosocy)
  • b369865: feat(registrytest): WithInjectFault for retry-path tests (@leosocy)
  • fd36b13: test(importer): pull baseline from in-process registry (@leosocy)
  • 8b51f61: test(importer): push reconstructed image to registry (@leosocy)
  • 7121882: test(importer): assert lazy baseline fetch (@leosocy)
  • 8ee9db2: feat(importer): --retry-times retry loop on transient 5xx (@leosocy)
  • b0d39ec: refactor(importer): cap retry backoff at 30s + document retryable patterns (@leosocy)
  • ac213f2: feat(cmd): accept docker://, oci:, dir: on image positionals (@leosocy)
  • e174e8e: feat(cmd): shared installRegistryFlags helper (@leosocy)
  • 31e1d37: feat(cmd): apply accepts registry TARGET-IMAGE; drops --image-format (@leosocy)
  • 0ca7fc2: feat(cmd): unbundle accepts OUTPUT-SPEC; installs registry flags (@leosocy)
  • 4ccf19c: feat(cmd): migration hints on bare TARGET-IMAGE / dir OUTPUT-SPEC (@leosocy)
  • 5a701e5: refactor(cmd): fix transport comment + drop duplicate unbundle help test (@leosocy)
  • dd2d8f8: test(cmd): registry integration matrix for diffah apply (@leosocy)
  • 1f18fdf: test(cmd): multi-image unbundle across registry + filesystem (@leosocy)
  • 0f105f1: docs(compat): document Phase 2 registry surface and exit mapping (@leosocy)
  • 199de98: docs: CHANGELOG entry for Phase 2 registry-native import (@leosocy)
  • 1e0fe6b: style(phase2): fix golangci-lint findings + gofmt across the batch (@leosocy)
  • e715ded: refactor(phase2): simplify sweep — drop lazyBlobFetcher, strip task refs, tighten comments (@leosocy)
  • fe0a048: style(imageio): scope gosec G703 nolint on fileExists stat call (@leosocy)
  • 71488c2: Merge pull request #14 from leosocy/spec/v2-phase2-registry-native-import (@leosocy)
  • d4e25aa: Phase 3: registry-native export + cosign-compatible signing (#15) (@leosocy)
  • 41fbf11: Phase 4: delta quality & throughput (#16) (@leosocy)
  • 81718bc: refactor: small cleanups from PR #14/#15/#16 review (#17) (@leosocy)
  • 004ec03: chore(repo): prepare for open-source readiness (#18) (@leosocy)
  • d1fe922: feat(importer): dedupe baseline blob fetches across all images in a bundle (#26) (@leosocy)
  • f943fae: chore(deps): bump docker/setup-buildx-action from 3 to 4 (#19) (@dependabot[bot])
  • 7114461: chore(deps): bump goreleaser/goreleaser-action from 6 to 7 (#21) (@dependabot[bot])
  • 7e5a755: chore(deps): bump golang.org/x/crypto in the go-dependencies group (#25) (@dependabot[bot])
  • bcaee23: chore(deps): bump actions/setup-go from 5 to 6 (#24) (@dependabot[bot])
  • f4b7690: chore(deps): bump alpine from 3.20 to 3.23 (#22) (@dependabot[bot])
  • 039518d: chore(deps): bump docker/login-action from 3 to 4 (#23) (@dependabot[bot])
  • c5f88c7: chore(deps): bump docker/setup-qemu-action from 3 to 4 (#20) (@dependabot[bot])
  • c8dd95d: feat(importer): apply correctness & resilience — PR1 (B1/B2 errors) (#27) (@leosocy)
  • b2b7eb3: feat(importer): apply correctness & resilience — PR2 (end-to-end invariant) (#28) (@leosocy)
  • 3b26ac0: feat(importer): apply correctness & resilience — PR3 (preflight) (#31) (@leosocy)
  • f275485: feat(config): YAML config file (Phase 5.2) (#32) (@leosocy)
  • f5143e5: feat(doctor): authfile / tmpdir / network / config checks (Phase 5.1) (#33) (@leosocy)
  • 80412c9: feat(inspect): per-layer table, waste, top-N, histogram (Phase 5.3) (#34) (@leosocy)
  • a264de6: feat(recipes): Phase 5.6 cookbook — four recipes + CI smokes (#35) (@leosocy)
  • baa64c2: chore(deps): bump actions/checkout from 4 to 6 (#29) (@dependabot[bot])
  • 3bd8263: chore(deps): bump github.com/mattn/go-isatty (#30) (@dependabot[bot])
  • e11965a: feat(release): Homebrew tap publishing (Phase 5.4) (#36) (@leosocy)
  • 70152fc: fix(release): use $document shell var, not Go template, in syft args (#37) (@leosocy)