Qualify Fleet Node release artifacts - #992
Conversation
🔐 Codex Security Review
Review SummaryOverall Risk: NONE FindingsNo concrete security, correctness, or reliability issues were found in the reviewed diff. NotesThe authoritative diff matched the specified commit range. Shell syntax and ShellCheck validation passed for changed lines. The full installer test could not run because the review sandbox prohibits temporary-file creation. Generated by Codex Security Review | |
9b1cefb to
52a8357
Compare
52a8357 to
75a1407
Compare
75a1407 to
0dd43d4
Compare
0dd43d4 to
2a614d4
Compare
2a614d4 to
5b88dd5
Compare
Use the supported state-preserving uninstall during native package qualification and cleanup. The ephemeral CI runner no longer depends on the removed purge lifecycle.
5b88dd5 to
090cc1a
Compare
There was a problem hiding this comment.
🟡 Changes recommended
Add purge qualification and checks, or remove the unsupported purge claim.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Pull request overview
Qualifies Fleet Node release artifacts on native amd64 and arm64 systemd runners before upload.
Changes:
- Validates executable architecture and static linkage.
- Excludes the virtual test plugin from customer archives.
- Tests installation, upgrade, rollback, reinstall, and uninstall behavior.
File summaries
| File | Description |
|---|---|
deployment-files/fleetnode/tests/test-install-fleetnode.sh |
Updates installer fixtures and manifest assertions. |
deployment-files/fleetnode/tests/qualify-package.sh |
Exercises package lifecycle behavior, but does not test the claimed purge path. |
deployment-files/fleetnode/install-fleet-node.sh |
Adds constrained local qualification mode and updates the accepted manifest. |
.github/workflows/proto-fleet-artifact-build.yml |
Adds executable validation and native systemd qualification before upload. |
Review details
- Files reviewed: 4/4 changed files
- Comments generated: 1
- Review effort level: Balanced
💡 Configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Keep native systemd startup, static-link validation, failed-upgrade rollback, and state-preserving uninstall as the release gate. Remove checks already guaranteed by native execution, the installer, or its focused lifecycle suite, and syntax-check the qualifier in PR CI.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 955ef23c48
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
- Prove a known-good native systemd upgrade before fault injection
Run the preserved-state assertion with sudo so native qualification can traverse the protected state directory.
Remove group/world write permission from /opt on the disposable native runner before exercising Fleet Node's path-security checks.
Reviewable diff: +36/-24 across 3 files (excludes generated, test, and story files).
Summary
Fleet Node release artifacts are installed and exercised on native amd64 and arm64 systemd runners before upload. The customer archive contains only production plugins, and each executable must be a valid, statically linked ELF. The qualification stays intentionally narrow: it proves local startup, failed-upgrade rollback, and state-preserving uninstall without duplicating the full installer test suite.
Stack
With #990 and #991 merged, this PR's current diff is against
main. It exercises their explicit readiness and rollback contracts using the packaged artifact. The enrollment helper remains isolated in #989; signing, release publication policy, and runbooks remain out of scope here.How it works
ubuntu-latestamd64 andubuntu-24.04-armrunners.sudo, matching the customer privilege boundary.Areas of the code involved
.github/workflows/proto-fleet-artifact-build.yml.github/workflows/deployment-config-checks.ymldeployment-files/fleetnode/install-fleet-node.shdeployment-files/fleetnode/tests/qualify-package.shKey technical decisions & trade-offs
file://source and rejects root-path, architecture, and systemctl overrides.Testing & validation
bash -n deployment-files/fleetnode/install-fleet-node.sh deployment-files/fleetnode/tests/qualify-package.sh deployment-files/fleetnode/tests/test-install-fleetnode.sh./deployment-files/fleetnode/tests/test-install-fleetnode.shsource ./bin/activate-hermit && just lintgit diff --checkfor both stack layers