#3926 Track uploads in BuildRoot and log mock config
Closed a year ago by mikem. Opened 2 years ago by mikem.

file modified
+39 -41
@@ -199,6 +199,7 @@ 

          self.logger = logging.getLogger("koji.build.buildroot")

          self.session = session

          self.options = options

+         self.logs = set()

          if len(args) + len(kwargs) == 1:

              # manage an existing mock buildroot

              self._load(*args, **kwargs)
@@ -346,6 +347,8 @@ 

          with koji._open_text_file(configfile, 'wt') as fo:

              fo.write(output)

  

+         self.single_log(configfile, name='mock_config.log')

+ 

      def get_repo_dir(self):

          pathinfo = koji.PathInfo(topdir='')

          return pathinfo.repo(self.repoid, self.tag_name)
@@ -468,7 +471,6 @@ 

          pid = os.fork()

          if pid:

              resultdir = self.resultdir()

-             uploadpath = self.getUploadPath()

              logs = {}

  

              ts_offsets = {}
@@ -550,7 +552,7 @@ 

                              with koji._open_text_file(fpath, 'at') as ts_file:

                                  ts_file.write('%.0f %i\n' % (time.time(), position))

                              ts_offsets[fname] = position

-                     incremental_upload(self.session, fname, fd, uploadpath, logger=self.logger)

+                     self.incremental_log(fname, fd)

  

              # clean up and return exit status of command

              for (fname, (fd, inode, size, fpath)) in logs.items():
@@ -559,7 +561,7 @@ 

                  if fname.endswith('-ts.log'):

                      # finish upload of ts.log as they could've been missed in

                      # last iteration

-                     incremental_upload(self.session, fname, fd, uploadpath, logger=self.logger)

+                     self.incremental_log(fname, fd)

                  fd.close()

              return status[1]

  
@@ -591,6 +593,17 @@ 

          the hub."""

          return koji.pathinfo.taskrelpath(self.task_id)

  

+     def incremental_log(self, fname, fd):

+         ret = incremental_upload(self.session, fname, fd, self.getUploadPath(), logger=self.logger)

+         self.logs.add(fname)

+         return ret

+ 

+     def single_log(self, localfile, name=None):

+         if name is None:

+             name = os.path.basename(localfile)

+         self.session.uploadWrapper(localfile, self.getUploadPath(), name=name)

+         self.logs.add(name)

+ 

      def init(self):

          rv = self.mock(['--init'])

  
@@ -1550,12 +1563,13 @@ 

          resultdir = broot.resultdir()

          rpm_files = []

          srpm_files = []

-         log_files = []

+         log_files = list(broot.logs)

          unexpected = []

          for f in os.listdir(resultdir):

              # files here should have one of two extensions: .log and .rpm

-             if f[-4:] == ".log":

-                 log_files.append(f)

+             if f[-4:] in (".log"):

+                 pass

+                 # should already be in log_files

              elif f[-8:] == ".src.rpm":

                  srpm_files.append(f)

              elif f[-4:] == ".rpm":
@@ -1563,12 +1577,6 @@ 

              else:

                  unexpected.append(f)

  

-         if broot.workdir:

-             mocklog = 'mock_output.log'

-             f = os.path.join(broot.workdir, mocklog)

-             if os.path.exists(f):

-                 log_files.append(os.path.basename(f))

- 

          # for noarch rpms compute rpmdiff hash

          rpmdiff_hash = {self.id: {}}

          for rpmf in rpm_files:
@@ -1580,6 +1588,7 @@ 

              log_name = 'noarch_rpmdiff.json'

              noarch_hash_path = os.path.join(broot.workdir, log_name)

              koji.dump_json(noarch_hash_path, rpmdiff_hash, indent=2, sort_keys=True)

+             self.uploadFile(noarch_hash_path)

              log_files.append(log_name)

  

          self.logger.debug("rpms: %r" % rpm_files)
@@ -1613,8 +1622,6 @@ 

          else:

              ret['srpms'] = []

          ret['logs'] = ["%s/%s" % (uploadpath, f) for f in log_files]

-         if rpmdiff_hash[self.id]:

-             self.uploadFile(noarch_hash_path)

  

          ret['brootid'] = broot.id

  
@@ -1948,16 +1955,8 @@ 

                  self.uploadFile(os.path.join(outputdir, relpath, filename),

                                  relPath=relpath)

  

-         # Should only find log files in the mock result directory.

-         # Don't upload these log files, they've already been streamed

-         # the hub.

-         for filename in os.listdir(buildroot.resultdir()):

-             root, ext = os.path.splitext(filename)

-             if ext == '.log':

-                 filepath = os.path.join(buildroot.resultdir(), filename)

-                 if os.path.isfile(filepath) and os.stat(filepath).st_size > 0:

-                     # only files with content get uploaded to the hub

-                     logs.append(filename)

+         # Also include the logs already upload by BuildRoot

+         logs.extend(buildroot.logs)

  

          buildroot.expire()

  
@@ -2274,7 +2273,7 @@ 

          srpm = None

          rpms = []

          specfile_name = os.path.basename(specfile)

-         logs = ['checkout.log', specfile_name]

+         logs = ['checkout.log', specfile_name] + list(buildroot.logs)

  

          for filename in os.listdir(resultdir):

              if filename.endswith('.src.rpm'):
@@ -2288,7 +2287,8 @@ 

              elif filename.endswith('.rpm'):

                  rpms.append(filename)

              elif filename.endswith('.log'):

-                 logs.append(filename)

+                 pass

+                 # already included in buildroot.logs

              else:

                  if self.new_build_id:

                      self.session.host.failBuild(self.id, self.new_build_id)
@@ -3425,13 +3425,13 @@ 

          self.logger.debug('output: %s' % results)

          if len(results) == 0:

              raise koji.ApplianceError("Could not find image build results!")

+         logs = ['appliance.log', os.path.basename(ksfile), os.path.basename(kskoji)]

+         logs.extend(broot.logs)

          imgdata = {

              'arch': arch,

              'rootdev': self.getRootDevice(),

              'task_id': self.id,

-             'logs': ['build.log', 'mock_output.log', 'root.log', 'state.log',

-                      'appliance.log', os.path.basename(ksfile),

-                      os.path.basename(kskoji)],

+             'logs': logs,

              'name': name,

              'version': version,

              'release': release
@@ -3597,13 +3597,13 @@ 

          self.uploadFile(manifest)

          self.uploadFile(isosrc, remoteName=isoname)

  

+         logs = ['livecd.log', os.path.basename(ksfile), os.path.basename(kskoji)]

+         logs.extend(broot.logs)

          imgdata = {'arch': arch,

                     'files': [isoname],

                     'rootdev': None,

                     'task_id': self.id,

-                    'logs': ['build.log', 'mock_output.log', 'root.log', 'state.log',

-                             'livecd.log', os.path.basename(ksfile),

-                             os.path.basename(kskoji)],

+                    'logs': logs,

                     'name': name,

                     'version': version,

                     'release': release
@@ -3852,13 +3852,13 @@ 

          self.logger.debug('uploading image: %s' % isosrc)

          self.uploadFile(isosrc, remoteName=isoname)

  

+         logs = ['livemedia-out.log', os.path.basename(ksfile), os.path.basename(kskoji)]

+         logs.extend(broot.logs)

          imgdata = {'arch': arch,

                     'files': [isoname],

                     'rootdev': None,

                     'task_id': self.id,

-                    'logs': ['build.log', 'mock_output.log', 'root.log', 'state.log',

-                             'livemedia-out.log', os.path.basename(ksfile),

-                             os.path.basename(kskoji)],

+                    'logs': logs,

                     'name': name,

                     'version': version,

                     'release': release
@@ -5129,14 +5129,13 @@ 

          self.uploadFile(srpm)

  

          brootid = broot.id

-         log_files = glob.glob('%s/*.log' % broot.resultdir())

+         log_files = list(broot.logs)

  

          broot.expire()

  

          return {

              'srpm': "%s/%s" % (uploadpath, srpm_name),

-             'logs': ["%s/%s" % (uploadpath, os.path.basename(f))

-                      for f in log_files],

+             'logs': ["%s/%s" % (uploadpath, f) for f in log_files],

              'brootid': brootid,

              'source': {

                  'source': os.path.basename(srpm),
@@ -5299,13 +5298,12 @@ 

          self.uploadFile(srpm)

  

          brootid = broot.id

-         log_files = glob.glob('%s/*.log' % broot.resultdir())

+         log_files = list(broot.logs)

  

          broot.expire()

  

          return {'srpm': "%s/%s" % (uploadpath, srpm_name),

-                 'logs': ["%s/%s" % (uploadpath, os.path.basename(f))

-                          for f in log_files],

+                 'logs': ["%s/%s" % (uploadpath, f) for f in log_files],

                  'brootid': brootid,

                  'source': source,

                  }

2 new commits added

  • also use in appliance/livecd/liveimage
  • rename var
2 years ago

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

a year ago

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

a year ago

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

a year ago

Rebased onto current head, 0251961. Minor conflict with the new get_repo_dir() method from the draft builds PR.

+         self.single_log(configfile, name='mock_config.log')
+ 
 +    def get_repo_dir(self):
 +        pathinfo = koji.PathInfo(topdir='')
 +        return pathinfo.repo(self.repoid, self.tag_name)
 +

unit tests passing

rebased onto b2c3723

a year ago

side note: pagure lists the wrong ref in its "rebased onto" messages. https://pagure.io/pagure/issue/4504

1 new commit added

  • typo in BuildMavenTask
a year ago

Closing this. All the changes are included in #4023

Pull-Request has been closed by mikem

a year ago
Metadata