aboutsummaryrefslogtreecommitdiffstats
path: root/CLAUDE.md
blob: 41d25a865c13b32155b17f4c673cb5a221902a66 (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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
# SBo SlackBuilds Repository

SlackBuild scripts maintained by Danilo (danix) and submitted to
[SlackBuilds.org (SBo)](https://slackbuilds.org). This repo holds ONLY the
packages for which danix is the **official SBo maintainer**. Lead and
experimental packages not on SBo under danix live in the separate
`my-slackbuilds` repository.

---

## Repo Structure

Each package lives in its own top-level subfolder:

```
<package-name>/
├── <package-name>.SlackBuild   # Main build script
├── <package-name>.info         # Metadata (version, checksums, URLs)
├── README                      # Description and usage notes
├── slack-desc                  # Package description (11-line format)
├── <package-name>.desktop      # (optional) Desktop entry for GUI apps
└── [...]                       # other optional files
```

Version tracking is handled by a single file:

```
.extras/nvchecker.toml   # nvchecker config listing all packages
```

### `.extras/` holds all non-package repo files

Anything that is not a SlackBuild package must live under `.extras/`, never at
the repo root.

---

## SlackBuild Scripting Guidelines

- Follow the [SBo template](https://slackbuilds.org/templates/) as the base for all scripts
- Use `set -e` to abort on errors
- Honor `$TMP`, `$BUILD`, `$TAG`, `$OUTPUT` variables; default values must be set if unset
- Use `$ARCH` detection with proper `SLKCFLAGS` and `LIBDIRSUFFIX`
- Strip binaries and libraries unless upstream explicitly discourages it
- Install docs to `/usr/doc/$PRGNAM-$VERSION/`
- Always include `find -L` + `chown`/`chmod` cleanup block before packaging
- Copy repo files into `$PKG` with `cat src > dest`, never `cp`. `cat` writes
  through a fresh destination so the build's umask/root ownership sets the
  perms; `cp` bleeds the git working-tree mode/ownership into the package.
  Applies to `slack-desc`, `doinst.sh`, and any file staged from `$CWD`
  (SlackBuild, README, `.nvchecker`) into `$PKG`.
- Use `makepkg -l y -c n` to create the final package

### `.info` file

Must contain:
```
PRGNAM, VERSION, HOMEPAGE, DOWNLOAD, MD5SUM (or SHA256SUM), REQUIRES, MAINTAINER, EMAIL
```
- Checksums must match the exact source archive
- MAINTAINER/EMAIL are danix's, since this repo is his SBo-official packages
- Use `REQUIRES=""` if no SBo dependencies; list space-separated SBo package names otherwise

### `slack-desc`

- Exactly 11 lines in the `package-name: description` format
- First line: `package-name: package-name (short one-liner)`
- Lines 2–11: description, leave blank lines as `package-name:`
- Handy ruler line must be included (but not shipped)

---

## Version Tracking: nvchecker

A single `.extras/nvchecker.toml` tracks upstream versions for all packages.

To check for new upstream versions:

```bash
nvchecker -c .extras/nvchecker.toml
```

When a new version is detected, update `VERSION` in both `.SlackBuild` and
`.info`, then run `sbofixinfo` to refresh checksums.

**Every package added to this repo must have a corresponding entry in
`.extras/nvchecker.toml`.**

For **nvchecker** github stanzas prefer `use_latest_release` (hits
`releases/latest`, lenient) over `use_max_tag` (hits `git/refs/tags`, tightly
rate-limited and 403s under the shared anon budget); use `use_max_tag` only for
repos that tag but don't cut Releases (a `use_latest_release` probe 404s on
those). Probe ONE stanza with `nvchecker -c <cfg> -e <name>`.

---

## Tooling: sbo-maintainer-tools

Source: https://slackware.uk/~urchlay/repos/sbo-maintainer-tools

| Tool | Purpose |
|------|---------|
| `sbolint` | Lint `.SlackBuild`, `README`, `.info`, `slack-desc` |
| `sbopkglint` | Lint the built package |
| `sbofixinfo` | Auto-fix common `.info` file issues |
| `sbodl` | Download sources and verify `MD5SUM`/`SHA256SUM` from `.info` |

### Git hook setup

Both hooks are tracked in `.extras/hooks/`. Install them after cloning:

```bash
cp .extras/hooks/pre-commit .git/hooks/pre-commit
cp .extras/hooks/post-commit .git/hooks/post-commit
chmod +x .git/hooks/pre-commit .git/hooks/post-commit
```

To bypass the pre-commit lint check in exceptional cases:
```bash
SBOLINT=no git commit -m'Message here'
```

Note: `sbodl` creates symlinks in the package directory pointing to downloaded
sources. Remove them before staging (`find . -type l -delete`); they must never
be committed.

---

## Who builds SlackBuilds

Only the user builds SlackBuilds, on their own infra. Claude authors/edits the
sources (`.SlackBuild`, `.info`, `README`, `slack-desc`, `doinst.sh`, nvchecker
stanzas) and runs only the non-building checks (`sbolint`, `sbodl`,
`sbofixinfo`); the user builds and reports back. Never run or offer
`bash <pkg>.SlackBuild`, `sbopkglint`, or `slackrepo build`.

---

## SBo Submission Guidelines

Before submitting or updating a package on SlackBuilds.org:

1. **Pass all lint checks**`sbolint` and `sbopkglint` must report no errors
2. **Test the build** on a clean Slackware installation (or VM snapshot)
3. **Verify checksums** via `sbodl` before committing
4. **Check `README`** includes all non-SBo dependencies and any special build notes
5. **Follow the SBo submission guidelines**: https://slackbuilds.org/guidelines/
6. **Bump `VERSION`** in both `.SlackBuild` and `.info` when updating
7. **Run `sbofixinfo`** after every version bump to catch stale checksums/URLs

---

## Commit Conventions

- One commit per package add/update
- Commit message format: `<package-name>: add version X.Y.Z` or `<package-name>: update to X.Y.Z`
- For fixes: `<package-name>: fix <short description>`

---

## Maintainer

danix