project-lakitu: change cos-package-info.json interface

Changed "version" to use BUILD_ID
Added "ebuild_version" which represents
<package-version>-r<revision-number>

BUG=b/182949109
TEST=presubmit
RELEASE_NOTE=None

Change-Id: Ie5cdc2d17e6959fda65a98efeda05bf7d60eac4c
Reviewed-on: https://cos-review.googlesource.com/c/cos/overlays/board-overlays/+/14671
Tested-by: Cusky Presubmit Bot <presubmit@cos-infra-prod.iam.gserviceaccount.com>
Reviewed-by: Anil Altinay <aaltinay@google.com>
diff --git a/project-lakitu/scripts/board_specific_setup.sh b/project-lakitu/scripts/board_specific_setup.sh
index 707a57f..9e47a82 100644
--- a/project-lakitu/scripts/board_specific_setup.sh
+++ b/project-lakitu/scripts/board_specific_setup.sh
@@ -142,7 +142,8 @@
   local -r script_root="$(readlink -f "$(dirname "${BASH_SOURCE[0]}")")"
   sudo "${script_root}/create_pkg_info.py" \
       --input="installedPackages:${runtime_pkg_file},buildTimePackages:${buildtime_pkg_file}" \
-      --output="${root_fs_dir}"/etc/cos-package-info.json
+      --output="${root_fs_dir}"/etc/cos-package-info.json \
+      --build-id="${CHROMEOS_VERSION_STRING}"
 
   cleanup_temp_package_dir
   trap - EXIT
diff --git a/project-lakitu/scripts/create_pkg_info.py b/project-lakitu/scripts/create_pkg_info.py
index 0bdf253..d1ad2dd 100755
--- a/project-lakitu/scripts/create_pkg_info.py
+++ b/project-lakitu/scripts/create_pkg_info.py
@@ -45,7 +45,8 @@
 
 def PrintHelp():
   print('usage: create_pkg_list.py --input=<comma separated list '
-        'of pkg_type:pkg_info_file > --output=<output file>')
+        'of pkg_type:pkg_info_file> --build-id=<build id> '
+        '--output=<output file>')
 
 
 def CreateList(input_lines):
@@ -58,7 +59,7 @@
   return package_list
 
 
-def WriteJson(pkg_info, output_file):
+def WriteJson(pkg_info, build_id, output_file):
   result = {}
   for pkg_type, pkg_list in pkg_info.items():
     packages = []
@@ -66,11 +67,12 @@
       package_info = collections.OrderedDict(
           [('category', p['category']),
            ('name', p['package']),
-           ('version', p['version_no_rev'])
+           ('version', build_id),
+           ('ebuild_version', p['version_no_rev'])
           ]
       )
       if 'revision' in p and p['revision'] is not None:
-        package_info['revision'] = p['revision']
+        package_info['ebuild_version'] += '-r' + p['revision']
 
       packages.append(package_info)
 
@@ -83,9 +85,10 @@
 def main(argv):
   input_fn = ''
   output_fn = ''
+  build_id = ''
 
   try:
-    opts, args_left = getopt.getopt(argv, '', ['help', 'input=', 'output='])
+    opts, args_left = getopt.getopt(argv, '', ['help', 'input=', 'output=', 'build-id='])
   except getopt.GetoptError:
     PrintHelp()
     return -1
@@ -100,6 +103,8 @@
       input_fn = arg
     elif opt == '--output':
       output_fn = arg
+    elif opt == '--build-id':
+      build_id = arg
 
   if input_fn == '' or output_fn == '':
     PrintHelp()
@@ -130,7 +135,7 @@
 
   try:
     with open(output_fn, 'w') as output_file:
-      ret = WriteJson(pkg_info, output_file)
+      ret = WriteJson(pkg_info, build_id, output_file)
       if ret != 0:
         print('error: Failed to write package info')
         return ret
