39 lines
1.2 KiB
Python
Executable File
39 lines
1.2 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
from __future__ import annotations
|
|
|
|
import sys
|
|
import zipfile
|
|
from pathlib import Path
|
|
|
|
ROOT = Path(__file__).resolve().parent
|
|
EXCLUDED_DIRS = {'.git', '.dev', 'target', 'dist', 'packages', '__pycache__'}
|
|
EXCLUDED_NAMES = {'.env'}
|
|
|
|
|
|
def main() -> int:
|
|
if len(sys.argv) != 2:
|
|
print(f'usage: {Path(sys.argv[0]).name} OUTPUT.zip', file=sys.stderr)
|
|
return 2
|
|
output = Path(sys.argv[1]).resolve()
|
|
output.parent.mkdir(parents=True, exist_ok=True)
|
|
prefix = f'PostfixAdmin-RS-{project_version()}'
|
|
with zipfile.ZipFile(output, 'w', compression=zipfile.ZIP_DEFLATED, compresslevel=9) as archive:
|
|
for path in sorted(ROOT.rglob('*')):
|
|
if not path.is_file() or path.resolve() == output:
|
|
continue
|
|
rel = path.relative_to(ROOT)
|
|
if any(part in EXCLUDED_DIRS for part in rel.parts) or rel.name in EXCLUDED_NAMES:
|
|
continue
|
|
archive.write(path, f'{prefix}/{rel.as_posix()}')
|
|
return 0
|
|
|
|
|
|
def project_version() -> str:
|
|
import tomllib
|
|
with (ROOT / 'Cargo.toml').open('rb') as handle:
|
|
return tomllib.load(handle)['package']['version']
|
|
|
|
|
|
if __name__ == '__main__':
|
|
raise SystemExit(main())
|