Add initial scripts and project conventions
This commit is contained in:
1 parent
af9f32facc
commit
c777cf115b
14 files changed
+982
-9
No files matched your search
@@ -0,0 +1,85 @@
|
||||
# AGENTS.md — StrixScripts
|
||||
|
||||
Инструкции за AI coding агенти (Claude Code, GitHub Copilot, Cursor и др.),
|
||||
работещи в този repo. Ако инструментът ти чете `CLAUDE.md` вместо този
|
||||
файл — `CLAUDE.md` е кратък pointer към този документ; съдържанието не се
|
||||
дублира умишлено, за да не се разсинхронизира.
|
||||
|
||||
## Какво е проектът
|
||||
|
||||
Колекция от самостоятелни bash скриптове, организирани по функционални
|
||||
папки. Всеки скрипт решава една конкретна задача и има собствена `.md`
|
||||
документация до себе си.
|
||||
|
||||
## Задължителна структура при всеки нов скрипт
|
||||
|
||||
Когато създаваш нов скрипт, следните стъпки са ЗАДЪЛЖИТЕЛНИ, не опционални
|
||||
— пропускането на която и да е от тях е непълна задача, не "готово с TODO":
|
||||
|
||||
1. **Скриптът и неговият `.md` файл имат еднакво basename**, в една и
|
||||
съща папка: `deploy/restart-nginx.sh` → `deploy/restart-nginx.md`.
|
||||
Виж `templates/script-template.md` за структурата, която `.md` файлът
|
||||
трябва да следва.
|
||||
|
||||
2. **Скриптът source-ва `lib/common.sh`** и извиква
|
||||
`common::show_help_if_requested "$@"` веднага след дефиниране на
|
||||
`SCRIPT_HELP` heredoc-а, преди какъвто и да е друг argument parsing.
|
||||
Виж `templates/script-template.sh` за точния pattern и
|
||||
`examples/hello-world.sh` за работещ пример.
|
||||
|
||||
3. **`--help` (и `-h`) работи и показва пълна информация** — какво прави
|
||||
скриптът, какви опции приема, поне един пример за извикване. Това е
|
||||
съдържанието на `SCRIPT_HELP`, не отделна имплементация — не пиши
|
||||
ръчен `if [[ "$1" == "--help" ]]` в скрипта, common.sh вече го прави.
|
||||
|
||||
4. **В `README.md` (корена на проекта) се добавя ред в секцията на
|
||||
съответната категория папка** — кратко описание (едно изречение) +
|
||||
relative link към `.md` файла на скрипта. Пълното описание живее само
|
||||
в скрипт-специфичния `.md`, README не го дублира.
|
||||
|
||||
5. **Скриптът минава `shellcheck` без warnings** (виж `.shellcheckrc` в
|
||||
корена). Ако warning-ът е false positive, добави `# shellcheck disable=SCxxxx`
|
||||
с коментар защо точно на реда, не глобално в файла.
|
||||
|
||||
6. **`set -euo pipefail`** в началото на всеки скрипт, веднага след shebang
|
||||
реда и коментарния блок. Без изключения — ако скрипт умишлено трябва да
|
||||
продължи след грешка в конкретна команда, обгради само тази команда с
|
||||
`|| true` или явна проверка, не маха global `set -e`.
|
||||
|
||||
## Конвенции за именуване и стил
|
||||
|
||||
- **Файлови имена:** kebab-case, описателни глагол+обект (`backup-nextcloud.sh`,
|
||||
не `backup.sh` или `script1.sh`).
|
||||
- **Категория папки:** функционална група (напр. `backup/`, `network/`,
|
||||
`deploy/`) — създавай нова папка само когато скриптовете вътре наистина
|
||||
споделят функционален домейн, не по проект или по дата.
|
||||
- **Всички коментари в кода — само на английски**, независимо от езика на
|
||||
разговора с агента. `.md` документацията и `README.md` могат да остават
|
||||
на български — те са за човека, не за компилатора/shellcheck.
|
||||
- **Грешки:** винаги през `common::die "message"`, никога суров
|
||||
`echo ... >&2; exit 1` — за консистентен формат на грешките между
|
||||
скриптове.
|
||||
- **Статус/progress съобщения:** през `common::log`, който пише на stderr,
|
||||
за да остане stdout чист за реален output, който може да бъде pipe-нат
|
||||
или captured от друг скрипт/потребител.
|
||||
|
||||
## `lib/common.sh` — НЕ дублирай логика от него
|
||||
|
||||
Ако скрипт се нуждае от поведение, което `common.sh` не предоставя (напр.
|
||||
retry logic, temp file cleanup trap, конкретен validation helper) —
|
||||
разшири `common.sh`, не пиши локална версия вътре в отделния скрипт. Целта
|
||||
е всеки скрипт да остава кратък и всички споделят едно и също поведение
|
||||
за грешки/help/logging.
|
||||
|
||||
## `examples/` и `templates/` — само референция
|
||||
|
||||
`examples/hello-world.sh` е работещ демонстрационен скрипт, показващ
|
||||
пълната конвенция накратко. `templates/` съдържа празни шаблони за копиране.
|
||||
Нито едната папка не съдържа реални production скриптове — не ги викай от
|
||||
други скриптове или automation, и не добавяй реални utility скриптове там.
|
||||
|
||||
## Статус
|
||||
|
||||
Проектът е в начален етап — само structural скелет (`lib/common.sh`,
|
||||
`templates/`, `examples/hello-world.sh`) съществува. Реални функционални
|
||||
категории папки и скриптове предстои да бъдат създадени.
|
||||
Reference in new issue
Block a user