mirror of
https://github.com/truenas/scale-build.git
synced 2025-12-20 02:49:28 +00:00
102 lines
4.0 KiB
Python
102 lines
4.0 KiB
Python
import argparse
|
|
import coloredlogs
|
|
import logging
|
|
import sys
|
|
|
|
from .branch_out import branch_out_repos, validate_branch_out_config
|
|
from .checkout import checkout_sources
|
|
from .clean import complete_cleanup
|
|
from .config import BRANCH_OVERRIDES
|
|
from .upstream_package_updates import check_upstream_package_updates
|
|
from .epoch import check_epoch
|
|
from .exceptions import CallError
|
|
from .iso import build_iso
|
|
from .package import build_packages
|
|
from .preflight import preflight_check
|
|
from .update_image import build_update_image
|
|
from .utils.logger import ConsoleFilter, LogHandler
|
|
from .utils.manifest import get_manifest
|
|
from .validate import validate
|
|
|
|
|
|
logger = logging.getLogger('scale_build')
|
|
|
|
|
|
def setup_logging():
|
|
logging.basicConfig(level=logging.DEBUG, format='[%(asctime)s] %(message)s', force=True)
|
|
handler = logging.StreamHandler(sys.stderr)
|
|
handler.setLevel(logging.DEBUG)
|
|
handler.setFormatter(logging.Formatter('[%(asctime)s] %(message)s'))
|
|
handler.addFilter(ConsoleFilter())
|
|
logger.addHandler(handler)
|
|
log_handler = LogHandler()
|
|
log_handler.setLevel(logging.DEBUG)
|
|
logger.addHandler(log_handler)
|
|
logger.propagate = False
|
|
if sys.stdout.isatty():
|
|
coloredlogs.install(logging.DEBUG, fmt='[%(asctime)s] %(message)s', logger=logger)
|
|
|
|
|
|
def validate_config():
|
|
manifest = get_manifest()
|
|
packages = [p['name'] for p in manifest['sources']]
|
|
invalid_overrides = [o for o in BRANCH_OVERRIDES if o not in packages]
|
|
if invalid_overrides:
|
|
raise CallError(
|
|
f'Invalid branch override(s) provided: {", ".join(invalid_overrides)!r} sources not configured in manifest'
|
|
)
|
|
|
|
|
|
def main():
|
|
setup_logging()
|
|
preflight_check()
|
|
parser = argparse.ArgumentParser(prog='scale-build')
|
|
subparsers = parser.add_subparsers(help='sub-command help', dest='action')
|
|
|
|
subparsers.add_parser('checkout', help='Checkout TrueNAS Scale repositories')
|
|
subparsers.add_parser('check_upstream_package_updates', help='Check that all forked Debian packages are up-to-date')
|
|
subparsers.add_parser('clean', help='Clean build package(s) / cloned source(s) / image(s) of TrueNAS Scale')
|
|
packages_parser = subparsers.add_parser('packages', help='Build TrueNAS Scale packages')
|
|
packages_parser.add_argument(
|
|
'--packages', '-p', help='Specify specific packages to be built', default=[], nargs='+'
|
|
)
|
|
subparsers.add_parser('update', help='Create TrueNAS Scale update image')
|
|
subparsers.add_parser('iso', help='Create TrueNAS Scale iso installation file')
|
|
branchout_parser = subparsers.add_parser('branchout', help='Checkout new branch for all packages')
|
|
branchout_parser.add_argument(
|
|
'--skip-push', '-sp', action='store_true', default=False,
|
|
help='Do not push new branches to packages with provided credentials',
|
|
)
|
|
|
|
validate_parser = subparsers.add_parser('validate', help='Validate TrueNAS Scale build manifest and system state')
|
|
for action in ('datasets', 'manifest', 'system_state'):
|
|
validate_parser.add_argument(f'--validate-{action}', dest=action, action='store_true')
|
|
validate_parser.add_argument(f'--no-validate-{action}', dest=action, action='store_false')
|
|
validate_parser.set_defaults(**{action: True})
|
|
|
|
args = parser.parse_args()
|
|
if args.action == 'checkout':
|
|
check_epoch()
|
|
checkout_sources()
|
|
elif args.action == 'check_upstream_package_updates':
|
|
check_upstream_package_updates()
|
|
elif args.action == 'packages':
|
|
validate()
|
|
check_epoch()
|
|
build_packages(args.packages)
|
|
elif args.action == 'update':
|
|
validate()
|
|
build_update_image()
|
|
elif args.action == 'iso':
|
|
validate()
|
|
build_iso()
|
|
elif args.action == 'clean':
|
|
complete_cleanup()
|
|
elif args.action == 'validate':
|
|
validate(args.system_state, args.manifest, args.datasets)
|
|
elif args.action == 'branchout':
|
|
validate_branch_out_config(not args.skip_push)
|
|
branch_out_repos(not args.skip_push)
|
|
else:
|
|
parser.print_help()
|