Skip to content

packaging(ns8): fix live-test findings - #135

Merged
shockalotti merged 1 commit into
mainfrom
packaging/ns8-live-test-fixes
Oct 13, 2026
Merged

shockalotti merged 1 commit into
mainfrom
packaging/ns8-live-test-fixes

Conversation

@shockalotti

Copy link
Copy Markdown
Contributor

Follow-up to #102, verified live on a single-node Rocky 9 cluster (minipc LXD VM, since torn down). See commit message for the four fixes. Live-verified: install, configure, Traefik route (root 302, /admin 200), SQLite persistence, key byte-identical across reconfigures, remove with route cleanup. Still open: cluster backup/restore (no repo available on the test node) and the robot suite (needs a wired-up test cluster). After merge, worth one clean retest from the published image.

…its, RE2 pattern, CALNODE_IMAGE env

Verified against a real single-node NS8 cluster (Rocky 9 VM). Findings:
- add-module requires a create-module action to exist and exit 0; the
  cluster framework already provisions volumes, pre-pulls label images
  and writes CALNODE_IMAGE, so the module ships only a matching
  validate-input schema and no scripts.
- Action scripts must be committed executable (100755): the agent
  silently skips non-executable files, which made configure a no-op.
  CI now asserts indexed modes (this checkout has fileMode=false).
- Hostname pattern must be RE2-compatible: the validator rejects the
  Perl lookahead, so the length guard lives in maxLength instead.
- The unit and configure read the app ref from CALNODE_IMAGE in the
  module environment instead of build-time stamping; the label is the
  single source of truth.

@pullfrog pullfrog Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

✅ No new issues found.

Reviewed changes

  • App ref sourced from the label, not stamped. build-images.sh drops the __CALNODE_APP_IMAGE__ staging/sed block for a plain buildah add imageroot /imageroot; calnode.service runs ${CALNODE_IMAGE} and 20configure reads it from the environment. The label is now the single source of truth.
  • create-module/validate-input.json added (schema only, no step scripts) declaring {images: string[], volumes: object} with additionalProperties: false.
  • Exec bits restored on 20configure, 80start_services and 20read (100644 → 100755) — the agent skips non-executable action files.
  • RE2-compatible hostname pattern: the Perl lookahead (?=.{1,253}$) is gone, covered by the existing maxLength: 253.
  • Tolerant image pull: podman pull failure now falls back to podman image exists, so a registry outage cannot block a reconfigure.
  • CI guards: ! grep -rn '__CALNODE_APP_IMAGE__' imageroot/ plus an awk check asserting every non-validate-*.json file under imageroot/actions is mode 100755 in the git index.
  • Docs: README.md live-test status and tag scheme corrected; CLAUDE.md updated to the label-as-source-of-truth contract.

Verified during review: the create-module input is exactly {images, volumes} (cluster/actions/add-module/50update always populates both), so additionalProperties: false is safe; the module schema does not shadow the inherited core create-module steps (Go agent CreateTaskProcessor merges action dirs), so 05pullimages still writes CALNODE_IMAGE into state/environment; the awk check passes against the actual index; and no placeholder references remain anywhere.

Pullfrog  | View workflow run | Using deepseek-v4.1-flash | 𝕏

@shockalotti
shockalotti merged commit e3dae3e into main Oct 13, 2026
7 checks passed
@github-actions github-actions Bot locked and limited conversation to collaborators Oct 13, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant