mesh/delivery ready: it is merged on the Approve
mesh/check failed (8): unit: modules/mesh-delivery-gate.go vet: /var/lib/mesh-build-go-cache/gomod/git.novo…; and 7 more | 80b8002a94f7 on 1c1b03c3a02b
The registry milestone renamed what distribution offers (container-image-registry, oci-artifact-registry, mesh-artifact-store), as ADR 0632 section 3 decides. The node-engines running on every node are the ones from before it: they find the store through the provision artifact-store, so they fetch no new build, including their own successor, and keep running what they ran. ADR 0632 section 2's guarantee (no node loses the store while its engine reads it the old way) lives in the new indexer's hold, which the running indexer predates. So this goes against ADR 0632 section 3 for a limited time, at the operator's word (bootstrap of 2026-11-07, no new record): offered again beside the new roles until every node-engine runs the registry milestone's build, then removed in the next change to distribution. Claude-Session: https://claude.ai/code/session_01NcbgfFSnn24M3GcqttoU7i
285 lines
6.1 KiB
JSON
285 lines
6.1 KiB
JSON
{
|
|
"module": "distribution",
|
|
"version": "2",
|
|
"packages": {
|
|
"builds": "0.1"
|
|
},
|
|
"provides": [
|
|
{
|
|
"name": "artifact-store",
|
|
"scope": "mesh",
|
|
"credential": {
|
|
"form": "none"
|
|
}
|
|
}
|
|
],
|
|
"serves": {
|
|
"artifact-store": {
|
|
"port": 5000
|
|
}
|
|
},
|
|
"claims": [
|
|
{
|
|
"name": "container-image-registry",
|
|
"scope": "mesh",
|
|
"serves": [
|
|
"hold",
|
|
"list",
|
|
"mirror",
|
|
"publish",
|
|
"publish-part",
|
|
"release",
|
|
"remove",
|
|
"tags",
|
|
"versions"
|
|
]
|
|
},
|
|
{
|
|
"name": "oci-artifact-registry",
|
|
"scope": "mesh",
|
|
"serves": [
|
|
"hold",
|
|
"list",
|
|
"publish",
|
|
"publish-part",
|
|
"release",
|
|
"remove",
|
|
"versions"
|
|
]
|
|
},
|
|
{
|
|
"name": "mesh-artifact-store",
|
|
"scope": "mesh"
|
|
}
|
|
],
|
|
"tools": [
|
|
"registry_callers",
|
|
"registry_direct_writes",
|
|
"registry_health",
|
|
"registry_holds",
|
|
"registry_incoming",
|
|
"registry_mirrors",
|
|
"registry_old_name"
|
|
],
|
|
"invokes": [
|
|
"distribution.registry_callers",
|
|
"mesh-delivery-builder.builder_versions",
|
|
"mesh-delivery-view.node_haves",
|
|
"seat:node-engine.manifest-reads",
|
|
"seat:mesh-hand-acts.hand-act"
|
|
],
|
|
"consumes": [
|
|
"mesh-delivery-view.delivered",
|
|
"node-engine.manifest-reads-changed"
|
|
],
|
|
"config": {
|
|
"callers": {
|
|
"type": "string",
|
|
"trusted": true,
|
|
"runtime": true,
|
|
"default": "",
|
|
"description": "per verb, the modules that may call it (JSON object of verb to modules; operator for the operator's session); empty is design 51's list"
|
|
}
|
|
},
|
|
"requires": [
|
|
{
|
|
"name": "incoming",
|
|
"storage": "object-store",
|
|
"template": "objects",
|
|
"options": {
|
|
"max-mib": 8192
|
|
}
|
|
},
|
|
{
|
|
"name": "transfers",
|
|
"storage": "key-value",
|
|
"template": "state"
|
|
},
|
|
{
|
|
"name": "idle",
|
|
"storage": "key-value",
|
|
"template": "state",
|
|
"options": {
|
|
"key-ttl": true
|
|
}
|
|
},
|
|
{
|
|
"name": "holds",
|
|
"storage": "key-value",
|
|
"template": "state"
|
|
},
|
|
{
|
|
"name": "windows",
|
|
"storage": "key-value",
|
|
"template": "state"
|
|
},
|
|
{
|
|
"name": "mirrors",
|
|
"storage": "key-value",
|
|
"template": "state"
|
|
},
|
|
{
|
|
"name": "findings",
|
|
"storage": "key-value",
|
|
"template": "state"
|
|
},
|
|
{
|
|
"name": "events",
|
|
"storage": "stream",
|
|
"template": "events",
|
|
"options": {
|
|
"events": [
|
|
"old-name-closed",
|
|
"direct-writes-closed"
|
|
],
|
|
"max-age-days": 7,
|
|
"max-mib": 16
|
|
}
|
|
}
|
|
],
|
|
"capabilities": [
|
|
"container-runtime"
|
|
],
|
|
"own-secrets": {
|
|
"broker": "/var/lib/mesh/registry/broker"
|
|
},
|
|
"secrets-owner": "distribution",
|
|
"listens": [
|
|
{
|
|
"name": "registry",
|
|
"port": 5000,
|
|
"protocol": "tcp",
|
|
"from": "mesh",
|
|
"why": "every machine pulls images and artifacts from here; distribution's program serves it in front of the store"
|
|
}
|
|
],
|
|
"data": {
|
|
"own": [
|
|
{
|
|
"id": "registry",
|
|
"path": "${dir:registry-data}",
|
|
"class": "rebuildable",
|
|
"backup": "none",
|
|
"measure": "shallow",
|
|
"why": "the artifact store: every image is built again from its source, and too large to copy every night (ADR 0214 left it out)"
|
|
}
|
|
]
|
|
},
|
|
"resources": [
|
|
{
|
|
"id": "account",
|
|
"type": "user",
|
|
"name": "distribution",
|
|
"shell": "/usr/bin/nologin",
|
|
"home": "/var/lib/mesh/registry"
|
|
},
|
|
{
|
|
"id": "state",
|
|
"type": "directory",
|
|
"path": "/var/lib/mesh/registry",
|
|
"mode": "0700",
|
|
"unknown": "program",
|
|
"owner": "distribution"
|
|
},
|
|
{
|
|
"id": "registry-data",
|
|
"type": "directory",
|
|
"path": "/var/lib/mesh-registry",
|
|
"mode": "0700",
|
|
"unknown": "program",
|
|
"owner": "distribution"
|
|
},
|
|
{
|
|
"id": "store",
|
|
"type": "container",
|
|
"name": "mesh-registry",
|
|
"image": "registry@sha256:a3d8aaa63ed8681a604f1dea0aa03f100d5895b6a58ace528858a7b332415373",
|
|
"ports": [
|
|
"127.0.0.1:5001:5000"
|
|
],
|
|
"volumes": [
|
|
"/var/lib/mesh-registry:/var/lib/registry"
|
|
],
|
|
"env": {
|
|
"REGISTRY_STORAGE_DELETE_ENABLED": "true"
|
|
},
|
|
"health": {
|
|
"kind": "http",
|
|
"endpoint": "registry",
|
|
"path": "/v2/",
|
|
"status": 200,
|
|
"interval": "60s",
|
|
"timeout": "10s",
|
|
"looks": 2,
|
|
"grace": "90s"
|
|
}
|
|
},
|
|
{
|
|
"id": "program",
|
|
"type": "process",
|
|
"name": "distribution",
|
|
"artifact": "program",
|
|
"run": [
|
|
"./distribution"
|
|
],
|
|
"env": {
|
|
"MESH_BROKER_FILE": "/var/lib/mesh/registry/broker",
|
|
"MESH_REGISTRY_LOOPBACK": "http://127.0.0.1:5001",
|
|
"MESH_REGISTRY_LISTEN": ":5000"
|
|
},
|
|
"user": "distribution",
|
|
"health": {
|
|
"kind": "tool",
|
|
"tool": "registry_health",
|
|
"interval": "60s",
|
|
"timeout": "10s",
|
|
"looks": 2,
|
|
"grace": "90s"
|
|
}
|
|
},
|
|
{
|
|
"id": "collect",
|
|
"type": "container",
|
|
"name": "mesh-registry-collect",
|
|
"image": "registry@sha256:a3d8aaa63ed8681a604f1dea0aa03f100d5895b6a58ace528858a7b332415373",
|
|
"volumes": [
|
|
"/var/lib/mesh-registry:/var/lib/registry"
|
|
],
|
|
"args": [
|
|
"garbage-collect",
|
|
"/etc/docker/registry/config.yml"
|
|
],
|
|
"schedule": "30 3 * * *",
|
|
"while-stopped": [
|
|
"store"
|
|
]
|
|
}
|
|
],
|
|
"build": {
|
|
"artifacts": [
|
|
{
|
|
"name": "program",
|
|
"kind": "bundle",
|
|
"language": "go",
|
|
"system": "arch",
|
|
"from": "cmd/distribution",
|
|
"binary": "distribution"
|
|
},
|
|
{
|
|
"name": "tools",
|
|
"kind": "bundle",
|
|
"language": "go",
|
|
"system": "arch",
|
|
"from": "cmd/distribution-tools",
|
|
"binary": "distribution-tools",
|
|
"loads": [
|
|
"distribution-tools"
|
|
],
|
|
"env": {
|
|
"MESH_REGISTRY_CONTAINER": "mesh-registry"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
}
|