From c0726ac2641b90ed56d43fe6d57e8065b237a345 Mon Sep 17 00:00:00 2001 From: mesh-admin Date: Tue, 13 Oct 2026 11:42:12 +0000 Subject: [PATCH] dev-tools: give every node the toolchains to build and test the mesh's code (issue 626) Every node is a development machine: an agent builds a change and runs its tests there before opening a pull request, and the lab tests it afterwards as QA. No module declared Go or npm, so no node could do the first part. --- modules/dev-tools/README.md | 26 +++++++++++++++++++ modules/dev-tools/module.json | 49 +++++++++++++++++++++++++++++++++++ 2 files changed, 75 insertions(+) create mode 100644 modules/dev-tools/README.md create mode 100644 modules/dev-tools/module.json diff --git a/modules/dev-tools/README.md b/modules/dev-tools/README.md new file mode 100644 index 00000000..35017a93 --- /dev/null +++ b/modules/dev-tools/README.md @@ -0,0 +1,26 @@ +# dev-tools + +The tools a machine needs to develop the mesh's own code (novox/hq issue 626). Every node is a development +machine: an agent working on a change builds it and runs its tests there, with these tools, before it opens a +pull request. The lab is the QA step after that: it tests the work in a sandbox, through its seat at the mesh +scope, and is not where development happens. + +Assign it to every node. + +## Owns + +| what | package | class (ADR 0182) | +|---|---|---| +| the Go toolchain, for `go build` and `go test` in every Go module | `go` | package | +| a C compiler, for `go test -race` and cgo | `gcc` | package | +| make | `make` | package | +| Node.js and npm, for the TypeScript modules' `npm ci` and `npm test` | `nodejs`, `npm` | package | +| Python, for the scripts some checks run | `python` | package | +| git and jq | `git`, `jq` | package | + +All are in the distribution's official repositories, so the node-engine's package manager installs them on any +node. The versions are the distribution's: the toolchain images that run `mesh/repo-check` stay the judge of a +pull request, and a local run is the developer's early answer, not the verdict. + +Nothing else is placed: no file, no service, no environment. A module's own dependencies come from its lock +file (`go.mod`, `package-lock.json`), as in the toolchain images. diff --git a/modules/dev-tools/module.json b/modules/dev-tools/module.json new file mode 100644 index 00000000..8ee6fd1a --- /dev/null +++ b/modules/dev-tools/module.json @@ -0,0 +1,49 @@ +{ + "module": "dev-tools", + "version": "1", + "capabilities": [ + "package-manager" + ], + "resources": [ + { + "id": "go", + "type": "package", + "package": "go" + }, + { + "id": "c-compiler", + "type": "package", + "package": "gcc" + }, + { + "id": "make", + "type": "package", + "package": "make" + }, + { + "id": "nodejs", + "type": "package", + "package": "nodejs" + }, + { + "id": "npm", + "type": "package", + "package": "npm" + }, + { + "id": "python", + "type": "package", + "package": "python" + }, + { + "id": "git", + "type": "package", + "package": "git" + }, + { + "id": "jq", + "type": "package", + "package": "jq" + } + ] +}