URI: 
       tinitial incomplete extraction of jenkins stuff from releasebot - 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
       ---
   DIR commit 28d1b5eacde356a98b00587b0f8efeb32776f817
  HTML Author: parazyd <parazyd@dyne.org>
       Date:   Mon, 24 Jul 2017 16:51:23 +0200
       
       initial incomplete extraction of jenkins stuff from releasebot
       
       Diffstat:
         A build.py                            |      72 +++++++++++++++++++++++++++++++
         A buildadd.py                         |      98 +++++++++++++++++++++++++++++++
         A builddel.py                         |      56 +++++++++++++++++++++++++++++++
         A buildmodify.py                      |       2 ++
         A config.py                           |      40 +++++++++++++++++++++++++++++++
         A funcs.py                            |      52 +++++++++++++++++++++++++++++++
         A templates/binaries-config.xml       |     134 +++++++++++++++++++++++++++++++
         A templates/repos-config.xml          |     112 +++++++++++++++++++++++++++++++
         A templates/source-config.xml         |     119 +++++++++++++++++++++++++++++++
       
       9 files changed, 685 insertions(+), 0 deletions(-)
       ---
   DIR diff --git a/build.py b/build.py
       t@@ -0,0 +1,72 @@
       +#!/usr/bin/env python3
       +
       +"""
       +Module to build Jenkins build jobs
       +"""
       +
       +import sys
       +from os import environ as env
       +from os.path import basename
       +from xml.etree import ElementTree as ET
       +import jenkins
       +
       +from config import dryrun, buildgroups, jobtypes, suites
       +from funcs import fill_template
       +
       +
       +def main():
       +    """
       +    Main function
       +    """
       +    print('* Requested job build')
       +
       +    # Used to differ whether we're adding or modifying
       +    progname = basename(sys.argv[0])
       +
       +    print('- Connecting to Jenkins...')
       +    jenk = jenkins.Jenkins(jenkins_host, jenkins_user, jenkins_pass)
       +
       +    try:
       +        jenk.get_whoami()
       +    except jenkins.JenkinsException:
       +        print('Error in request. Possible authentication fail.')
       +        sys.exit(1)
       +
       +    # XXX: is this check necessary?
       +    if env['SCORSH_GROUP'] not in buildgroups:
       +        print('Unauthorized for a jenkins build. Quitting.')
       +        sys.exit(1)
       +
       +    # the -4 cuts off '.git' from the path
       +    pkgname = basename(env['SCORSH_REPO'])[:-4]
       +
       +    for jobt in jobtypes:
       +        jobname = '-'.join([pkgname, jobt])
       +        if not jenk.job_exists(jobname):
       +            print('%s does not exist in Jenkins! Quitting.' % jobname)
       +            sys.exit(1)
       +
       +    # parse xml to find scm uri (line 274)
       +    jobconfig = ET.fromstring(jenk.get_job_config(jobname))
       +
       +    jobrepo = "".join(jobconfig.find('scm').find('userRemoteConfigs').find(
       +                      'hudson.plugins.git.UserRemoteConfig').find(
       +                      'url').text.splitlines())  # dafuq!?
       +
       +    build_for = []  # looks unnecessary in releasebot (line 292)
       +                    # perhaps we should just build everywhere we can?
       +                    # discuss
       +
       +    build_for = suites
       +    for build in build_for:
       +        print('- Building for %s' % build)
       +        if not dryrun:
       +            jenk.build_job(jobname, {'codename': build})
       +
       +
       +if __name__ == '__main__':
       +    if len(sys.argv) > 1:
       +        main()
       +    else:
       +        print('Error: not enough arguments')
       +        sys.exit(1)
   DIR diff --git a/buildadd.py b/buildadd.py
       t@@ -0,0 +1,98 @@
       +#!/usr/bin/env python3
       +
       +"""
       +Module to add or modify Jenkins build jobs
       +"""
       +
       +import sys
       +from os import environ as env
       +from os.path import basename
       +import jenkins
       +
       +from config import (jenkins_user, jenkins_pass, jenkins_host, jobtypes,
       +                    arches_qemusys, architectures, dryrun)
       +from funcs import fill_template
       +
       +
       +def main():
       +    """
       +    Main function
       +    """
       +    print('* Requested job creation/modification')
       +
       +    # Used to differ whether we're adding or modifying
       +    progname = basename(sys.argv[0])
       +
       +    print('- Connecting to Jenkins...')
       +    jenk = jenkins.Jenkins(jenkins_host, jenkins_user, jenkins_pass)
       +
       +    try:
       +        jenk.get_whoami()
       +    except jenkins.JenkinsException:
       +        print('Error in request. Possible authentication fail.')
       +        sys.exit(1)
       +
       +    # the -4 cuts off '.git' from the path
       +    pkgname = basename(env['SCORSH_REPO'])[:-4]
       +    group = env['SCORSH_GROUP']
       +
       +    for jobt in jobtypes:
       +        jobname = '-'.join([pkgname, jobt])
       +
       +        # TODO: here maybe correlate to config.buildgroups
       +        # i.e.: if not group in buildgroups: exit
       +
       +        print('* Trying to create %s job for %s/%s' % (jobt, group, pkgname))
       +
       +        if jenk.job_exists(jobname) and progname == 'buildadd.py':
       +            print('* %s already exists')
       +            continue
       +        elif not jenk.job_exists(jobname) and progname == 'buildmodify.py':
       +            print('* %s does not exist in Jenkins')
       +            continue
       +
       +        build_sequential = 'false'
       +        arches = []
       +        qemusys = []
       +        jlabels = []
       +        for arg in sys.argv[1:]:
       +            # XXX: What is build_sequential?
       +            if arg == 'sequential':
       +                build_sequential = 'true'
       +            # XXX: What is pbuilder_network?
       +            elif arg == 'pbuilder_network':
       +                add_buildvar = 'export PBUILDER_USENETWORK=true'
       +            elif arg in architectures:
       +                arches.append(arg)
       +            # XXX: What is qemusys?
       +            elif arg in arches_qemusys:
       +                qemusys.append(arg)
       +
       +        # set is to remove dupes
       +        jlabels = list(set(arches + qemusys))
       +
       +        # XXX: now there is some mention of description
       +        # and puilder_network again. Wat do?
       +
       +        # Here we use the XML template
       +        pxml = fill_template(pkgname, jobt, arches,
       +                             git_uri=env['SCORSH_GITURL'],
       +                             buildvar=add_buildvar,
       +                             sequential=build_sequential, jlabels=jlabels)
       +
       +        if pxml and progname == 'buildadd.py':
       +            print('- Creating job')
       +            if not dryrun:
       +                jenk.create_job(jobname, pxml)
       +        elif pxml and progname == 'buildmodify.py':
       +            print('- Modifying job')
       +            if not dryrun:
       +                jenk.reconfig_job(jobname, pxml)
       +
       +
       +if __name__ == '__main__':
       +    if len(sys.argv) > 1:
       +        main()
       +    else:
       +        print('Error: not enough arguments')
       +        sys.exit(1)
   DIR diff --git a/builddel.py b/builddel.py
       t@@ -0,0 +1,56 @@
       +#!/usr/bin/env python3
       +
       +"""
       +Module to delete Jenkins build jobs
       +"""
       +
       +import sys
       +from os import environ as env
       +from os.path import basename
       +import jenkins
       +
       +from config import (jenkins_user, jenkins_pass, jenkins_host, jobtypes,
       +                    dryrun)
       +
       +
       +def main():
       +    """
       +    Main function
       +    """
       +    print('* Requested job deletion')
       +
       +    print('- Connecting to Jenkins...')
       +    jenk = jenkins.Jenkins(jenkins_host, jenkins_user, jenkins_pass)
       +
       +    try:
       +        jenk.get_whoami()
       +    except jenkins.JenkinsException:
       +        print('Error in request. Possible authentication fail.')
       +        sys.exit(1)
       +
       +    for jobt in jobtypes:
       +        # the -4 cuts off '.git' from the path
       +        pkgname = basename(env['SCORSH_REPO'])[:-4]
       +        jobname = '-'.join([pkgname, jobt])
       +
       +        # TODO: here maybe correlate to config.buildgroups
       +        # i.e.: if not group in buildgroups: exit
       +        group = env['SCORSH_GROUP']
       +
       +        print('* Trying to delete %s job for %s/%s' % (jobt, group, pkgname))
       +
       +        if not jenk.job_exists(jobname):
       +            print('* %s does not exist in Jenkins' % jobname)
       +            continue
       +
       +        print('- Deleting job')
       +        if not dryrun:
       +            jenk.delete_job(jobname)
       +
       +
       +if __name__ == '__main__':
       +    if len(sys.argv) > 1:
       +        main()
       +    else:
       +        print('Error: not enough arguments')
       +        sys.exit(1)
   DIR diff --git a/buildmodify.py b/buildmodify.py
       t@@ -0,0 +1 @@
       +buildadd.py
       +\ No newline at end of file
   DIR diff --git a/config.py b/config.py
       t@@ -0,0 +1,40 @@
       +"""
       +Releasebot configuration file
       +"""
       +
       +dryrun = True
       +templatedir = './templates'
       +
       +jenkins_user = ''
       +jenkins_pass = ''
       +jenkins_host = 'https://ci.devuan.org'
       +
       +vcs_credentials = ''
       +
       +jobtypes = ['source', 'binaries', 'repos']
       +
       +buildgroups = [
       +    'devuan-packages',
       +    'maemo',
       +]
       +
       +suites = [
       +    'jessie',
       +    'ascii',
       +    'unstable',
       +]
       +
       +architectures = [
       +    'all'
       +    'amd64',
       +    'i386',
       +    'armel',
       +    'armhf',
       +    'arm64',
       +]
       +
       +arches_qemusys = [
       +    'armel_qemusys',
       +    'armhf_qemusys',
       +    'arm64_qemusys',
       +]
   DIR diff --git a/funcs.py b/funcs.py
       t@@ -0,0 +1,52 @@
       +"""
       +Common releasebot functions
       +"""
       +
       +from os.path import isfile, join
       +
       +from config import templatedir, vcs_credentials
       +
       +def read_template(jobtype):
       +    """
       +    Reads a template file into memory
       +    """
       +    fpath = join(templatedir, jobtype+'-config.xml')
       +    if isfile(fpath):
       +        return open(fpath).read()
       +
       +    return None
       +
       +
       +def fill_template(pkgname, jobtype, arches=[], desc=None, git_uri=None,
       +                  buildvar='', sequential=None, jlabels=[]):
       +    """
       +    Fills up blanks in the template
       +    """
       +    tmpl = read_template(jobtype)
       +
       +
       +    if tmpl:
       +        if not git_uri:
       +            git_uri = 'https://git.devuan.org/devuan-packages/%s.git' % pkgname
       +        if not desc:
       +            desc = 'Releasebot created Jenkins job for %s %s packaging' % \
       +                                                             (pkgname, jobtype)
       +        archlist = ''
       +        for a in arches:
       +            archlist += '        <string>%s</string>\n' % a
       +
       +        jlablist = ''
       +        for l in jlabels:
       +            jlablist += '        <string>%s</string>\n' % l
       +
       +        tmpl = tmpl.replace('[PKGNAME]', pkgname)
       +        tmpl = tmpl.replace('[GIT_URI]', git_uri)
       +        tmpl = tmpl.replace('[GIT_CREDENTIALS]', vcs_credentials)
       +        tmpl = tmpl.replace('[DESCRIPTION]', desc)
       +        tmpl = tmpl.replace('[ARCHITECTURES]', archlist)
       +        tmpl = tmpl.replace('[LABELS]', jlablist)
       +        tmpl = tmpl.replace('[BUILD_ADDVAR]', buildvar)
       +        tmpl = tmpl.replace('[RUNSEQUENTIAL]', sequential)
       +        return tmpl
       +
       +    return None
   DIR diff --git a/templates/binaries-config.xml b/templates/binaries-config.xml
       t@@ -0,0 +1,134 @@
       +<?xml version='1.0' encoding='UTF-8'?>
       +<matrix-project plugin="matrix-project@1.4">
       +  <actions/>
       +  <description>[DESCRIPTION]</description>
       +  <logRotator class="hudson.tasks.LogRotator">
       +    <daysToKeep>-1</daysToKeep>
       +    <numToKeep>5</numToKeep>
       +    <artifactDaysToKeep>-1</artifactDaysToKeep>
       +    <artifactNumToKeep>-1</artifactNumToKeep>
       +  </logRotator>
       +  <keepDependencies>false</keepDependencies>
       +  <properties>
       +    <com.suryagaddipati.jenkins.SlaveUtilizationProperty plugin="slave-utilization-plugin@1.8">
       +      <needsExclusiveAccessToNode>false</needsExclusiveAccessToNode>
       +      <singleInstancePerSlave>false</singleInstancePerSlave>
       +      <slaveUtilizationPercentage>0</slaveUtilizationPercentage>
       +    </com.suryagaddipati.jenkins.SlaveUtilizationProperty>
       +    <hudson.model.ParametersDefinitionProperty>
       +      <parameterDefinitions>
       +        <hudson.model.TextParameterDefinition>
       +          <name>codename</name>
       +          <description></description>
       +          <defaultValue>experimental</defaultValue>
       +        </hudson.model.TextParameterDefinition>
       +      </parameterDefinitions>
       +    </hudson.model.ParametersDefinitionProperty>
       +  </properties>
       +  <scm class="hudson.scm.NullSCM"/>
       +  <canRoam>true</canRoam>
       +  <disabled>false</disabled>
       +  <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
       +  <blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
       +  <triggers/>
       +  <concurrentBuild>false</concurrentBuild>
       +  <axes>
       +    <hudson.matrix.TextAxis>
       +      <name>architecture</name>
       +      <values>
       +[ARCHITECTURES]
       +      </values>
       +    </hudson.matrix.TextAxis>
       +    <hudson.matrix.LabelAxis>
       +      <name>label</name>
       +      <values>
       +[LABELS]
       +      </values>
       +    </hudson.matrix.LabelAxis>
       +  </axes>
parazyd.org:70 /git/devuan-releasebot/commit/28d1b5eacde356a98b00587b0f8efeb32776f817.gph:409: line too long