Skip to content

fix(conformance,lint,release): public-ports class, lint continuation, worktree bundles, rehearse args, prerelease compare (D-0626 D-0615 D-1169 D-1107 D-1106) - #483

Merged
acamarata merged 6 commits into
mainfrom
dw2-plugins-7
Oct 25, 2026
Merged

acamarata merged 6 commits into
mainfrom
dw2-plugins-7

Conversation

@acamarata

Copy link
Copy Markdown
Contributor

Five small debt rows, one commit each (plus one CI wiring commit). Every fix has a test that fails on origin/main and passes here.

D-0626 permanent class for deliberate public ports

  • New scripts/conformance/public-ports.yaml: plugin, one container port, reason, no expiry. portbind gets -allow PORT; the match is on the exact target port (short and long syntax), so every other port of the plugin still has to bind 127.0.0.1. network_mode: host is never excused.
  • port-bind.sh reads the file; check.sh --public-ports FILE overrides it for tests; exceptions.sh validates it (complete rows, single port 1-65535, no duplicates).
  • The traefik port-bind exception is gone. traefik is listed for 80, 443 and 8444. 8444 is the upload entrypoint: loopback by default, public only when the operator sets TRAEFIK_UPLOAD_PUBLISH. The old blanket exception covered it silently; the per-port check surfaced it, so it needs a reviewer's eye.
  • Tests: portbind Go unit tests (TestAllow), fixtures.sh plants (listed port passes, other port / other plugin / host network / missing file fail, malformed and duplicate entries fail, the file does not expire after the cap date). Wiki page updated.

D-0615 password-URL lint plus infra/k8s nits

  • Lint: the line after a backslash-terminated URL line is a continuation whatever its word count (backslash must touch URL text, so curl http://x \ followed by -H "${TOKEN}" is not flagged); a trailing #... is stripped; a flow-sequence item boundary (comma, closing bracket) ends the URL. New reject and accept fixtures.
  • infra and k8s --help --json probe strips only --json and ParseBool-valid --json=<v>; --json=maybe now stays and the normal path refuses it.
  • parity-envelope.py: only None is read as an empty list; checks error.message is a string and the command is infra server <sub>. New test_parity_envelope.py.
  • ALREADY FIXED, not touched: k8s wantsJSON is already last-wins (D-0447, free/k8s/cmd/envelope.go).
  • Not done: a --json that is the value of another flag (--domain --json) is still stripped by the probe; fixing it needs flag-aware parsing, and the row's preferred resolution does not ask for it.

D-1169 bundles sibling autodetect

plugin-counts.sh now also tries $COMMON/../../bundles. test-plugin-counts-bundles-dir.sh builds a main checkout, a worktree and a sibling repo; the bundles case fails without the fix.

D-1107 rehearse.sh hang

--tag / --out with no value now exits 2 with a message. rehearse-args-test.sh runs each case under a watchdog; three cases hang on main. verify-signatures.sh has the same shift 2 || true but exits 2 on that path, so it is unchanged.

D-1106 version_is_newer precision

Numeric prerelease ids and core components are compared as digit strings (leading zeros dropped, longer wins, then byte order), not as awk doubles. test_version_is_newer.py (picked up by unittest discover); five long-id cases fail on main. The row's impact text describes a different finding (release-data not comparing platform hashes to the publish job's manifest). That is not addressed here.

Verification

  • cd scripts/conformance/portbind && GOFLAGS=-mod=readonly go test ./... && go vet ./... pass (70 tests).
  • cd free/infra && go test -mod=vendor ./... and cd free/k8s && go test -mod=vendor ./... pass.
  • bash scripts/conformance/check.sh --all --rules exceptions,port-bind passes on 131 plugins; --plugins traefik passes.
  • bash scripts/conformance/check.sh --fixtures: every new case passes. The only failures are the existing alpha/beta/gamma build rule (no Docker on this worker), same without my change.
  • bash scripts/ci/tests/test-lint-compose-password-urls.sh, scripts/lint-compose-password-urls.sh (68 fragments), test-plugin-counts-bundles-dir.sh, scripts/release/rehearse-args-test.sh, python3 -m unittest discover -s scripts/ci/tests (83 tests), python3 free/infra/scripts/test_parity_envelope.py, check-file-size.py, check-tracked-binaries.py pass.
  • hygiene.yml gets two steps for the new bash tests.

…s (D-0626)

public-ports.yaml names the plugin and the exact container port; port-bind
passes only those ports, so the traefik exception no longer excuses every
port of the plugin and no longer expires at the v1.5.0 cap.
…probe and parity nits (D-0615)

The password-URL lint treats the line after a backslash-terminated URL line
as a continuation whatever its word count, ignores a trailing comment and
ends the URL at a flow-sequence item boundary. The infra and k8s --help
--json probe strips only ParseBool-valid --json forms. parity-envelope.py
reads only None as an empty list and checks error.message and the
'infra server <sub>' command.
@acamarata
acamarata merged commit bb5b10f into main Oct 25, 2026
25 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.

1 participant