8b84aa384a
Accept similar argument to pungi-koji: either direct event ID, or a path to a compose from which the event will be extracted. It would be nice if we could reuse the path to compose given as source, but there may be more that one compose, so ultimately we need a way to overwrite it anyway. JIRA: COMPOSE-3278 Signed-off-by: Lubomír Sedlář <lsedlar@redhat.com>
88 lines
2.0 KiB
Python
Executable File
88 lines
2.0 KiB
Python
Executable File
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
|
|
from __future__ import print_function
|
|
|
|
import argparse
|
|
import json
|
|
import os
|
|
import sys
|
|
|
|
import kobo.conf
|
|
import pungi.checks
|
|
import pungi.util
|
|
|
|
|
|
def load_file(source, conf):
|
|
try:
|
|
with open(source) as f:
|
|
conf.load_from_dict(json.load(f))
|
|
except ValueError:
|
|
conf.load_from_file(source)
|
|
|
|
|
|
def load_source(source, conf):
|
|
if os.path.isfile(source):
|
|
load_file(source, conf)
|
|
else:
|
|
load_file(os.path.join(source, "logs/global/config-dump.global.log"), conf)
|
|
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument(
|
|
"sources",
|
|
metavar="SOURCE",
|
|
nargs="+",
|
|
help=(
|
|
"Source for the configuration; either a compose "
|
|
"or arbitrary number of config files."
|
|
),
|
|
)
|
|
parser.add_argument(
|
|
"--freeze-event",
|
|
metavar="ID",
|
|
type=pungi.util.parse_koji_event,
|
|
help=(
|
|
"Include this koji event in the created config; "
|
|
"takes either event ID or path to a compose"
|
|
),
|
|
)
|
|
group = parser.add_mutually_exclusive_group()
|
|
group.add_argument(
|
|
"--just-dump",
|
|
action="store_true",
|
|
help=(
|
|
"Do not transform the config in any way. Default values are not "
|
|
"added, git references are not resolved."
|
|
),
|
|
)
|
|
group.add_argument(
|
|
"--offline", action="store_true", help="Do not resolve git references."
|
|
)
|
|
|
|
args = parser.parse_args()
|
|
|
|
conf = kobo.conf.PyConfigParser()
|
|
|
|
for source in args.sources:
|
|
load_source(source, conf)
|
|
|
|
if not args.just_dump:
|
|
errors, _ = pungi.checks.validate(conf, offline=args.offline)
|
|
if errors:
|
|
for error in errors:
|
|
print(error, file=sys.stderr)
|
|
return False
|
|
|
|
if args.freeze_event:
|
|
conf["koji_event"] = args.freeze_event
|
|
|
|
json.dump(conf, sys.stdout, sort_keys=True, indent=4)
|
|
return True
|
|
|
|
|
|
if __name__ == "__main__":
|
|
if not main():
|
|
sys.exit(1)
|