#3897 Retrieve task_id for older OSBS builds
Merged 7 months ago by tkopecek. Opened 8 months ago by tkopecek.
tkopecek/koji task_id-for-volume  into  master

file modified
+4 -3
@@ -24,7 +24,7 @@ 

  from six.moves import filter, map, range, zip

  

  import koji

- from koji.util import base64encode, md5_constructor, to_list

+ from koji.util import base64encode, extract_build_task, md5_constructor, to_list

  from koji_cli.lib import (

      TimeOption,

      DatetimeJSONEncoder,
@@ -3600,8 +3600,9 @@ 

              error_hit = True

              continue

          task = None

-         if info['task_id']:

-             task = session.getTaskInfo(info['task_id'], request=True)

+         task_id = extract_build_task(info)

+         if task_id:

+             task = session.getTaskInfo(task_id, request=True)

          taglist = []

          for tag in session.listTags(build):

              taglist.append(tag['name'])

file modified
+16
@@ -970,3 +970,19 @@ 

      if line:

          s.append(line)

      return ' \\\n'.join(s)

+ 

+ 

+ def extract_build_task(binfo):

+     """

+     Helper for extracting task id from buildinfo. CGs and older OSBS approach

+     can put it into different places in binfo

+ 

+     :param dict binfo: buildinfo

+     :returns int: task id

+     """

+ 

+     task_id = binfo.get('task_id')

+     if task_id is None:

+         # legacy OSBS task id location

+         task_id = binfo.get('extra', {}).get('container_koji_task_id')

+     return task_id

file modified
+6 -5
@@ -68,6 +68,7 @@ 

      base64encode,

      decode_bytes,

      dslice,

+     extract_build_task,

      joinpath,

      md5_constructor,

      move_and_symlink,
@@ -5968,7 +5969,7 @@ 

      volume we be retained.

      """

      policy_data = {'build': build}

-     task_id = build['task_id']

+     task_id = extract_build_task(build)

      if task_id:

          policy_data.update(policy_data_from_task(task_id))

      volume = check_volume_policy(policy_data, strict=strict)
@@ -9690,14 +9691,15 @@ 

              data[self.field] = data['source']

          elif 'build' in data:

              build = get_build(data['build'])

+             task_id = extract_build_task(build)

              if build['source'] is not None:

                  data[self.field] = build['source']

-             elif build['task_id'] is None:

+             elif task_id is None:

                  # no source to match against

                  return False

              else:

                  # crack open the build task

-                 task = Task(build['task_id'])

+                 task = Task(task_id)

                  info = task.getInfo(request=True)

                  method = info['method']

                  request = info['request']
@@ -9718,8 +9720,7 @@ 

                  elif 'url' in params:

                      data[self.field] = params['url']

                  else:

-                     print("Unable to determine source from task '{}'".format(

-                         build['task_id']))

+                     print("Unable to determine source from task '{}'".format(task_id))

                      return False

          else:

              return False

@@ -1634,6 +1634,16 @@ 

          for inp, out in cases:

              self.assertEqual(koji.util.format_shell_cmd(inp, text_width=40), out)

  

+ class TestExtractBuildTask(unittest.TestCase):

+     def test_valid_binfos(self):

+         binfos = [

+             {'id': 1, 'task_id': 123},

+             {'id': 1, 'extra': {'container_koji_task_id': 123}},

+         ]

+         for binfo in binfos:

+             res = koji.util.extract_build_task(binfo)

+             self.assertEqual(res, 123)

+ 

  

  if __name__ == '__main__':

      unittest.main()

file modified
+7 -4
@@ -37,6 +37,7 @@ 

  import kojiweb.util

  from koji.server import ServerRedirect

  from kojiweb.util import _genHTML, _getValidTokens, _initValues

+ from koji.util import extract_build_task

  

  

  # Convenience definition of a commonly-used sort function
@@ -1295,8 +1296,9 @@ 

              values[header] = koji.fixEncoding(result.get(header))

          values['changelog'] = server.getChangelogEntries(build['id'])

  

-     if build['task_id']:

-         task = server.getTaskInfo(build['task_id'], request=True)

+     task_id = extract_build_task(build)

+     if task_id:

+         task = server.getTaskInfo(task_id, request=True)

          # get the summary, description, and changelogs from the built srpm

          # if the build is not yet complete

          if build['state'] != koji.BUILD_STATES['COMPLETE']:
@@ -2510,8 +2512,9 @@ 

  

      server.multicall = True

      for build in builds:

-         if build['task_id']:

-             server.getTaskInfo(build['task_id'], request=True)

+         task_id = extract_build_task(build)

+         if task_id:

+             server.getTaskInfo(task_id, request=True)

          else:

              server.echo(None)

      tasks = server.multiCall()

rebased onto 8a3dba6578006bbb03d74879ea759e8f311c2041

8 months ago

It might be useful to have this logic split out so it can be used other places. Perhaps something like koji.util.extract_build_task(binfo)?

We might also want to use it:

  • in SourceTest policy test
  • in web buildinfo page
  • in web recentbuilds page
  • in cli buildinfo output

Alternately, I wonder if we ought to provide tool that would perform a one-time update of build.task_id from this field

rebased onto 2fe445db64108b436f7eef59a04bc0d2273b510f

7 months ago

I've gone with first option. I think that one-time fix needn't to work for all - older OSBS + actual koji.

Metadata Update from @tkopecek:
- Pull-request tagged with: testing-ready

7 months ago

Metadata Update from @relias-redhat:
- Pull-request untagged with: testing-ready

7 months ago

rebased onto 0c58cd9

7 months ago

Metadata Update from @tkopecek:
- Pull-request tagged with: testing-ready

7 months ago

Metadata Update from @mfilip:
- Pull-request tagged with: testing-done

7 months ago

Commit 9f0583f fixes this pull-request

Pull-Request has been merged by tkopecek

7 months ago