Release-Tags nach Paketbuild direkt veröffentlichen
This commit is contained in:
1 parent
5a1a284505
commit
ccc372778c
19 files changed
+278
-387
No files matched your search
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Vierzielpakete bauen, entpackt prüfen und vollständige Freigaben validieren."""
|
||||
"""Vierzielpakete bauen und optional auf dem Zielsystem prüfen."""
|
||||
import argparse
|
||||
import hashlib
|
||||
import json
|
||||
@@ -186,45 +186,6 @@ def target_check(archive, target, output, windows_console_test=None):
|
||||
(output / 'report.json').write_text(json.dumps(report, indent=2) + '\n')
|
||||
|
||||
|
||||
def gate(directory, evidence, revision, version):
|
||||
"""Fail closed: vier exakte Pakete und unabhängige, passende Zielnachweise."""
|
||||
require(re.fullmatch('[0-9a-f]{40}', revision), 'Ungültige Revision')
|
||||
require(digest(ROOT / 'tests/libraries/portable.tbl') == TBL_SHA, 'TBL-Probe verändert')
|
||||
assets = []
|
||||
for target in TARGETS:
|
||||
archive = directory / name(version, target)
|
||||
require(archive.is_file(), f'Pflichtpaket fehlt: {archive.name}')
|
||||
sha = digest(archive)
|
||||
checksum = archive.with_name(archive.name + '.sha256')
|
||||
require(checksum.read_text() == f'{sha} {archive.name}\n', 'Paketprüfsumme falsch')
|
||||
manifest = verify(archive, target, ROOT / 'target/release/tb-template')
|
||||
require(manifest['revision'] == revision and not manifest['source_dirty'], 'Paket aus falschem/uncommittetem Stand')
|
||||
proof = json.loads((evidence / target / 'report.json').read_text())
|
||||
require(proof.get('target') == target and proof.get('revision') == revision and proof.get('package') == archive.name and
|
||||
proof.get('package_sha256') == sha and proof.get('tbl_sha256') == TBL_SHA, 'Zielnachweis passt nicht zum Paket')
|
||||
required = {'native', 'library', 'default-template', 'windows-console' if target == list(TARGETS)[0] else 'ide-pty'}
|
||||
require(proof.get('automated_passed') is True and all(proof.get('checks', {}).get(k) == 'passed' for k in required), 'Automatisierte Zielprüfung fehlt')
|
||||
manual = json.loads((evidence / target / 'manual.json').read_text())
|
||||
require(manual.get('revision') == revision and manual.get('package_sha256') == sha and
|
||||
manual.get('target') == target and manual.get('passed') is True and
|
||||
manual.get('tester') and manual.get('terminal_versions') and manual.get('evidence'), 'Manueller Terminalnachweis fehlt')
|
||||
terminals = {'windows-terminal'} if target == list(TARGETS)[0] else {'terminal.app'} if target == list(TARGETS)[1] else {'xterm', 'vte'}
|
||||
require(isinstance(manual['terminal_versions'], dict) and
|
||||
all(manual['terminal_versions'].get(t) for t in terminals), 'Pflichtemulator/Version fehlt')
|
||||
require(all(manual.get('cases', {}).get(k) is True for k in
|
||||
('f1_f12', 'modifiers', 'mouse', 'unicode_colors', 'resize', 'input_break', 'shell')), 'Manuelle Pflichtfolge unvollständig')
|
||||
for reference in manual['evidence']:
|
||||
relative = Path(reference)
|
||||
require(not relative.is_absolute() and '..' not in relative.parts, 'Ungültiger manueller Nachweispfad')
|
||||
path = evidence / target / relative
|
||||
require(path.is_file() and path.stat().st_size > 0, 'Manueller Beleg fehlt')
|
||||
assets.extend([archive, checksum])
|
||||
acceptance = json.loads((evidence / 'acceptance.json').read_text())
|
||||
require(acceptance.get('revision') == revision and acceptance.get('passed') is True and
|
||||
all(acceptance.get(k) for k in ('foreign', 'inventory', 'workspace', 'benchmarks', 'native_ide', 'run_url', 'buildhost')), 'Pflichtabnahme/Benchmarks fehlen')
|
||||
return assets
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(description=__doc__)
|
||||
sub = parser.add_subparsers(dest='command', required=True)
|
||||
@@ -236,13 +197,10 @@ def main():
|
||||
else:
|
||||
p.add_argument('--output', type=Path, required=True)
|
||||
p.add_argument('--windows-console-test', type=Path)
|
||||
p = sub.add_parser('gate'); p.add_argument('--packages', type=Path, required=True); p.add_argument('--evidence', type=Path, required=True)
|
||||
p.add_argument('--revision', required=True); p.add_argument('--version', required=True)
|
||||
args = parser.parse_args()
|
||||
if args.command == 'pack': pack(args.bin_dir.resolve(), args.target, args.output.resolve(), args.inspector.resolve())
|
||||
elif args.command == 'verify': verify(args.archive.resolve(), args.target, args.inspector.resolve() if args.inspector else None)
|
||||
elif args.command == 'target-check': target_check(args.archive.resolve(), args.target, args.output.resolve(), args.windows_console_test.resolve() if args.windows_console_test else None)
|
||||
else: gate(args.packages, args.evidence, args.revision, args.version)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
Reference in new issue
Block a user