Build deb's using common build.py
[integration/packaging.git] / build.py
index 89214f5deace7613162fc17cfbd04735fe3a0e94..ac7513281ba6f03fd21c7face47974018112ac84 100755 (executable)
--- a/build.py
+++ b/build.py
@@ -12,31 +12,46 @@ import argparse
 import datetime
 import sys
 
+from deb import build as build_deb
 from rpm import build as build_rpm
 import vars
 
+try:
+    from tzlocal import get_localzone
+except ImportError:
+    sys.stderr.write("we recommend using our included Vagrant env.\n")
+    sys.stderr.write("Else, do `pip install -r requirements.txt` in a venv")
+
 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(conflict_handler='resolve')
+    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 RPM")
+        "--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_date", help="Date this RPM was defined")
+        "--changelog_date", help="Date this package was defined")
     new_build_group.add_argument(
-        "--changelog_name", help="Name of person who defined RPM")
+        "--changelog_name", help="Name of person who defined package")
     new_build_group.add_argument(
-        "--changelog_email", help="Email of person who defined RPM")
+        "--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 RPM from the latest snpashot")
+                                   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 "
@@ -44,9 +59,9 @@ if __name__ == "__main__":
     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 RPM")
+                                   help="Name of person who defined package")
     latest_snap_group.add_argument("--changelog_email",
-                                   help="Email of person who defined RPM")
+                                   help="Email of person who defined package")
     # Print help if no arguments are given
     if len(sys.argv) == 1:
         parser.print_help()
@@ -57,14 +72,30 @@ if __name__ == "__main__":
 
     # A dictionary containing essential build variables
     build = {}
-    # Check if `changelog_date` has been passed as an arg
-    # The current datetime should be the default date for RPM changelog date
-    # but can still accept optional `changelog_date` param
-    # `changelog_date` is in the format: 'Sat Dec 10 2016'
-    # Docs:
-    #   https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior
-    if not args.changelog_date:
-        args.changelog_date = datetime.date.today().strftime("%a %b %d %Y")
+
+    # Check if the package to be created is rpm or deb and initialize timestamp
+    # details with current time for packages accordingly. For details on
+    # strftime please refer : https://docs.python.org/2/library/datetime.html#
+    # strftime-and-strptime-behavior. For details on get_localzone refer :
+    # https://pypi.python.org/pypi/tzlocal
+    if args.rpm:
+        # Building RPM only requires `changelog_date` in the format
+        # "Day Month Date Year" For ex - Mon Jun 21 2017
+        if not args.changelog_date:
+            args.changelog_date = datetime.date.today().strftime("%a %b %d %Y")
+    if args.deb:
+        if not args.changelog_date:
+            # Building Deb requires `changelog_date` and 'changelog_time' in
+            # the format "Day, Date Month Year" For ex - Mon, 21 Jun 2017 and
+            # time along with Time Zone information as UTC offset in format
+            # HH:MM:SS +HHMM". For ex - 15:01:16 +0530
+            args.changelog_date = datetime.date.today().\
+                                                strftime("%a, %d %b %Y")
+            local_tz = get_localzone()
+            args.changelog_time = datetime.datetime.now(local_tz).\
+                strftime("%H:%M:%S %z")
+            # Add comment
+            build.update({"changelog_time": args.changelog_time})
 
     # Check if `sysd_commit` has been passed as an arg
     # Use latest Int/Pack repo commit hash as sysd_commit var
@@ -87,12 +118,19 @@ if __name__ == "__main__":
         version = vars.extract_version(args.download_url)
         build.update(version)
 
+    java_version_required = vars.get_java_version(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,
                   "changelog_date": args.changelog_date,
                   })
-
-    build_rpm.build_rpm(build)
+    if args.rpm:
+        build_rpm.build_rpm(build)
+    elif args.deb:
+        build_deb.build_deb(build)
+    else:
+        raise ValueError("Unknown package type")