Update RPM repo cfg file URL
[integration/packaging.git] / packages / build.py
1 #!/usr/bin/env python
2
3 ##############################################################################
4 # Copyright (c) 2016 Daniel Farrell and Others.  All rights reserved.
5 #
6 # This program and the accompanying materials are made available under the
7 # terms of the Eclipse Public License v1.0 which accompanies this distribution,
8 # and is available at http://www.eclipse.org/legal/epl-v10.html
9 ##############################################################################
10
11 import argparse
12 import sys
13
14 from deb import build as build_deb
15 from rpm import build as build_rpm
16 import vars
17
18 if __name__ == "__main__":
19     # Accept the version(s) of the build(s) to perform as args
20     # TODO: More docs on ArgParser and argument
21     parser = argparse.ArgumentParser(add_help=False,
22                                      conflict_handler='resolve')
23     parser._optionals.title = "Required Arguments"
24
25     package_build_group = parser.add_mutually_exclusive_group(required=True)
26     package_build_group.add_argument("--rpm", action="store_true",
27                                      help="Builds RPM package")
28     package_build_group.add_argument("--deb", action="store_true",
29                                      help="Builds DEB package")
30
31     new_build_group = parser.add_argument_group("New build")
32     new_build_group.add_argument(
33         "--download_url", help="Tarball to repackage into package")
34     new_build_group.add_argument(
35         "--sysd_commit", help="Version of ODL unitfile to package")
36     new_build_group.add_argument(
37         "--changelog_name", help="Name of person who defined package")
38     new_build_group.add_argument(
39         "--changelog_email", help="Email of person who defined package")
40
41     # Arguments needed to build RPM from latest snapshot
42     # given a stable major branch
43     latest_snap_group = parser.add_argument_group("Latest snapshot build")
44     latest_snap_group.add_argument("--build-latest-snap", action='store_true',
45                                    help="Build package from the latest snpashot")
46     latest_snap_group.add_argument("--major", help="Stable branch from which "
47                                    "to build the snapshot")
48     latest_snap_group.add_argument("--minor", help="Minor version of the "
49                                    "stable branch to build the snapshot")
50     latest_snap_group.add_argument("--sysd_commit",
51                                    help="Version of ODL unitfile to package")
52     latest_snap_group.add_argument("--changelog_name",
53                                    help="Name of person who defined package")
54     latest_snap_group.add_argument("--changelog_email",
55                                    help="Email of person who defined package")
56     # Print help if no arguments are given
57     if len(sys.argv) == 1:
58         parser.print_help()
59         sys.exit(1)
60
61     # Parse the given args
62     args = parser.parse_args()
63
64     # A dictionary containing essential build variables
65     build = {}
66
67     # Depending on package type, create an appropriate changelog datetime
68     if args.rpm:
69         build.update({"changelog_date": vars.get_changelog_date("rpm")})
70     if args.deb:
71         build.update({"changelog_date": vars.get_changelog_date("deb")})
72
73     # Check if `sysd_commit` has been passed as an arg
74     # Use latest Int/Pack repo commit hash as sysd_commit var
75     # unless passed by param
76     if not args.sysd_commit:
77         args.sysd_commit = vars.get_sysd_commit()
78
79     # If the flag `--build-latest-snap` is true, extract information
80     # from the snapshot URL using major version and minor version(optional)
81     if args.build_latest_snap:
82         if args.major:
83             build.update({'version_major': args.major})
84             if args.minor:
85                 build.update({'version_minor': args.minor})
86             args.download_url = vars.get_snap_url(args.major, args.minor)
87
88     # If download_url is given, update version info
89     if args.download_url:
90         build.update({"download_url": args.download_url})
91         version = vars.extract_version(args.download_url)
92         build.update(version)
93
94     java_version_required = vars.get_java_version(build['version_major'])
95
96     # Common parameters for all new and snapshot builds
97     build.update({"download_url": args.download_url,
98                   "sysd_commit": args.sysd_commit,
99                   "java_version": java_version_required,
100                   "changelog_name": args.changelog_name,
101                   "changelog_email": args.changelog_email,
102                   })
103     if args.rpm:
104         build_rpm.build_rpm(build)
105     elif args.deb:
106         build_deb.build_deb(build)
107     else:
108         raise ValueError("Unknown package type")