docs: move BEDIENUNGSANLEITUNG and INSTALL_FROM_ARCHIVE into docs/
Keep only README, LICENSE, and CHANGELOG as prose at the repo root (tooling/convention) and move the remaining manuals under docs/ next to SECURITY_AND_OPERATIONS.md. - git mv the two files into docs/ (history preserved). - Update all cross-references: README doc-index links, the internal SECURITY_AND_OPERATIONS link and the §12 pointer list in BEDIENUNGSANLEITUNG, and the repo inventory in SECURITY_AND_OPERATIONS §1. - build_archive.py: point REQUIRED_FILES at docs/ and drop the now-redundant INCLUDE_FILES entries (the docs/ dir is included wholesale). - build_archive.py: drop the obsolete requirements.txt<->pyproject dependency mirror check, which broke once requirements.txt was reduced to `.` (pyproject is the single source of truth). Verified by building and re-opening the archive. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
0dc08b003d
commit
b8680cc049
5 changed files with 16 additions and 46 deletions
|
|
@ -15,8 +15,8 @@ Fehlerbehandlung.
|
|||
| Dokument | Für wen / wofür |
|
||||
|---|---|
|
||||
| README (diese Datei) | Schnelleinstieg: Installation, Konfiguration, Verwendung |
|
||||
| [`BEDIENUNGSANLEITUNG.md`](BEDIENUNGSANLEITUNG.md) | Vollständiges Benutzerhandbuch (alle Aktionen, Optionen, Fehlersuche) |
|
||||
| [`INSTALL_FROM_ARCHIVE.md`](INSTALL_FROM_ARCHIVE.md) | Installation aus dem `.tar.gz`-Archiv + Archiv selbst bauen/verifizieren |
|
||||
| [`docs/BEDIENUNGSANLEITUNG.md`](docs/BEDIENUNGSANLEITUNG.md) | Vollständiges Benutzerhandbuch (alle Aktionen, Optionen, Fehlersuche) |
|
||||
| [`docs/INSTALL_FROM_ARCHIVE.md`](docs/INSTALL_FROM_ARCHIVE.md) | Installation aus dem `.tar.gz`-Archiv + Archiv selbst bauen/verifizieren |
|
||||
| [`docs/SECURITY_AND_OPERATIONS.md`](docs/SECURITY_AND_OPERATIONS.md) | Architektur, Modul-/Repo-Übersicht, Sicherheits- & Betriebsmodell |
|
||||
| `man/llamacppctl.1` | Vollständige Optionsreferenz (`man llamacppctl` bzw. `man ./man/llamacppctl.1`) |
|
||||
| [`CHANGELOG.md`](CHANGELOG.md) | Versionshistorie |
|
||||
|
|
|
|||
|
|
@ -73,8 +73,8 @@ REQUIRED_FILES = [
|
|||
"tests/test_lock_ops.py",
|
||||
"tests/test_actions.py",
|
||||
"scripts/smoke.sh",
|
||||
"BEDIENUNGSANLEITUNG.md",
|
||||
"INSTALL_FROM_ARCHIVE.md",
|
||||
"docs/BEDIENUNGSANLEITUNG.md",
|
||||
"docs/INSTALL_FROM_ARCHIVE.md",
|
||||
]
|
||||
|
||||
# Top-level directories to include wholesale (in addition to REQUIRED_FILES),
|
||||
|
|
@ -90,8 +90,6 @@ INCLUDE_FILES = [
|
|||
"requirements-dev.txt",
|
||||
"llama.cpp.config.example",
|
||||
"build_archive.py",
|
||||
"BEDIENUNGSANLEITUNG.md",
|
||||
"INSTALL_FROM_ARCHIVE.md",
|
||||
]
|
||||
|
||||
EXCLUDE_DIR_NAMES = {"__pycache__", ".pytest_cache", ".venv", "venv", ".git", "*.egg-info"}
|
||||
|
|
@ -124,14 +122,15 @@ def verify_required_files(project_dir: Path) -> None:
|
|||
|
||||
|
||||
def verify_dependencies_declared(project_dir: Path) -> list:
|
||||
"""Parses pyproject.toml and cross-checks it against requirements.txt.
|
||||
"""Parses pyproject.toml and returns the declared runtime dependency
|
||||
specifiers.
|
||||
|
||||
Returns the list of runtime dependency specifiers declared in
|
||||
pyproject.toml. Raises BuildError on any mismatch.
|
||||
pyproject.toml is the single source of truth for dependencies
|
||||
(requirements.txt merely installs the package), so there is no requirements
|
||||
mirror to cross-check. Raises BuildError if none are declared.
|
||||
"""
|
||||
log("Verifying declared dependencies are consistent...")
|
||||
log("Reading declared runtime dependencies from pyproject.toml...")
|
||||
pyproject_path = project_dir / "pyproject.toml"
|
||||
requirements_path = project_dir / "requirements.txt"
|
||||
|
||||
try:
|
||||
import tomllib # Python 3.11+
|
||||
|
|
@ -171,37 +170,7 @@ def verify_dependencies_declared(project_dir: Path) -> list:
|
|||
if not deps:
|
||||
raise BuildError("No runtime dependencies found in pyproject.toml [project.dependencies]")
|
||||
|
||||
req_text = requirements_path.read_text(encoding="utf-8")
|
||||
req_names = set()
|
||||
for line in req_text.splitlines():
|
||||
line = line.strip()
|
||||
if not line or line.startswith("#"):
|
||||
continue
|
||||
# crude package-name extraction, e.g. "requests>=2.31,<3" -> "requests"
|
||||
name = line
|
||||
for sep in (">=", "<=", "==", "!=", ">", "<", "~="):
|
||||
if sep in name:
|
||||
name = name.split(sep, 1)[0]
|
||||
req_names.add(name.strip().lower())
|
||||
|
||||
missing_from_requirements = []
|
||||
for dep in deps:
|
||||
name = dep
|
||||
for sep in (">=", "<=", "==", "!=", ">", "<", "~="):
|
||||
if sep in name:
|
||||
name = name.split(sep, 1)[0]
|
||||
name = name.strip().lower()
|
||||
if name not in req_names:
|
||||
missing_from_requirements.append(dep)
|
||||
|
||||
if missing_from_requirements:
|
||||
raise BuildError(
|
||||
"pyproject.toml declares dependencies not mirrored in requirements.txt:\n "
|
||||
+ "\n ".join(missing_from_requirements)
|
||||
)
|
||||
|
||||
log(f" pyproject.toml dependencies: {deps}")
|
||||
log(" requirements.txt is consistent with pyproject.toml.")
|
||||
return deps
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ nur auf `127.0.0.1` erreichbar.
|
|||
Diese Anleitung deckt **Installation** und **Benutzung** vollständig ab. Zur
|
||||
Installation aus dem fertigen Archiv siehe zusätzlich
|
||||
[`INSTALL_FROM_ARCHIVE.md`](INSTALL_FROM_ARCHIVE.md). Details zum Sicherheits-
|
||||
und Betriebsmodell stehen in [`docs/SECURITY_AND_OPERATIONS.md`](docs/SECURITY_AND_OPERATIONS.md);
|
||||
und Betriebsmodell stehen in [`SECURITY_AND_OPERATIONS.md`](SECURITY_AND_OPERATIONS.md);
|
||||
die vollständige Optionsreferenz in der Manpage (`man/llamacppctl.1`).
|
||||
|
||||
---
|
||||
|
|
@ -280,4 +280,4 @@ SMOKE_GPU=1 scripts/smoke.sh
|
|||
- `man/llamacppctl.1` — vollständige Optionsreferenz (`man ./man/llamacppctl.1`).
|
||||
- `docs/SECURITY_AND_OPERATIONS.md` — Architektur, Sicherheits- und Betriebsmodell.
|
||||
- `README.md` — Kurzüberblick.
|
||||
- `INSTALL_FROM_ARCHIVE.md` — Installation aus dem `.tar.gz`-Archiv.
|
||||
- `docs/INSTALL_FROM_ARCHIVE.md` — Installation aus dem `.tar.gz`-Archiv.
|
||||
|
|
@ -100,7 +100,7 @@ Das Archiv wird reproduzierbar von `build_archive.py` erzeugt. Es
|
|||
1. prüft, ob alle erforderlichen Projektdateien vorhanden sind,
|
||||
2. gleicht die deklarierten Abhängigkeiten in einer frischen venv ab,
|
||||
3. lässt die komplette Test-Suite laufen,
|
||||
4. baut das `.tar.gz` (nur Allowlist: `src/ tests/ docs/ man/ scripts/` + `pyproject.toml`, `README.md`, `LICENSE`, `CHANGELOG.md`, `requirements*.txt`, `llama.cpp.config.example`, `build_archive.py`, `BEDIENUNGSANLEITUNG.md`, `INSTALL_FROM_ARCHIVE.md`),
|
||||
4. baut das `.tar.gz` (nur Allowlist: `src/ tests/ docs/ man/ scripts/` + `pyproject.toml`, `README.md`, `LICENSE`, `CHANGELOG.md`, `requirements*.txt`, `llama.cpp.config.example`, `build_archive.py`),
|
||||
5. öffnet das Archiv erneut und verifiziert die enthaltenen Dateien,
|
||||
6. installiert das Paket aus dem Archiv in einer weiteren frischen venv und testet das Konsolenskript.
|
||||
|
||||
|
|
@ -43,9 +43,10 @@ scripts/smoke.sh Opt-in End-to-End-Rauchtest gegen echten Docker + GPU
|
|||
`git config core.hooksPath .githooks`
|
||||
.forgejo/workflows/ci.yml Forgejo-Actions-CI (läuft, sobald ein Runner registriert ist)
|
||||
README.md Schnelleinstieg + Doku-Index
|
||||
BEDIENUNGSANLEITUNG.md Vollständiges Benutzerhandbuch
|
||||
INSTALL_FROM_ARCHIVE.md Installation aus dem Archiv + Archiv bauen/verifizieren
|
||||
CHANGELOG.md / LICENSE Versionshistorie / MIT-Lizenz
|
||||
docs/BEDIENUNGSANLEITUNG.md Vollständiges Benutzerhandbuch
|
||||
docs/INSTALL_FROM_ARCHIVE.md Installation aus dem Archiv + Archiv bauen/verifizieren
|
||||
docs/SECURITY_AND_OPERATIONS.md Dieses Dokument (Architektur/Sicherheit/Betrieb)
|
||||
```
|
||||
|
||||
## 2. Konfigurationsmodell
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue