Files
metin-release-cli/README.md
Jan Nedbal e70fc300e2 cli: scaffold phase 1 asset release commands
Add metin-release CLI with argparse dispatcher, result envelope and
error hierarchy, and the full Phase 1 release subcommand set:

  release inspect         - scan source root
  release build-manifest  - wraps make-manifest.py
  release sign            - wraps sign-manifest.py, enforces mode 600
  release diff-remote     - HEAD each blob hash against a base URL
  release upload-blobs    - rsync release dir minus manifest
  release promote         - rsync manifest.json + signature
  release verify-public   - GET + Ed25519 verify, optional blob sampling
  release publish         - composite of the above with per-stage timings

Respects --json / --verbose / --quiet. Exit codes follow the plan
(1 validation, 2 remote, 3 integrity, 4 reserved for ERP).
2026-04-14 18:59:50 +02:00

34 lines
1000 B
Markdown

# metin-release-cli
Python CLI that orchestrates Metin2 client releases — builds manifests, signs
them, uploads content-addressed blobs, and promotes the new release atomically.
Phase 1 wraps `make-manifest.py` and `sign-manifest.py` from the `m2dev-client`
repo and adds remote diff, upload, promote, and public verification.
## Install
```
pip install -e .[dev]
```
## Usage
```
metin-release --help
metin-release release inspect --source /path/to/client
metin-release release publish --source ... --version 2026.04.14-1 ...
```
Add `--json` to get a machine-parseable envelope on stdout. Exit codes:
| Code | Meaning |
|------|--------------------------------------|
| 0 | success |
| 1 | operator / validation error |
| 2 | remote or network error |
| 3 | signing or integrity error |
| 4 | reserved (ERP sync, Phase 2+) |
See `docs/cli.md` for the full command reference.