mesh/merge-gate head a641ed7d15c7 merged into trunk b12c4b82e820 — pass: builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step; every …
mesh/repo-check head a641ed7d15c7 merged into trunk b12c4b82e820 — pass: its merge-check.sh passed
mesh/delivery delivered
mesh/delivery-group group fix/121-genesis-package-registry delivered: every member is delivered
With npm-package-registry optional, the binding file the agent's environment names may be absent, and mesh-builder failed every build on reading it. It now reads the genesis document the installer seals at genesis's packages step when no binding is present, prefers the binding when both are, and each build's log says which it resolved from (§4). A build that needs the registry - a package, an image naming .npmrc, TypeScript with an @novox/ dependency - on an agent with neither is refused before anything is built or published, naming the machine, the unbound requirement and gitea (§6); it never falls back to the public registry. The captured catalogue moves to the mesh-catalog change it is judged with.
177 lines
5.8 KiB
Plaintext
177 lines
5.8 KiB
Plaintext
{
|
|
"module": "restic",
|
|
"version": "1",
|
|
"claims": [
|
|
{
|
|
"name": "node-backup",
|
|
"scope": "node",
|
|
"serves": [
|
|
"backed-up",
|
|
"now",
|
|
"restore"
|
|
]
|
|
}
|
|
],
|
|
"tools": [
|
|
"backup_health",
|
|
"backup_delete_retired",
|
|
"backup_deleted"
|
|
],
|
|
"own-secrets": {
|
|
"repository": "${dir:state}/repository.secret"
|
|
},
|
|
"data": {
|
|
"own": [
|
|
{
|
|
"id": "repository",
|
|
"path": "${dir:repository}",
|
|
"class": "rebuildable",
|
|
"backup": "none",
|
|
"why": "the restore points themselves: a copy of data kept elsewhere on this machine, never the only copy of anything; lost, the history goes and nothing live does"
|
|
},
|
|
{
|
|
"id": "state",
|
|
"path": "${dir:state}",
|
|
"class": "cache",
|
|
"why": "what the last nights and measurements were; the next night writes it again"
|
|
}
|
|
]
|
|
},
|
|
"settings": {
|
|
"keep-daily": {
|
|
"kind": "preference",
|
|
"default": 14,
|
|
"why": "two weeks of nightly restore points undo a mistake noticed within a fortnight; a count from 1 to 9999, read by the night, which thins nothing while it does not read (novox/hq issue 416); lowering it deletes the restore points beyond the new count at the next night, and that cannot be undone"
|
|
},
|
|
"keep-weekly": {
|
|
"kind": "preference",
|
|
"default": 8,
|
|
"why": "two months of weekly restore points behind the dailies; a count from 1 to 9999, refused by the night like keep-daily; lowering it deletes the restore points beyond the new count at the next night, and that cannot be undone"
|
|
},
|
|
"keep-monthly": {
|
|
"kind": "preference",
|
|
"default": 6,
|
|
"why": "half a year of monthly restore points behind the weeklies; a count from 1 to 9999, refused by the night like keep-daily; lowering it deletes the restore points beyond the new count at the next night, and that cannot be undone"
|
|
},
|
|
"keep-hand-taken-days": {
|
|
"kind": "preference",
|
|
"default": 7,
|
|
"why": "a restore point taken by hand (node-backup.now, or the mesh's before a module moves) is kept until a later good night of its module exists, and this many days in any case, so the next thinning never takes the one taken against a risky change (novox/hq issue 453); a count from 1 to 9999, refused by the night like keep-daily; lowering it lets go of the restore points taken by hand that are older than the new count, past a later night, at the next thinning, and that cannot be undone"
|
|
}
|
|
},
|
|
"resources": [
|
|
{
|
|
"id": "state",
|
|
"type": "directory",
|
|
"mode": "0700",
|
|
"place": "."
|
|
},
|
|
{
|
|
"id": "repository",
|
|
"type": "directory",
|
|
"mode": "0700"
|
|
},
|
|
{
|
|
"id": "declared",
|
|
"type": "file",
|
|
"path": "${dir:state}/backups.conf",
|
|
"mode": "0600",
|
|
"content": "# What the modules on this machine back up, composed by the mesh (novox/hq to-be 43). Do not edit.\n${contribution:node-backup:backup}"
|
|
},
|
|
{
|
|
"id": "data-declared",
|
|
"type": "file",
|
|
"path": "${dir:state}/data.conf",
|
|
"mode": "0600",
|
|
"content": "# The data the modules on this machine declare, composed by the mesh (novox/hq ADR 0233). Do not edit.\n${contribution:node-backup:data}"
|
|
},
|
|
{
|
|
"id": "retention",
|
|
"type": "file",
|
|
"path": "${dir:state}/retention.conf",
|
|
"mode": "0644",
|
|
"trusted": true,
|
|
"content": "# How many restore points the night keeps, written by the mesh from this machine's settings keep-daily,\n# keep-weekly, keep-monthly (novox/hq issue 416) and keep-hand-taken-days (novox/hq issue 453). Replaced on every push; change the settings, never this file.\ndaily=${setting:keep-daily}\nweekly=${setting:keep-weekly}\nmonthly=${setting:keep-monthly}\nhand=${setting:keep-hand-taken-days}\n"
|
|
},
|
|
{
|
|
"id": "tool",
|
|
"type": "package",
|
|
"package": "restic"
|
|
},
|
|
{
|
|
"id": "sqlite",
|
|
"type": "package",
|
|
"package": "sqlite"
|
|
},
|
|
{
|
|
"id": "night",
|
|
"type": "process",
|
|
"name": "restic-night",
|
|
"artifact": "tools",
|
|
"run": [
|
|
"./restic-backups",
|
|
"night"
|
|
],
|
|
"user": "${machine:account}",
|
|
"env": {
|
|
"MESH_BACKUP_DECLARED": "${dir:state}/backups.conf",
|
|
"MESH_BACKUP_REPOSITORY": "${dir:repository}",
|
|
"MESH_BACKUP_PASSWORD_FILE": "${dir:state}/repository.secret",
|
|
"MESH_BACKUP_STATE": "${dir:state}",
|
|
"MESH_BACKUP_DATA": "${dir:state}/data.conf"
|
|
},
|
|
"health": {
|
|
"kind": "tool",
|
|
"tool": "backup_health",
|
|
"interval": "60s",
|
|
"timeout": "20s",
|
|
"looks": 2,
|
|
"grace": "60s"
|
|
}
|
|
},
|
|
{
|
|
"id": "measure",
|
|
"type": "process",
|
|
"name": "restic-measure",
|
|
"artifact": "tools",
|
|
"run": [
|
|
"./restic-backups",
|
|
"measure"
|
|
],
|
|
"user": "${machine:account}",
|
|
"env": {
|
|
"MESH_BACKUP_DECLARED": "${dir:state}/backups.conf",
|
|
"MESH_BACKUP_REPOSITORY": "${dir:repository}",
|
|
"MESH_BACKUP_PASSWORD_FILE": "${dir:state}/repository.secret",
|
|
"MESH_BACKUP_STATE": "${dir:state}",
|
|
"MESH_BACKUP_DATA": "${dir:state}/data.conf"
|
|
},
|
|
"health": {
|
|
"kind": "unit"
|
|
}
|
|
}
|
|
],
|
|
"build": {
|
|
"artifacts": [
|
|
{
|
|
"name": "tools",
|
|
"kind": "bundle",
|
|
"language": "go",
|
|
"system": "arch",
|
|
"from": "cmd/restic-backups",
|
|
"binary": "restic-backups",
|
|
"loads": [
|
|
"restic-backups"
|
|
],
|
|
"env": {
|
|
"MESH_BACKUP_DECLARED": "${dir:state}/backups.conf",
|
|
"MESH_BACKUP_REPOSITORY": "${dir:repository}",
|
|
"MESH_BACKUP_PASSWORD_FILE": "${dir:state}/repository.secret",
|
|
"MESH_BACKUP_STATE": "${dir:state}",
|
|
"MESH_BACKUP_DATA": "${dir:state}/data.conf"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
}
|