2 ##############################################################################
3 # Copyright (c) 2016 Daniel Farrell and Others. All rights reserved.
5 # This program and the accompanying materials are made available under the
6 # terms of the Eclipse Public License v1.0 which accompanies this distribution,
7 # and is available at http://www.eclipse.org/legal/epl-v10.html
8 ##############################################################################
15 from deb import lib as deb_lib
16 from rpm import lib as rpm_lib
18 if __name__ == "__main__":
19 # Accept a build definition via args
20 parent_parser = argparse.ArgumentParser(
22 description="Package OpenDaylight build as RPM/deb.")
23 parent_parser._optionals.title = "Package type (required)"
25 # All builds require a package-type arg
26 pkg_type_group = parent_parser.add_mutually_exclusive_group(required=True)
27 pkg_type_group.add_argument("--rpm", action="store_true",
28 help="package build as RPM")
29 pkg_type_group.add_argument("--deb", action="store_true",
30 help="package build as deb")
32 # All builds accept optional changelog name/email, sysd commit args
33 opt_args_group = parent_parser.add_argument_group(
34 "Additional config (optional)")
35 opt_args_group.add_argument(
36 "--sysd_commit", help="version of ODL systemd unit file to package")
37 opt_args_group.add_argument("--changelog_name", default="Jenkins",
38 help="name of person who defined package")
39 opt_args_group.add_argument("--changelog_email",
40 default="jenkins-donotreply@opendaylight.org",
41 help="email of person who defined package")
43 # Use subparsers to accept args specific to build location
44 subparsers = parent_parser.add_subparsers(
45 title="Build location (required)")
47 # Create subparser for defining builds directly from a URL
48 direct_parser = subparsers.add_parser("direct",
49 help="package build at URL")
51 direct_parser._optionals.title = "Options"
53 # Direct builds require an archive URL
54 direct_parser.add_argument("--download_url", required=True,
55 help="URL to tar/zip build archive to package")
56 direct_parser.add_argument(
57 "--pkg_version", help="Override autodetected package component of RPM version (maj.min.pat-pkg)'")
59 # Create subparser for building latest snapshot from a given branch
60 latest_snap_parser = subparsers.add_parser(
62 help="package latest snapshot build of given major version")
64 latest_snap_parser._optionals.title = "Options"
66 # Latest-snapshot builds require a major version to pkg last build from
67 latest_snap_parser.add_argument(
68 "--major", required=True,
69 help="major version to package latest snapshot from")
71 # Print help if no arguments are given
72 if len(sys.argv) == 1:
73 parent_parser.print_help()
77 args = parent_parser.parse_args()
79 # Build definition, populated below
82 # Add changelog name to build definition
83 if not args.changelog_name:
84 # If empty string passed, as happens when a bash script calls this
85 # script with unset var, use default
86 build.update({"changelog_name": "Jenkins"})
88 build.update({"changelog_name": args.changelog_name})
90 # Add changelog email to build definition
91 if not args.changelog_email:
92 # If empty string passed, as happens when a bash script calls this
93 # script with unset var, use default
95 {"changelog_email": "jenkins-donotreply@opendaylight.org"})
97 build.update({"changelog_email": args.changelog_email})
99 # Depending on pkg type, add appropriate-format changelog date to build def
101 build.update({"changelog_date": lib.get_changelog_date("rpm")})
103 build.update({"changelog_date": lib.get_changelog_date("deb")})
105 # If hash of systemd unit file given add to build def, else use latest hash
107 build.update({"sysd_commit": args.sysd_commit})
109 build.update({"sysd_commit": lib.get_sysd_commit()})
111 # Argparse rules imply args.major will only be present for latest_snap
112 # builds and args.download_url will only be present for generic builds.
113 # If doing a latest-snap build, find latest build tarball URL for given
114 # major version and add to build definition. Else, add URL directly.
115 if hasattr(args, "major"):
116 build.update({"download_url": lib.get_snap_url(args.major)})
118 build.update({"download_url": args.download_url})
120 # Use download_url to find pkg version, add to build def
121 build.update(lib.extract_version(build["download_url"]))
123 # Override automatically extracted package version with param if passed
124 if (hasattr(args, "pkg_version") and args.pkg_version is not None and
125 args.pkg_version is not ""):
126 build['pkg_version'] = args.pkg_version
128 # Karaf 3 distros use distribution-karaf-, Karaf 4 uses karaf-
129 build.update({"distro_name_prefix": lib.get_distro_name_prefix(
130 build['version_major'], build['download_url'])})
132 # Update build definition with Java version required by ODL version
133 build.update({"java_version": lib.get_java_version(
134 build['version_major'])})
136 # Use package-specific helper logic to do the specified build
138 rpm_lib.build_rpm(build)
140 deb_lib.build_deb(build)