362bd6ae7ca27fecf7ddc2c0f2ca1ee11ea2c571
Before this change, only the top-level parser defined --json, -v and -q.
Argparse processes arguments left-to-right and hands off to the subparser
after seeing the subcommand name, so the idiomatic
metin-release release inspect --source X --json
failed with 'unrecognized arguments: --json'. Users had to write
metin-release --json release inspect --source X
which is the opposite of what every modern CLI does. Attach a shared
--json/-v/-q flag set to every subparser via a small helper. Same dest
means the last occurrence on the command line wins, which is the intuitive
behaviour. Both placements are now accepted; tests unchanged.
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.
Releases
1
Languages
Python
100%