#!/usr/bin/env python
-
##############################################################################
# Copyright (c) 2016 Daniel Farrell and Others. All rights reserved.
#
import vars
if __name__ == "__main__":
- # Accept the version(s) of the build(s) to perform as args
- # TODO: More docs on ArgParser and argument
- parser = argparse.ArgumentParser(add_help=False,
- conflict_handler='resolve')
- parser._optionals.title = "Required Arguments"
-
- package_build_group = parser.add_mutually_exclusive_group(required=True)
- package_build_group.add_argument("--rpm", action="store_true",
- help="Builds RPM package")
- package_build_group.add_argument("--deb", action="store_true",
- help="Builds DEB package")
-
- new_build_group = parser.add_argument_group("New build")
- new_build_group.add_argument(
- "--download_url", help="Tarball to repackage into package")
- new_build_group.add_argument(
- "--sysd_commit", help="Version of ODL unitfile to package")
- new_build_group.add_argument(
- "--changelog_name", help="Name of person who defined package")
- new_build_group.add_argument(
- "--changelog_email", help="Email of person who defined package")
-
- # Arguments needed to build RPM from latest snapshot
- # given a stable major branch
- latest_snap_group = parser.add_argument_group("Latest snapshot build")
- latest_snap_group.add_argument("--build-latest-snap", action='store_true',
- help="Build package from the latest snpashot")
- latest_snap_group.add_argument("--major", help="Stable branch from which "
- "to build the snapshot")
- latest_snap_group.add_argument("--minor", help="Minor version of the "
- "stable branch to build the snapshot")
- latest_snap_group.add_argument("--sysd_commit",
- help="Version of ODL unitfile to package")
- latest_snap_group.add_argument("--changelog_name",
- help="Name of person who defined package")
- latest_snap_group.add_argument("--changelog_email",
- help="Email of person who defined package")
+ # Accept a build definition via args
+ parent_parser = argparse.ArgumentParser(
+ add_help=False,
+ description="Package OpenDaylight build as RPM/deb.")
+ parent_parser._optionals.title = "Package type (required)"
+
+ # All builds require a package-type arg
+ pkg_type_group = parent_parser.add_mutually_exclusive_group(required=True)
+ pkg_type_group.add_argument("--rpm", action="store_true",
+ help="package build as RPM")
+ pkg_type_group.add_argument("--deb", action="store_true",
+ help="package build as deb")
+
+ # All builds accept optional changelog name/email, sysd commit args
+ opt_args_group = parent_parser.add_argument_group(
+ "Additional config (optional)")
+ opt_args_group.add_argument(
+ "--sysd_commit", help="version of ODL systemd unit file to package")
+ opt_args_group.add_argument("--changelog_name", default="Jenkins",
+ help="name of person who defined package")
+ opt_args_group.add_argument("--changelog_email",
+ default="jenkins-donotreply@opendaylight.org",
+ help="email of person who defined package")
+
+ # Use subparsers to accept args specific to build location
+ subparsers = parent_parser.add_subparsers(
+ title="Build location (required)")
+
+ # Create subparser for defining builds directly from a URL
+ direct_parser = subparsers.add_parser("direct",
+ help="package build at URL")
+
+ direct_parser._optionals.title = "Options"
+
+ # Direct builds require a archive URL
+ direct_parser.add_argument("--download_url", required=True,
+ help="URL to tar/zip build archive to package")
+
+ # Create subparser for building latest snapshot from a given branch
+ latest_snap_parser = subparsers.add_parser(
+ "latest_snap",
+ help="package latest snapshot build of given major version")
+
+ latest_snap_parser._optionals.title = "Options"
+
+ # Latest-snapshot builds require a major version to pkg last build from
+ latest_snap_parser.add_argument(
+ "--major", required=True,
+ help="major version to package latest snapshot from")
+
# Print help if no arguments are given
if len(sys.argv) == 1:
- parser.print_help()
+ parent_parser.print_help()
sys.exit(1)
- # Parse the given args
- args = parser.parse_args()
+ # Extract passed args
+ args = parent_parser.parse_args()
- # A dictionary containing essential build variables
+ # Build definition, populated below
build = {}
- # Depending on package type, create an appropriate changelog datetime
+ # Add changelog name/email to build definition
+ build.update({"changelog_name": args.changelog_name,
+ "changelog_email": args.changelog_email})
+
+ # Depending on pkg type, add appropriate-format changelog date to build def
if args.rpm:
build.update({"changelog_date": vars.get_changelog_date("rpm")})
if args.deb:
build.update({"changelog_date": vars.get_changelog_date("deb")})
- # Check if `sysd_commit` has been passed as an arg
- # Use latest Int/Pack repo commit hash as sysd_commit var
- # unless passed by param
- if not args.sysd_commit:
- args.sysd_commit = vars.get_sysd_commit()
-
- # If the flag `--build-latest-snap` is true, extract information
- # from the snapshot URL using major version and minor version(optional)
- if args.build_latest_snap:
- if args.major:
- build.update({'version_major': args.major})
- if args.minor:
- build.update({'version_minor': args.minor})
- args.download_url = vars.get_snap_url(args.major, args.minor)
-
- # If download_url is given, update version info
- if args.download_url:
+ # If hash of systemd unit file given add to build def, else use latest hash
+ if args.sysd_commit:
+ build.update({"sysd_commit": args.sysd_commit})
+ else:
+ build.update({"sysd_commit": vars.get_sysd_commit()})
+
+ # Argparse rules imply args.major will only be present for latest_snap
+ # builds and args.download_url will only be present for generic builds.
+ # If doing a latest-snap build, find latest build tarball URL for given
+ # major version and add to build definition. Else, add URL directly.
+ if hasattr(args, "major"):
+ # FIXME: In the process of removing minor_version, pass None for now
+ build.update({"download_url": vars.get_snap_url(args.major, None)})
+ else:
build.update({"download_url": args.download_url})
- version = vars.extract_version(args.download_url)
- build.update(version)
- java_version_required = vars.get_java_version(build['version_major'])
+ # Use download_url to find pkg version, add to build def
+ build.update(vars.extract_version(build["download_url"]))
# Karaf 3 distros use distribution-karaf-, Karaf 4 uses karaf-
build.update({"distro_name_prefix": vars.get_distro_name_prefix(
build['version_major'])})
- # Common parameters for all new and snapshot builds
- build.update({"download_url": args.download_url,
- "sysd_commit": args.sysd_commit,
- "java_version": java_version_required,
- "changelog_name": args.changelog_name,
- "changelog_email": args.changelog_email,
- })
+ # Update build definition with Java version required by ODL version
+ build.update({"java_version": vars.get_java_version(
+ build['version_major'])})
+
+ # Use package-specific helper logic to do the specified build
if args.rpm:
build_rpm.build_rpm(build)
elif args.deb:
build_deb.build_deb(build)
- else:
- raise ValueError("Unknown package type")