aboutsummaryrefslogtreecommitdiffstats
path: root/.extras/docs/superpowers/specs/2026-03-31-sbo-archive-hook-design.md
blob: 838d85b76c075b6c64da501f964c2cbbf6545f27 (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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# SBo Submission Archive Hook — Design Spec

**Date:** 2026-03-31

---

## Goal

A `post-commit` git hook that automatically offers to create a SBo-ready submission
archive whenever a package's `.SlackBuild` file is added or modified in a commit.

---

## Detection

Uses `git diff-tree --no-commit-id -r --name-status HEAD` to list files changed in
the current commit. Filters for entries with status `A` (added) or `M` (modified)
whose filename matches `*.SlackBuild` at exactly one directory depth
(e.g. `hugo/hugo.SlackBuild`). Each match yields one package name (the parent directory).

Multiple packages in a single commit are handled sequentially.

---

## Per-Package Flow

1. Print header: `==> Package: <name>`
2. List all files inside `<repo-root>/<pkg>/` recursively, shown as relative paths
3. Prompt: `Create SBo archive for '<pkg>'? [y/N]`
   - Input is read from `/dev/tty` so the prompt works correctly inside a git hook
4. On `y`/`Y`: create the archive (see below)
5. On anything else: skip silently and continue to the next package

---

## Archive

- **Location:** `SBo/<pkg>.tar.gz` (inside repo root, not under version control)
- **Structure:** single top-level directory `<pkg>/` containing all package files flat
- **Command:** `tar -czf "$SBO_DIR/$pkg.tar.gz" -C "$REPO_ROOT" "$pkg"`
- `SBo/` is created automatically if it does not exist
- Repeated archives overwrite the previous one (no version suffix — matches SBo naming conventions)

---

## Output Directory

`SBo/` lives at the repo root and is added to `.gitignore` so it is never committed.

---

## Files Changed

| File | Change |
|---|---|
| `.git/hooks/post-commit` | New file (created, made executable) |
| `.gitignore` | Append `SBo/` entry |

---

## Out of Scope

- Verifying checksums or linting (handled by existing pre-commit hook and manual workflow)
- Uploading or submitting to SBo directly
- Tracking which archives have already been submitted