diff --git a/project-lakitu/scripts/create_pkg_info_unittest.py b/project-lakitu/scripts/create_pkg_info_unittest.py
index 5907871..c91bab1 100755
--- a/project-lakitu/scripts/create_pkg_info_unittest.py
+++ b/project-lakitu/scripts/create_pkg_info_unittest.py
@@ -114,155 +114,165 @@
         {
             "category": "app-arch",
             "name": "gzip",
-            "version": "1.9"
+            "version": "123.0.1",
+            "ebuild_version": "1.9"
         },
         {
             "category": "dev-libs",
             "name": "popt",
-            "version": "1.16",
-            "revision": "2"
+            "version": "123.0.1",
+            "ebuild_version": "1.16-r2"
         },
         {
             "category": "app-emulation",
             "name": "docker-credential-helpers",
-            "version": "0.6.3",
-            "revision": "1"
+            "version": "123.0.1",
+            "ebuild_version": "0.6.3-r1"
         },
         {
             "category": "_not.real-category1+",
             "name": "_not-real_package1",
-            "version": "12.34.56.78"
+            "version": "123.0.1",
+            "ebuild_version": "12.34.56.78"
         },
         {
             "category": "_not.real-category1+",
             "name": "_not-real_package2",
-            "version": "12.34.56.78",
-            "revision": "26"
+            "version": "123.0.1",
+            "ebuild_version": "12.34.56.78-r26"
         },
         {
             "category": "_not.real-category1+",
             "name": "_not-real_package3",
-            "version": "12.34.56.78_rc3"
+            "version": "123.0.1",
+            "ebuild_version": "12.34.56.78_rc3"
         },
         {
             "category": "_not.real-category1+",
             "name": "_not-real_package4",
-            "version": "12.34.56.78_rc3",
-            "revision": "26"
+            "version": "123.0.1",
+            "ebuild_version": "12.34.56.78_rc3-r26"
         },
         {
             "category": "_not.real-category1+",
             "name": "_not-real_package5",
-            "version": "12.34.56.78_pre2_rc3",
-            "revision": "26"
+            "version": "123.0.1",
+            "ebuild_version": "12.34.56.78_pre2_rc3-r26"
         },
         {
             "category": "_not.real-category2+",
             "name": "_not-real_package1",
-            "version": "12.34.56.78q"
+            "version": "123.0.1",
+            "ebuild_version": "12.34.56.78q"
         },
         {
             "category": "_not.real-category2+",
             "name": "_not-real_package2",
-            "version": "12.34.56.78q",
-            "revision": "26"
+            "version": "123.0.1",
+            "ebuild_version": "12.34.56.78q-r26"
         },
         {
             "category": "_not.real-category2+",
             "name": "_not-real_package3",
-            "version": "12.34.56.78q_rc3"
+            "version": "123.0.1",
+            "ebuild_version": "12.34.56.78q_rc3"
         },
         {
             "category": "_not.real-category2+",
             "name": "_not-real_package4",
-            "version": "12.34.56.78q_rc3",
-            "revision": "26"
+            "version": "123.0.1",
+            "ebuild_version": "12.34.56.78q_rc3-r26"
         },
         {
             "category": "_not.real-category2+",
             "name": "_not-real_package5",
-            "version": "12.34.56.78q_pre2_rc3",
-            "revision": "26"
+            "version": "123.0.1",
+            "ebuild_version": "12.34.56.78q_pre2_rc3-r26"
         }
     ],
     "buildTimePackages": [
         {
             "category": "virtual",
             "name": "pkgconfig",
-            "version": "0",
-            "revision": "1"
+            "version": "123.0.1",
+            "ebuild_version": "0-r1"
         },
         {
             "category": "dev-go",
             "name": "protobuf",
-            "version": "1.3.2",
-            "revision": "1"
+            "version": "123.0.1",
+            "ebuild_version": "1.3.2-r1"
         },
         {
             "category": "app-emulation",
             "name": "docker-credential-helpers",
-            "version": "0.6.3",
-            "revision": "1"
+            "version": "123.0.1",
+            "ebuild_version": "0.6.3-r1"
         },
         {
             "category": "_not.real-category1+",
             "name": "_not-real_package1",
-            "version": "12.34.56.78"
+            "version": "123.0.1",
+            "ebuild_version": "12.34.56.78"
         },
         {
             "category": "_not.real-category1+",
             "name": "_not-real_package2",
-            "version": "12.34.56.78",
-            "revision": "26"
+            "version": "123.0.1",
+            "ebuild_version": "12.34.56.78-r26"
         },
         {
             "category": "_not.real-category1+",
             "name": "_not-real_package3",
-            "version": "12.34.56.78_rc3"
+            "version": "123.0.1",
+            "ebuild_version": "12.34.56.78_rc3"
         },
         {
             "category": "_not.real-category1+",
             "name": "_not-real_package4",
-            "version": "12.34.56.78_rc3",
-            "revision": "26"
+            "version": "123.0.1",
+            "ebuild_version": "12.34.56.78_rc3-r26"
         },
         {
             "category": "_not.real-category1+",
             "name": "_not-real_package5",
-            "version": "12.34.56.78_pre2_rc3",
-            "revision": "26"
+            "version": "123.0.1",
+            "ebuild_version": "12.34.56.78_pre2_rc3-r26"
         },
         {
             "category": "_not.real-category2+",
             "name": "_not-real_package1",
-            "version": "12.34.56.78q"
+            "version": "123.0.1",
+            "ebuild_version": "12.34.56.78q"
         },
         {
             "category": "_not.real-category2+",
             "name": "_not-real_package2",
-            "version": "12.34.56.78q",
-            "revision": "26"
+            "version": "123.0.1",
+            "ebuild_version": "12.34.56.78q-r26"
         },
         {
             "category": "_not.real-category2+",
             "name": "_not-real_package3",
-            "version": "12.34.56.78q_rc3"
+            "version": "123.0.1",
+            "ebuild_version": "12.34.56.78q_rc3"
         },
         {
             "category": "_not.real-category2+",
             "name": "_not-real_package4",
-            "version": "12.34.56.78q_rc3",
-            "revision": "26"
+            "version": "123.0.1",
+            "ebuild_version": "12.34.56.78q_rc3-r26"
         },
         {
             "category": "_not.real-category2+",
             "name": "_not-real_package5",
-            "version": "12.34.56.78q_pre2_rc3",
-            "revision": "26"
+            "version": "123.0.1",
+            "ebuild_version": "12.34.56.78q_pre2_rc3-r26"
         }
     ]
 }"""
 
+
   def __init__(self, *args, **kwargs):
     unittest.TestCase.__init__(self, *args, **kwargs)
     self.maxDiff = None
@@ -281,7 +291,8 @@
         'installedPackages': self.INSTALLED_PKG_EXPECTED_LIST,
         'buildTimePackages': self.BUILDTIME_PKG_EXPECTED_LIST,
     }
-    create_pkg_info.WriteJson(pkg_info, mock_file)
+    create_pkg_info.WriteJson(pkg_info, '123.0.1', mock_file)
+    print(mock_file.getvalue())
     self.assertEqual(mock_file.getvalue(), self.EXPECTED_JSON)
     mock_file.close()