URI:
       tbuildadd.py - devuan-releasebot - devuan's releasebot reimplemented (scorsh version)
  HTML git clone git://parazyd.org/devuan-releasebot.git
   DIR Log
   DIR Files
   DIR Refs
   DIR LICENSE
       ---
       tbuildadd.py (3896B)
       ---
            1 #!/usr/bin/env python3
            2 # See LICENSE file for copyright and license details.
            3 
            4 """
            5 Module to add or modify Jenkins build jobs
            6 """
            7 
            8 import sys
            9 from os import environ as env
           10 from os.path import basename
           11 import jenkins
           12 
           13 from config import (jenkins_user, jenkins_pass, jenkins_host, jobtypes,
           14                     arches_qemusys, arches_any, architectures, dryrun,
           15                     allowed_distros)
           16 from funcs import fill_template
           17 
           18 
           19 def main():
           20     """
           21     Main function
           22     """
           23     # Used to differ whether we're adding or modifying
           24     progname = basename(sys.argv[0])
           25 
           26     if progname == 'buildadd.py':
           27         print('* Requested job creation')
           28     elif progname == 'buildmodify.py':
           29         print('* Requested job modification')
           30     else:
           31         print('Invalid basename. Exiting...')
           32         sys.exit(1)
           33 
           34     print('- Connecting to Jenkins...')
           35     jenk = jenkins.Jenkins(jenkins_host, jenkins_user, jenkins_pass)
           36 
           37     try:
           38         jenk.get_whoami()
           39     except jenkins.JenkinsException:
           40         print('Error in request. Possible authentication fail.')
           41         sys.exit(1)
           42 
           43     # the -4 cuts off '.git' from the path
           44     pkgname = basename(env['SCORSH_REPO'])[:-4]
           45 
           46     # the distro owning the job, e.g. "maemo/jessie", or "devuan/ascii-proposed"
           47     distro = env['SCORSH_BRANCH'].split("/")[0]
           48     if distro not in allowed_distros:
           49         print('Error: This distribution is not supported. Exiting.')
           50         sys.exit(1)
           51     # devuan's reserved namespace
           52     elif distro == 'suites':
           53         distro = 'devuan'
           54 
           55     for jobt in jobtypes:
           56         # jobname = '-'.join([pkgname, jobt])
           57         jobname = distro+':'+pkgname+'-'+jobt
           58 
           59         print('* Trying to create %s job for %s' % (jobt, pkgname))
           60 
           61         if jenk.job_exists(jobname) and progname == 'buildadd.py':
           62             print('* %s already exists')
           63             continue
           64         elif not jenk.job_exists(jobname) and progname == 'buildmodify.py':
           65             print('* %s does not exist in Jenkins')
           66             continue
           67 
           68         build_sequential = 'false'
           69         arches = []
           70         qemusys = []
           71         jlabels = []
           72         for arg in sys.argv[1:]:
           73             if arg == 'sequential':
           74                 build_sequential = 'true'
           75             elif arg == 'pbuilder_network':
           76                 add_buildvar = 'export PBUILDER_USENETWORK=true'
           77             elif arg == 'any':
           78                 arches = arches_any
           79             elif arg == 'any_qemusys':
           80                 qemusys = arches_qemusys
           81             elif arg in architectures:
           82                 arches.append(arg)
           83             elif arg in arches_qemusys:
           84                 qemusys.append(arg)
           85             # in original releasebot, no arch specified implies all of them
           86             # not sure if we should imply this. explicitly declaring our
           87             # architectures brings readability and better understanding
           88 
           89         # set is to remove dupes
           90         jlabels = list(set(arches + qemusys))
           91 
           92         # XXX: now there is some mention of description
           93         # which seems the gitlab issue description. did we ever pass this?
           94 
           95         # Here we use the XML template
           96         pxml = fill_template(pkgname, jobt, distro, arches,
           97                              git_uri=env['SCORSH_GITURL'],
           98                              buildvar=add_buildvar,
           99                              sequential=build_sequential, jlabels=jlabels)
          100 
          101         if pxml and progname == 'buildadd.py':
          102             print('- Creating job')
          103             if not dryrun:
          104                 jenk.create_job(jobname, pxml)
          105         elif pxml and progname == 'buildmodify.py':
          106             print('- Modifying job')
          107             if not dryrun:
          108                 jenk.reconfig_job(jobname, pxml)
          109         else:
          110             print('* Internal error. Check your XML files and the exe name')
          111             sys.exit(1)
          112 
          113 
          114 if __name__ == '__main__':
          115     if len(sys.argv) > 1:
          116         main()
          117     else:
          118         print('Error: not enough arguments')
          119         sys.exit(1)