aboutsummaryrefslogtreecommitdiffstats
path: root/docs/design/2026-10-21-sb-builder-phase3-design.md
blob: f422cbbe61f4c2495da08f3f60bd4a22ed164378 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# sb-builder phase 3: full repo rebuild

Date: 2026-10-21
Status: approved

## Goal

Run `slackrepo_setup_SBo-danix.sh` from the GUI as a job: replace the
SBo-danix tree with a fresh clone of upstream plus the personal and
pentesting subtrees, then reapply shadowing. This rebuilds the git tree, not
the packages.

## Script (`slackrepo_setup` repo)

Two changes to `slackrepo_setup_SBo-danix.sh`:

1. Build the new tree beside the live one. Clone, branch and add subtrees in
   `$REPO.new` (a stale `.new` from an earlier failed run is removed first).
   Only when that succeeds: `mv $REPO $REPO.old`, `mv $REPO.new $REPO`. A
   failed clone or subtree add leaves the live tree untouched.
2. After the swap, run `sbshadow --yes` (bare `sbshadow` prompts; a job's
   stdin is `/dev/null`, so the prompt reads EOF and shadowing is silently
   skipped). It runs on the real path, so its `sbb-remote fix-current-now`
   sees the new tree. When it succeeds, `rm -rf $REPO.old`. When it fails,
   `set -e` stops the script and `.old` stays for a manual rollback (`mv`).

Disk: the tree is about 600M; peak use during a run is about 1.2G.

## Helper (`sbb-remote`)

New job kind `rebuild-tree`, no arguments, argv
`["slackrepo_setup_SBo-danix.sh"]` (on PATH, like `sbshadow`). Runs under
the job flock, so it never overlaps a slackrepo run or a sync. Version bump.

## GUI

Jobs tab main ribbon: "Rebuild tree", after the sync actions. Modal confirm
(destructive step): replace SBo-danix with a fresh clone. No next-step
dialog; other tabs read the new tree on their next reload.

## Testing

`test_remote.py`: `rebuild-tree` builds its argv and rejects arguments.
`test_gui.py`: the action asks for confirmation and starts the job only on
yes. The script change is tried on the VM against a throwaway path before
deploying.

## Out of scope

A GUI rollback action: the rollback window is only a failed sbshadow, and
`mv` covers it.