Skip to content

chore(release): promote dev/v2.1 to main for v2.1.0 - #427

Merged
scttbnsn merged 469 commits into
mainfrom
dev/v2.1
Sep 4, 2026
Merged

chore(release): promote dev/v2.1 to main for v2.1.0#427
scttbnsn merged 469 commits into
mainfrom
dev/v2.1

Conversation

@scttbnsn

@scttbnsn scttbnsn commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Promotes the v2.1.0 release line to main. Everything on dev/v2.0 since v2.0.0 landed through reviewed PRs: the libpod write-inspection and owner-isolation fail-closed chain (#384, #386, #389, #390, #395, #394), the docs alignment pass (#422, #423), the read-side hardening from the adversarial review (#424), and the release metadata (#425).

v2.1.0-rc.1 is cut from the same tree so the tri-tool conformance gate can run against a published image before this merges. Proxy behaviour is identical between rc.1 and the GA tag; the GA delta is release metadata only.

Merge as a merge commit, not a squash, so the reconcile ancestry holds.

fix(configs): stop three presets opting into read exfiltration
google.golang.org/grpc v1.82.1 is vulnerable to heap exhaustion from
HTTP/2 DATA frame fragmentation, fixed upstream in 1.83.1. The pin is an
indirect requirement reached through sigstore-go's Rekor client on the
opt-in image_trust path, never the core proxy path.

Grype matches on module version rather than reachability, so the finding
failed both the "Security: Grype & Govulncheck" job and "CI: Verify"'s
Docker Build on every branch that ran them, including main at v2.0.0.
That is what was reddening Renovate PR #398, not anything the PR changed.

govulncheck reports zero reachable vulnerabilities either side of the
bump. go build, go vet and go test ./... are green on v1.83.2.
Four independent breaks, all in workflows that only run on a schedule, so
none of them gates a PR and all of them had been red for weeks.

- ci(quality): run Gremlins from the module root. The module moved to the
  repo root and this workflow kept working-directory: app plus
  ./internal/<pkg> package paths. gremlins unleash resolves the module
  from the cwd rather than walking up for go.mod, so all six shards failed
  in ~1s with "not in a Go module". Reproduced locally: ./internal/filter
  does not resolve from the root, ./app/internal/filter does.
- ci(quality): let the badge job take its own skip-and-warn path. The step
  inherits -e from GitHub's default bash -e {0}, and set -uo pipefail does
  not clear it, so an unparseable report aborted the step before the
  warn-and-continue branch below could run. || true on both assignments
  also fixes a latent pipefail + head -1 SIGPIPE case that returns 141
  from a pipeline which had already parsed the value.
- ci(quality): anchor the Engine API scrape to the version heading. The
  bare v1.NN match picks up SVG path coordinates (v1.875, v1.125) from the
  page's inline icons, which is why the 2026-09-01 run demanded a bump to
  Engine API 1.875. Verified against the live page: the anchored pattern
  yields 1.55, matching the existing pin. A three-digit minor now fails
  loudly instead of becoming an alert.
- ci(security): pin the ZAP baseline job to ubuntu-24.04, the last
  ubuntu-latest of 38 jobs.

The pinned ceiling in app/testdata/docker-api/max-supported-version.txt is
correct at 1.55 and is deliberately not touched.
zizmor started reporting two self-repository findings on release-cut.yml
and release-from-tag.yml, which blocks every push from the repo. Neither
workflow changed; the audit is new.

Two separate problems fell out of chasing it.

- ci(quality): pass --config to zizmor explicitly. Auto-discovery resolves
  the config relative to the repository root, and in a linked worktree that
  resolves to the main checkout. A push from .claude/worktrees/<name> was
  auditing the branch's workflows against the main checkout's
  .github/zizmor.yml, so editing the config on a branch had no effect on
  that branch's own pre-push run. This repo keeps four worktrees, so that
  is the normal case, not an edge one.
- ci(quality): ignore self-repository for the two release workflows.
  zizmor wants `uses: $/.github/actions/verify-ci-success` over the
  workspace-relative form, and it is right: GitHub shipped $/ on
  2026-07-30, it resolves to the running commit, and both call sites are
  already checked out at that ref, so the swap is a behavioural no-op. But
  actionlint 1.7.12, the current release and the one behind the pinned
  raven-actions/actionlint gate, rejects it with "invalid format because
  ref is missing". Verified both directions locally: applying the fix
  makes zizmor clean and actionlint fail, reverting it flips them back.
  Reding a required check to satisfy a low-severity style preference is
  the wrong trade, so it waits for actionlint support. The condition to
  revisit is written next to the ignore.

zizmor is a local pre-push hook only; no CI job runs it.
Prerequisite carried from the CI-quality-fixes branch so this branch can
push at all. zizmor 1.30.0's new self-repository audit reports two low
findings on release-cut.yml and release-from-tag.yml, exits 12, and refuses
every push from the repo. Neither workflow changed.

- Pass --config to zizmor explicitly. Auto-discovery resolves the config
  relative to the repository root, which in a linked worktree is the main
  checkout, so a push from .claude/worktrees/<name> audits the branch's
  workflows against a different branch's config.
- Ignore self-repository for the two release workflows. zizmor's suggested
  `uses: $/...` is officially correct and behaviourally identical here, but
  actionlint 1.7.12 rejects it as "invalid format because ref is missing"
  and actionlint is a required check. The revisit condition is recorded
  next to the ignore.

Duplicated deliberately: this same commit is on
fix/red-scheduled-quality-workflows, which carries the CHANGELOG entry for
it. Whichever lands first, the other rebases to nothing.
- fix(ci): match the exact `v1.NN API changes` heading, not any
  `v1.NN API` / `API v1.NN` pair, so meta tags such as
  `<meta content="API v1.125">` can't outsort the real version
- fix(ci): `|| true` on the extraction pipeline so a no-hit scrape
  reaches the step's own ::error diagnostic instead of aborting
  under `set -e` before it, the same bug class fixed in the badge
  job on this branch
- fix(ci): reject minors >= 100 rather than > 999; two-digit minors
  are the only plausible shape and a three-digit one is markup
- chore(ci): scope the zizmor self-repository ignore to the two
  `uses:` lines (release-cut.yml:61, release-from-tag.yml:155) so
  any other workspace-relative reference in either file still fires
The monthly Gremlins matrix hardcoded filter, proxy, config, httpjson,
logging and cmd, so the 97.8% badge described a sixth of app/internal.
The matrix now comes from scripts/ci/mutation-matrix.sh at run time:
every package with both source and tests, minus the testcert/testhelp
fixtures, 34 legs today. The badge job reads its expected-report count
from the same discover step, so the count and the matrix cannot drift,
and the sync test runs the script instead of counting YAML entries.

Matrix and package values move into env so the run scripts carry no
inline expressions. The badge job summary gains a per-package
killed/lived/efficacy table. Pushing a mutation/* branch runs this file
from that branch, which workflow_dispatch cannot do until the file is
on main; badge commits stay gated to the default branch. max-parallel
matches the nightly fuzz ceiling so a leg is never lost to runner
concurrency, and the concurrency group includes the ref so a branch run
cannot cancel the monthly one.

- ci(quality): derive the Gremlins matrix from a discover job
- test(ci): check discover wiring and run the matrix script
- docs(changelog): record the widened matrix and the expected score drop
Prerequisite carried from the CI-quality-fixes branch so this branch can
push at all. zizmor 1.30.0's new self-repository audit reports two low
findings on release-cut.yml and release-from-tag.yml, exits 12, and refuses
every push from the repo. Neither workflow changed.

- Pass --config to zizmor explicitly. Auto-discovery resolves the config
  relative to the repository root, which in a linked worktree is the main
  checkout, so a push from .claude/worktrees/<name> audits the branch's
  workflows against a different branch's config.
- Ignore self-repository for the two release workflows. zizmor's suggested
  `uses: $/...` is officially correct and behaviourally identical here, but
  actionlint 1.7.12 rejects it as "invalid format because ref is missing"
  and actionlint is a required check. The revisit condition is recorded
  next to the ignore.

Duplicated deliberately: this same commit is on
fix/red-scheduled-quality-workflows, which carries the CHANGELOG entry for
it. Whichever lands first, the other rebases to nothing.

(cherry picked from commit 7f330ec)
Run 33650478849 expanded zero Gremlins legs: the script's JSON carried a
top-level count beside include, and strategy.matrix reads any key other
than include/exclude as a dimension, so the job failed to expand and the
badge step saw 0 of 34 reports. The script now emits only include, the
discover step derives count from its length, and the sync test asserts
the matrix JSON has exactly one key.
… migration pages

G6: registry allowlist doc no longer claims push is checked, only pull.
G11: presets.mdx documents Homarr's undocumented removeAll gap and opt-in snippet.
G18: migration.mdx notes ALLOW_* works independent of POST, unlike real Tecnativa.
G20: configuration.mdx gets a Multiple Listeners section for listeners/allowed_profiles/mount_on.
G21: configuration.mdx corrects socket_mode to cover both 0600 and 0660.
G22: admin.mdx corrects the disabled-admin response from 404 to default-deny 403.
G23: configuration.mdx lists all ten granular ALLOW_* compat vars, not five.
G24: configuration.mdx documents the five serve override flags next to Precedence.
G25: configuration.mdx's audit-log sample gets the four trace-correlation fields.
G26: migration.mdx's CetusGuard table gets the backend-TLS row and repeated -frontend-addr note.
G27: migration.mdx's CetusGuard section notes the TLS 1.2->1.3 cutover requirement.
G38: CLAUDE.md scopes the stdlib-only claim to execution, not package linkage.
G41: migration.mdx fixes the config path and names the granular endpoint-config gates.
G42: presets.mdx corrects the drydock preset's Denies/Allows lines.
G43: drydock-with-compose.yaml and presets.mdx document the post_start exec denial.
G45: drydock.yaml's distribution-grant comment is reattributed away from drydock.
…n-matrix

Run 33651423252 expanded all 34 legs and every one died in under a
minute with "not in a Go module": the step still ran from app/ while
go.mod lives at the repo root. #399 fixes that on its branch (no
working-directory, ./app/internal/... paths, root-level report paths,
|| true on the report greps). Merging it here so the widened matrix
runs on the fixed step; the matrix script now emits ./app/internal/<pkg>.

Conflicts: zizmor.yml takes #399's line-scoped ignores; the matrix block
keeps the fromJSON discover output; the score loop keeps the per-package
parsing and gains #399's guarded greps.
…ed packages

Review findings on #401. The badge job carried contents: write and a
persisted credential into runs triggered from mutation/* branches, where
the workflow file is whatever the branch says. Aggregation now lives in
a read-only score job that runs on every trigger and publishes the
per-package table; the badge commit is its own job with a job-level if
on the default branch, so it is never scheduled for a branch run and the
credential never exists there.

Package discovery walks app/internal recursively (buildkitproto has ten
generated sub-packages; none has tests today, so the matrix is still 34
legs), skipping testdata trees, with nested paths named path-with-dashes.
A report that says "No results to report." counts as zero killed, zero
lived: dockerclient produced one on the first widened run and the badge
job rejected the whole set over it.

- test(ci): derive the eligible set recursively and compare it to the matrix
- test(ci): assert the write permission appears only in the default-branch job
CetusGuard accepts TLS 1.2 and sockguard's listener requires 1.3, so the
keypair is reusable but the handshake isn't guaranteed. Website half of
G27; the migration guide half is in the batch A PR.
… matching

Adds direct table-driven tests for the collection-keyword exclusion
boundaries in libpod_paths.go and paths.go (container/pod/network/volume/
secret identifier matchers, needsOwnerFilter, imageIdentifier), plus
targeted tests for the namespace-sharing and embedded-reference verdict
accumulation in middleware.go, the request-body size boundary in
mutateJSONBody, and the response-size and unclassifiable-section-logging
boundaries in system_data_usage.go. Targets 50 of the 51 lived mutants from
the run-33653294202 ownership mutation report; one CONDITIONALS_BOUNDARY
mutant on a length-vs-zero guard is equivalent and left unaddressed.
The comment said buildAdminValidator mirrors the offline `sockguard validate`
pipeline, named validateAndCompileRules, and promised an operator's CI gate
and the running proxy reach the same verdict for the same YAML. It calls
validateAndCompileRulesStructural, which skips every filesystem dereference,
so a candidate naming TLS material that is missing, unreadable, or not PEM
passes the endpoint and fails the CLI. The body comment right below it always
said so; the doc comment contradicted it.
Three Security entries (the non-array list body refusal, the representation
headers on a rewritten body, and LogPath / GraphDriver.Data under
redact_mount_paths), one Tests entry for the matcher differential, and one
Documentation entry for the admin validator comment. Filed under Security
rather than Fixed because every neighbour in that section is the same kind of
change: a read-side disclosure or a fail-open closed.
…tion

fix(libpod)!: isolate unsafe stats and image batch reads
…-changelog-website

# Conflicts:
#	CHANGELOG.md
#	README.md
docs(site): align the docs pages with dev/v2.0
…bsite

docs: align README, CHANGELOG and website with dev/v2.0
fix(visibility): fail closed on non-array list bodies and finish read-side redaction
docs(release): prepare v2.1.0 GA surfaces
@scttbnsn

scttbnsn commented Sep 4, 2026

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@vercel

vercel Bot commented Sep 4, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
sockguard-website Ready Ready Preview Sep 4, 2026 1:04am UTC

@coderabbitai

coderabbitai Bot commented Sep 4, 2026

Copy link
Copy Markdown
⚠️ Action not completed

Review skipped: 356 files exceed the limit of 100.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai

coderabbitai Bot commented Sep 4, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 361 files, which is 261 over the limit of 100.

To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

Usage-priced reviews support at most 300 files.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Team

Run ID: 7f4cf921-bec1-4571-9f58-a9f8fea8b97f

📥 Commits

Reviewing files that changed from the base of the PR and between 392a531 and e630480.

⛔ Files ignored due to path filters (2)
  • CHANGELOG.md is excluded by !CHANGELOG.md
  • go.sum is excluded by !**/*.sum
📒 Files selected for processing (361)
  • .github/workflows/ci-verify.yml
  • .github/workflows/quality-api-version-watch.yml
  • .github/workflows/quality-fuzz-monthly.yml
  • .github/workflows/quality-fuzz-nightly.yml
  • .github/workflows/quality-mutation-monthly.yml
  • .github/workflows/quality-tri-tool-conformance.yml
  • .github/workflows/release-from-tag.yml
  • .github/workflows/security-grype.yml
  • .github/workflows/security-scorecard.yml
  • .github/workflows/security-zap-baseline.yml
  • .github/zizmor.yml
  • .nvmrc
  • AGENTS.md
  • CLAUDE.md
  • CONTRIBUTING.md
  • README.md
  • RELEASING.md
  • SECURITY.md
  • app/configs/cis-docker-benchmark.yaml
  • app/configs/discovery.yaml
  • app/configs/diun.yaml
  • app/configs/drydock-with-build.yaml
  • app/configs/drydock-with-compose.yaml
  • app/configs/drydock-with-mediated-build.yaml
  • app/configs/drydock-with-selfupdate.yaml
  • app/configs/drydock.yaml
  • app/configs/github-actions-runner.yaml
  • app/configs/gitlab-runner.yaml
  • app/configs/homarr.yaml
  • app/configs/homepage.yaml
  • app/configs/multi-listener.yaml
  • app/configs/podman-readonly.yaml
  • app/configs/portainer.yaml
  • app/configs/portwing-with-build.yaml
  • app/configs/portwing-with-compose.yaml
  • app/configs/portwing-with-exec.yaml
  • app/configs/portwing-with-mediated-build.yaml
  • app/configs/portwing.yaml
  • app/configs/traefik.yaml
  • app/configs/watchtower.yaml
  • app/differential/classifier.go
  • app/differential/path_evasion_extended_test.go
  • app/integration/cis_docker_benchmark_conformance_test.go
  • app/integration/drydock_preset_conformance_test.go
  • app/integration/github_actions_runner_conformance_test.go
  • app/integration/gitlab_runner_conformance_test.go
  • app/integration/multi_listener_integration_test.go
  • app/integration/podman_libpod_system_df_test.go
  • app/integration/portwing_preset_conformance_test.go
  • app/internal/admin/admin_test.go
  • app/internal/admin/policy_version_test.go
  • app/internal/buildkitproxy/bridge.go
  • app/internal/buildkitproxy/bridge_backpressure_test.go
  • app/internal/buildkitproxy/bridge_dos_test.go
  • app/internal/buildkitproxy/bridge_leak_test.go
  • app/internal/buildkitproxy/bridge_sessionmediated_test.go
  • app/internal/buildkitproxy/bridge_test.go
  • app/internal/buildkitproxy/controlinfo.go
  • app/internal/buildkitproxy/controlinfo_test.go
  • app/internal/buildkitproxy/descriptor_manifest_test.go
  • app/internal/buildkitproxy/filesync_test.go
  • app/internal/buildkitproxy/grpcstatus.go
  • app/internal/buildkitproxy/grpcstatus_test.go
  • app/internal/buildkitproxy/leak_helpers_test.go
  • app/internal/buildkitproxy/limits_test.go
  • app/internal/buildkitproxy/mediator.go
  • app/internal/buildkitproxy/mediator_test.go
  • app/internal/buildkitproxy/registry.go
  • app/internal/buildkitproxy/registry_test.go
  • app/internal/buildkitproxy/session_test.go
  • app/internal/buildkitproxy/solve_test.go
  • app/internal/buildkitproxy/streamframing_test.go
  • app/internal/buildkitproxy/streammediation_test.go
  • app/internal/buildkitproxy/testhelpers_test.go
  • app/internal/buildkitproxy/upgrade.go
  • app/internal/buildkitproxy/upgrade_test.go
  • app/internal/clientacl/cache.go
  • app/internal/clientacl/cache_test.go
  • app/internal/clientacl/coverage_gaps_test.go
  • app/internal/clientacl/middleware.go
  • app/internal/clientacl/peercred_linux_test.go
  • app/internal/cmd/coverage_gaps_test.go
  • app/internal/cmd/match.go
  • app/internal/cmd/match_test.go
  • app/internal/cmd/mutant_kill_test.go
  • app/internal/cmd/rule_reachability.go
  • app/internal/cmd/rules.go
  • app/internal/cmd/rules_libpod_image_write_test.go
  • app/internal/cmd/rules_read_exfil_refusal_test.go
  • app/internal/cmd/rules_test.go
  • app/internal/cmd/serve.go
  • app/internal/cmd/serve_admin_validate_oracle_test.go
  • app/internal/cmd/serve_chain_test.go
  • app/internal/cmd/serve_deps.go
  • app/internal/cmd/serve_deps_gaps_test.go
  • app/internal/cmd/serve_gaps_test.go
  • app/internal/cmd/serve_libpod_integration_test.go
  • app/internal/cmd/serve_listeners_gaps_test.go
  • app/internal/cmd/serve_local_endpoint_posture_test.go
  • app/internal/cmd/serve_policy_bundle_test.go
  • app/internal/cmd/serve_reload.go
  • app/internal/cmd/serve_reload_flags_test.go
  • app/internal/cmd/serve_reload_test.go
  • app/internal/cmd/serve_resource_limit_test.go
  • app/internal/cmd/serve_run_test.go
  • app/internal/cmd/serve_test.go
  • app/internal/cmd/serve_test_helpers_test.go
  • app/internal/cmd/serve_upstream_timeout_test.go
  • app/internal/cmd/serve_warn_test.go
  • app/internal/cmd/upstream.go
  • app/internal/cmd/upstream_flavor_test.go
  • app/internal/cmd/upstream_test.go
  • app/internal/cmd/upstream_tls_config_test.go
  • app/internal/cmd/upstream_tls_deprecation_test.go
  • app/internal/config/compat.go
  • app/internal/config/compat_container_remove_test.go
  • app/internal/config/compat_test.go
  • app/internal/config/compose_example_sync_test.go
  • app/internal/config/config.go
  • app/internal/config/container_remove_config_test.go
  • app/internal/config/coverage_gap_test.go
  • app/internal/config/filter_options.go
  • app/internal/config/filter_options_test.go
  • app/internal/config/listeners_fuzz_test.go
  • app/internal/config/listeners_test.go
  • app/internal/config/load.go
  • app/internal/config/load_test.go
  • app/internal/config/mutation_test.go
  • app/internal/config/network_endpoint_config_test.go
  • app/internal/config/preset_test.go
  • app/internal/config/tls.go
  • app/internal/config/upstream_hijack_inactivity_timeout_test.go
  • app/internal/config/validate.go
  • app/internal/config/validate_gaps_test.go
  • app/internal/config/validate_structural_test.go
  • app/internal/config/validate_test.go
  • app/internal/dockerfileinspect/dockerfileinspect_test.go
  • app/internal/dockerfilters/dockerfilters.go
  • app/internal/dockerfilters/dockerfilters_test.go
  • app/internal/dockerfilters/injected.go
  • app/internal/dockerfilters/injected_test.go
  • app/internal/dockerresource/labels_test.go
  • app/internal/filter/bench_test.go
  • app/internal/filter/build.go
  • app/internal/filter/container_archive.go
  • app/internal/filter/container_archive_test.go
  • app/internal/filter/container_create_test.go
  • app/internal/filter/container_remove.go
  • app/internal/filter/container_remove_preset_conformance_test.go
  • app/internal/filter/container_remove_test.go
  • app/internal/filter/container_update.go
  • app/internal/filter/container_update_test.go
  • app/internal/filter/diun_preset_conformance_test.go
  • app/internal/filter/drydock_preset_conformance_test.go
  • app/internal/filter/exec_test.go
  • app/internal/filter/fuzz_test.go
  • app/internal/filter/glob_test.go
  • app/internal/filter/homarr_preset_conformance_test.go
  • app/internal/filter/image_load.go
  • app/internal/filter/image_load_test.go
  • app/internal/filter/image_pull.go
  • app/internal/filter/json_mutate_test.go
  • app/internal/filter/libpod_container_create_test.go
  • app/internal/filter/libpod_container_update.go
  • app/internal/filter/libpod_container_write_test.go
  • app/internal/filter/libpod_image_pull_test.go
  • app/internal/filter/libpod_image_write_test.go
  • app/internal/filter/libpod_network.go
  • app/internal/filter/libpod_network_connect_test.go
  • app/internal/filter/libpod_network_test.go
  • app/internal/filter/libpod_network_update_test.go
  • app/internal/filter/libpod_normalize.go
  • app/internal/filter/libpod_normalize_test.go
  • app/internal/filter/libpod_unscopeable_reads.go
  • app/internal/filter/libpod_unscopeable_reads_test.go
  • app/internal/filter/libpod_unscopeable_writes.go
  • app/internal/filter/libpod_unscopeable_writes_test.go
  • app/internal/filter/middleware.go
  • app/internal/filter/middleware_method_dispatch_test.go
  • app/internal/filter/middleware_test.go
  • app/internal/filter/mutation_kill_test.go
  • app/internal/filter/mutation_test.go
  • app/internal/filter/network.go
  • app/internal/filter/network_test.go
  • app/internal/filter/norace_test.go
  • app/internal/filter/podman_readonly_preset_conformance_test.go
  • app/internal/filter/portwing_compose_preset_conformance_test.go
  • app/internal/filter/portwing_preset_conformance_test.go
  • app/internal/filter/preset_unscopeable_reads_test.go
  • app/internal/filter/race_test.go
  • app/internal/filter/registry_auth_test.go
  • app/internal/filter/resource_limit_guard.go
  • app/internal/filter/resource_limit_guard_test.go
  • app/internal/filter/rules.go
  • app/internal/filter/rules_matcher_differential_test.go
  • app/internal/filter/rules_test.go
  • app/internal/filter/security_test.go
  • app/internal/filter/swarm.go
  • app/internal/filter/swarm_test.go
  • app/internal/filter/traefik_homepage_preset_conformance_test.go
  • app/internal/filter/watchtower_preset_conformance_test.go
  • app/internal/glob/glob.go
  • app/internal/glob/glob_test.go
  • app/internal/health/health_test.go
  • app/internal/health/readiness_test.go
  • app/internal/imagefetch/imagefetch_test.go
  • app/internal/imagefetch/input_limits_test.go
  • app/internal/imageselector/query.go
  • app/internal/imageselector/query_test.go
  • app/internal/imagetrust/imagetrust_test.go
  • app/internal/imagetrust/verify_candidates_mode_test.go
  • app/internal/inspectcache/cache_test.go
  • app/internal/logging/access_test.go
  • app/internal/logging/audit_test.go
  • app/internal/logging/resource_policy_test.go
  • app/internal/metrics/metrics.go
  • app/internal/metrics/metrics_test.go
  • app/internal/ownership/commit.go
  • app/internal/ownership/commit_test.go
  • app/internal/ownership/coverage_gap_test.go
  • app/internal/ownership/identifier_collection_test.go
  • app/internal/ownership/image_batch.go
  • app/internal/ownership/image_batch_test.go
  • app/internal/ownership/image_effects.go
  • app/internal/ownership/image_effects_test.go
  • app/internal/ownership/label_filter_compose_test.go
  • app/internal/ownership/libpod_coverage_test.go
  • app/internal/ownership/libpod_paths.go
  • app/internal/ownership/libpod_test.go
  • app/internal/ownership/middleware.go
  • app/internal/ownership/middleware_test.go
  • app/internal/ownership/paths.go
  • app/internal/ownership/system_data_usage.go
  • app/internal/ownership/system_data_usage_test.go
  • app/internal/policybundle/policybundle_test.go
  • app/internal/proxy/hijack.go
  • app/internal/proxy/hijack_responsefilter_disjoint_test.go
  • app/internal/proxy/hijack_test.go
  • app/internal/proxy/proxy_test.go
  • app/internal/proxy/timeout.go
  • app/internal/proxy/timeout_test.go
  • app/internal/ratelimit/middleware_test.go
  • app/internal/ratelimit/priority_test.go
  • app/internal/ratelimit/ratelimit_test.go
  • app/internal/reload/diff.go
  • app/internal/reload/inode_unix_test.go
  • app/internal/reload/reload_test.go
  • app/internal/reload/upstream_flavor_test.go
  • app/internal/responsefilter/filter.go
  • app/internal/responsefilter/filter_coverage_test.go
  • app/internal/responsefilter/filter_test.go
  • app/internal/responsefilter/fuzz_test.go
  • app/internal/responsefilter/libpod_filter.go
  • app/internal/responsefilter/libpod_filter_test.go
  • app/internal/responsefilter/libpod_system_data_usage_test.go
  • app/internal/responsefilter/system_data_usage_filter.go
  • app/internal/responsefilter/system_data_usage_filter_test.go
  • app/internal/responsefilter/system_data_usage_legacy_shape_test.go
  • app/internal/sigverify/sigverify_test.go
  • app/internal/upstream/docker_env_test.go
  • app/internal/upstream/endpoint.go
  • app/internal/upstream/mutual_tls_test.go
  • app/internal/upstream/resolver.go
  • app/internal/upstream/upstream_test.go
  • app/internal/upstreamflavor/flavor.go
  • app/internal/upstreamflavor/flavor_test.go
  • app/internal/upstreamflavor/fuzz_test.go
  • app/internal/visibility/fuzz_test.go
  • app/internal/visibility/image_export.go
  • app/internal/visibility/image_export_test.go
  • app/internal/visibility/libpod_coverage_test.go
  • app/internal/visibility/libpod_events.go
  • app/internal/visibility/libpod_fuzz_test.go
  • app/internal/visibility/libpod_paths.go
  • app/internal/visibility/libpod_test.go
  • app/internal/visibility/meta_cache_test.go
  • app/internal/visibility/middleware.go
  • app/internal/visibility/middleware_filter_writer_test.go
  • app/internal/visibility/middleware_test.go
  • app/internal/visibility/podman_events.go
  • app/internal/visibility/podman_events_fuzz_test.go
  • app/internal/visibility/podman_events_test.go
  • app/internal/visibility/system_data_usage.go
  • app/internal/visibility/system_data_usage_test.go
  • chart/sockguard/Chart.yaml
  • docs/content/docs/admin.mdx
  • docs/content/docs/cis-docker-benchmark.mdx
  • docs/content/docs/configuration.mdx
  • docs/content/docs/getting-started.mdx
  • docs/content/docs/index.mdx
  • docs/content/docs/migration.mdx
  • docs/content/docs/multi-host.mdx
  • docs/content/docs/observability.mdx
  • docs/content/docs/podman.mdx
  • docs/content/docs/presets.mdx
  • docs/content/docs/roadmap.mdx
  • docs/content/docs/security.mdx
  • docs/content/docs/verification.mdx
  • docs/src/lib/analytics-client.ts
  • docs/src/lib/analytics-contract.ts
  • examples/compose/cis-docker-benchmark/sockguard.yaml
  • examples/compose/drydock/sockguard.yaml
  • examples/compose/github-actions-runner/sockguard.yaml
  • examples/compose/gitlab-runner/sockguard.yaml
  • examples/compose/multi-host/sockguard.yaml
  • examples/compose/portainer/sockguard.yaml
  • examples/compose/portwing/sockguard.yaml
  • examples/compose/traefik/README.md
  • examples/compose/traefik/docker-compose.yml
  • examples/compose/traefik/sockguard.yaml
  • examples/compose/tri-tool/sockguard-with-exec.yaml
  • examples/compose/tri-tool/sockguard.yaml
  • examples/compose/watchtower/README.md
  • examples/compose/watchtower/docker-compose.yml
  • examples/compose/watchtower/sockguard.yaml
  • go.mod
  • knip.json
  • lefthook.yml
  • renovate.json
  • scripts/analytics-client.test.mjs
  • scripts/analytics-contract.test.mjs
  • scripts/check-conflict-markers.mjs
  • scripts/check-conflict-markers.test.mjs
  • scripts/ci/mutation-matrix.sh
  • scripts/engine-api-latest.sh
  • scripts/engine-api-latest.test.mjs
  • scripts/extract-changelog-entry.mjs
  • scripts/extract-changelog-entry.test.mjs
  • scripts/homebrew-release.test.mjs
  • scripts/mutation-badge-matrix.test.mjs
  • scripts/release-metadata.test.mjs
  • scripts/renovate-release-contract.test.mjs
  • scripts/reusable-ci-config.test.mjs
  • scripts/tri-tool-conformance-run-matrix.test.mjs
  • scripts/tri-tool-conformance/README.md
  • scripts/tri-tool-conformance/controller-clock-offset.cjs
  • scripts/tri-tool-conformance/controller-header-proxy.cjs
  • scripts/tri-tool-conformance/lib.sh
  • scripts/tri-tool-conformance/normalize-routes.jq
  • scripts/tri-tool-conformance/run-matrix.sh
  • scripts/tri-tool-conformance/testdata/access-log-fixture.jsonl
  • scripts/workflow-fuzz-budget.test.mjs
  • website/src/app/data/comparison-rows.ts
  • website/src/app/data/faq.ts
  • website/src/app/data/features.ts
  • website/src/app/page-data.test.mjs
  • website/src/app/sitemap.test.mjs
  • website/src/app/sitemap.ts
  • website/src/components/compare-matrix.tsx
  • website/src/components/compare-section.tsx
  • website/src/components/github-badges.tsx
  • website/src/lib/analytics-client.ts
  • website/src/lib/analytics-contract.test.mjs
  • website/src/lib/analytics-contract.ts
  • website/src/lib/comparison-route-data/11notes.tsx
  • website/src/lib/comparison-route-data/cetusguard.tsx
  • website/src/lib/comparison-route-data/linuxserver.tsx
  • website/src/lib/comparison-route-data/tecnativa.tsx
  • website/src/lib/comparison-route-data/wollomatic.tsx
  • website/src/lib/site-config.ts
  • website/src/lib/site-content.ts

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

release-cut asserts renovate.json targets the branch the prerelease is cut from, and v2.1.0-rc.1 cuts from dev/v2.1. Contract test and the RELEASING.md star-chart example follow.
chore(config): point Renovate at dev/v2.1 for the v2.1.0 line
@vercel

vercel Bot commented Sep 4, 2026

Copy link
Copy Markdown

Deployment failed for project sockguard-website with the following error:

Resource is limited - try again in 24 hours (more than 100, code: "api-deployments-free-per-day").

Learn More: https://vercel.com/codeswhat?upgradeToPro=build-rate-limit

The v2.1.0-rc.1 CHANGELOG entry was 125,426 bytes, over GitHub's
125,000-character release body cap. GitHub silently truncated the
published body, and the byte-equality check in release-from-tag.yml
caught the mismatch and skipped every downstream job (Docker push,
QA-6, Homebrew).

extract-changelog-entry.mjs gains an optional --max-bytes flag. When
the extracted entry exceeds it, the output is cut at the last line
boundary that fits and a short footer pointing back at CHANGELOG.md
is appended, all while staying under the byte cap. Default behavior
(no flag) is unchanged, so release-cut.yml's validation step keeps
working as-is. release-from-tag.yml now passes --max-bytes 120000 on
its extraction, leaving a safety margin under GitHub's limit.
rc.1 failed to publish because its release notes exceeded GitHub's
body limit (see fix/release-notes-body-limit). rc.2 re-cuts rc.1 with
no proxy changes, using the now-capped release-notes tooling. The
2.1.0 entry now names rc.2 as the promoted candidate.
fix(release): cap release notes at GitHub's body limit
@scttbnsn
scttbnsn deployed to release-publish September 4, 2026 02:28 — with GitHub Actions Active

@biggest-littlest biggest-littlest left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Promotion of the v2.1.0 line, tri-tool gate green on the rc image, tree matches dev/v2.1.

@ALARGECOMPANY ALARGECOMPANY left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Promotion of the v2.1.0 line, tri-tool gate green on the rc image, tree matches dev/v2.1.

@scttbnsn
scttbnsn merged commit 61e51a7 into main Sep 4, 2026
95 of 97 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants