Skip to content

Refuse Node runtimes at validate time and in the Render importer - #132

Merged
shipmill-romamo[bot] merged 2 commits into
mainfrom
feat/114-refuse-node-runtimes
Oct 27, 2026
Merged

shipmill-romamo[bot] merged 2 commits into
mainfrom
feat/114-refuse-node-runtimes

Conversation

@shipmill-romamo

Copy link
Copy Markdown
Contributor

Summary

cloudfall config validate now refuses a Component whose runtime the deploy role can't run (S-002-14), and the Render importer stops writing such Components (S-002-15).

  • sdk/src/cloudfall/validation.py: a Component with runtime.type other than python or runtime.packageManager other than uv fails with component_runtime_unsupported, the field spec.runtime.type or spec.runtime.packageManager, and a message saying only Python with uv deploys today. config validate exits CONFIG_INVALID (80). The schema enums are unchanged and keep node, pm2, npm, pnpm, yarn as reserved values
  • sdk/src/cloudfall/importer.py: a Render service with runtime: node (or env: node) is recorded as an unsupported gap and gets no Component, no port, and no Domain. The node branch of the runtime mapping and its NODE_VERSION default are removed
  • Docs: the Render migration guide's "Not imported" table gains a Node row; ROADMAP and ARCHITECTURE no longer list Node as a deployable stack

Behaviour change: configs with a Node runtime that validated before are now refused. No file in config/examples, config/tests or the test fixtures declares one (checked with git grep), so nothing in the repo changes.

Test plan

  • uv run pytest sdk/tests/test_importer.py sdk/tests/test_validation.py sdk/tests/test_render_api.py sdk/tests/test_inventory.py engine/tests/test_ansible_inventory.py: 48 passed
  • New: test_s002_14_reserved_runtimes_are_refused_as_config_invalid (node, pm2, npm, pnpm, yarn through the CLI), test_s002_15_node_web_service_is_a_gap_not_a_component
  • uv run ruff check ., uv run mypy, uv run cloudfall config validate --project config/examples: clean
  • Full suite left to CI

Fixes #114

Plan

  • Serves: quality bar
  • Files: sdk/src/cloudfall/validation.py, sdk/src/cloudfall/importer.py, sdk/tests/test_validation.py, sdk/tests/test_importer.py, docs/render-migration-guide.md, ROADMAP.md, ARCHITECTURE.md, changelog.d/114-refuse-node-runtimes.md
  • Order: failing tests for S-002-14 and S-002-15 first; then the runtime check in validation; then the importer gap; then the docs and the changelog fragment
  • Proof: S-002-14 (test_s002_14_* in sdk/tests/test_validation.py), S-002-15 (test_s002_15_* in sdk/tests/test_importer.py)

🤖 Generated with Claude Code

shipmill-romamo Bot and others added 2 commits October 27, 2026 10:47
The deploy role runs only Python with uv, so a Component with runtime.type node or pm2, or packageManager npm, pnpm or yarn, passed config validate and then failed in the role. Validate now refuses it with component_runtime_unsupported (S-002-14), and the Render importer records a Node service as an unsupported gap instead of writing such a Component (S-002-15). The schema enums keep the values as reserved.

Fixes #114

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The importer reads runtime or the legacy env key; the S-002-15 test now
runs both shapes and checks the Python services and their Domain of the
same blueprint still import. The changelog fragment marks the validate
refusal Breaking inline, as earlier 0.x entries under Changed do.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@shipmill-romamo
shipmill-romamo Bot force-pushed the feat/114-refuse-node-runtimes branch from c5a21d9 to c94e2f4 Compare October 27, 2026 08:48
@shipmill-romamo
shipmill-romamo Bot merged commit 7789bfa into main Oct 27, 2026
1 check passed
@shipmill-romamo
shipmill-romamo Bot deleted the feat/114-refuse-node-runtimes branch October 27, 2026 08:53
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.

Refuse Node runtimes at validate and in the Render importer (S-002-14, S-002-15)

0 participants