devuan-releasebot

devuan's releasebot reimplemented (scorsh version)
git clone git://parazyd.org/devuan-releasebot.git
Log | Files | Refs | LICENSE

commit 28d1b5eacde356a98b00587b0f8efeb32776f817
Author: parazyd <parazyd@dyne.org>
Date:   Mon, 24 Jul 2017 16:51:23 +0200

initial incomplete extraction of jenkins stuff from releasebot

Diffstat:
Abuild.py | 72++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Abuildadd.py | 98+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Abuilddel.py | 56++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Abuildmodify.py | 2++
Aconfig.py | 40++++++++++++++++++++++++++++++++++++++++
Afuncs.py | 52++++++++++++++++++++++++++++++++++++++++++++++++++++
Atemplates/binaries-config.xml | 134+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Atemplates/repos-config.xml | 112+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Atemplates/source-config.xml | 119+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
9 files changed, 685 insertions(+), 0 deletions(-)

diff --git a/build.py b/build.py @@ -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) diff --git a/buildadd.py b/buildadd.py @@ -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) diff --git a/builddel.py b/builddel.py @@ -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) diff --git a/buildmodify.py b/buildmodify.py @@ -0,0 +1 @@ +buildadd.py+ \ No newline at end of file diff --git a/config.py b/config.py @@ -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', +] diff --git a/funcs.py b/funcs.py @@ -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 diff --git a/templates/binaries-config.xml b/templates/binaries-config.xml @@ -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> + <combinationFilter>(label=="all").implies(architecture=="all") &amp;&amp; (label=="amd64").implies(architecture=="amd64") &amp;&amp; (label=="i386").implies(architecture=="i386") &amp;&amp; (label=="armel").implies(architecture=="armel") &amp;&amp; (label=="armhf").implies(architecture=="armhf") &amp;&amp; (label=="sparc64").implies(architecture=="sparc64") &amp;&amp; (label=="s390x").implies(architecture=="s390x") &amp;&amp; (label=="ppc64el").implies(architecture=="ppc64el") &amp;&amp; (label=="powerpc").implies(architecture=="powerpc") &amp;&amp; (label=="or1k").implies(architecture=="or1k") &amp;&amp; (label=="mipsel").implies(architecture=="mipsel") &amp;&amp; (label=="mips").implies(architecture=="mips") &amp;&amp; (label=="m68k").implies(architecture=="m68k") &amp;&amp; (label=="m32").implies(architecture=="m32") &amp;&amp; (label=="ia64").implies(architecture=="ia64") &amp;&amp; (label=="hppa").implies(architecture=="hppa") &amp;&amp; (label=="alpha").implies(architecture=="alpha") &amp;&amp; (label=="arm64").implies(architecture=="arm64") &amp;&amp; (label=="sparc").implies(architecture=="sparc") &amp;&amp; (label=="armhf_qemusys").implies(architecture=="armhf") &amp;&amp; (label=="arm64_qemusys").implies(architecture=="arm64") &amp;&amp; (label=="armel_qemusys").implies(architecture=="armel")</combinationFilter> + <builders> + <hudson.plugins.copyartifact.CopyArtifact plugin="copyartifact@1.34"> + <project>[PKGNAME]-source</project> + <parameters>codename=$codename</parameters> + <filter>*</filter> + <target></target> + <excludes>*source.changes</excludes> + <selector class="hudson.plugins.copyartifact.TriggeredBuildSelector"> + <fallbackToLastSuccessful>true</fallbackToLastSuccessful> + <upstreamFilterStrategy>UseGlobalSetting</upstreamFilterStrategy> + </selector> + <doNotFingerprintArtifacts>false</doNotFingerprintArtifacts> + </hudson.plugins.copyartifact.CopyArtifact> + <hudson.tasks.Shell> + <command>export BUILD_ONLY=true +export SUDO_CMD=sudo +if [ -n &quot;$gitlabBranch&quot; ] ; then + export codename=$gitlabBranch +fi +codename=${codename%%-proposed} +if [ &quot;$codename&quot; = &quot;experimental&quot; ] ; then + export distribution=&quot;unstable&quot; +else + export distribution=$codename +fi +[BUILD_ADDVAR] +export FORCE_BINARY_ONLY=$label +/usr/bin/build-and-provide-package +# when using subversion: +# /usr/bin/generate-svn-snapshot +env</command> + </hudson.tasks.Shell> + <hudson.tasks.Shell> + <command>mkdir -p report +# For the source package: +/usr/bin/lintian-junit-report *.dsc &gt; report/lintian.xml +# or, for the binary package: +/usr/bin/lintian-junit-report *.changes &gt; report/lintian.xml</command> + </hudson.tasks.Shell> + </builders> + <publishers> + <hudson.tasks.ArtifactArchiver> + <artifacts>*.gz,*.bz2,*.xz,*.deb,*.dsc,*.changes,*.udeb,*.git</artifacts> + <allowEmptyArchive>false</allowEmptyArchive> + <onlyIfSuccessful>false</onlyIfSuccessful> + <fingerprint>false</fingerprint> + <defaultExcludes>true</defaultExcludes> + </hudson.tasks.ArtifactArchiver> + <hudson.plugins.ircbot.IrcPublisher plugin="ircbot@2.25"> + <targets class="empty-list"/> + <strategy>ALL</strategy> + <notifyOnBuildStart>false</notifyOnBuildStart> + <notifySuspects>false</notifySuspects> + <notifyCulprits>false</notifyCulprits> + <notifyFixers>false</notifyFixers> + <notifyUpstreamCommitters>false</notifyUpstreamCommitters> + <buildToChatNotifier class="hudson.plugins.im.build_notify.DefaultBuildToChatNotifier" plugin="instant-messaging@1.32"/> + <matrixMultiplier>ONLY_CONFIGURATIONS</matrixMultiplier> + <channels/> + </hudson.plugins.ircbot.IrcPublisher> + <hudson.plugins.parameterizedtrigger.BuildTrigger plugin="parameterized-trigger@2.25"> + <configs> + <hudson.plugins.parameterizedtrigger.BuildTriggerConfig> + <configs> + <hudson.plugins.parameterizedtrigger.CurrentBuildParameters/> + </configs> + <projects>[PKGNAME]-repos</projects> + <condition>ALWAYS</condition> + <triggerWithNoParameters>false</triggerWithNoParameters> + </hudson.plugins.parameterizedtrigger.BuildTriggerConfig> + </configs> + </hudson.plugins.parameterizedtrigger.BuildTrigger> + </publishers> + <buildWrappers> + <hudson.plugins.ws__cleanup.PreBuildCleanup plugin="ws-cleanup@0.25"> + <deleteDirs>false</deleteDirs> + <cleanupParameter></cleanupParameter> + <externalDelete></externalDelete> + </hudson.plugins.ws__cleanup.PreBuildCleanup> + <hudson.plugins.timestamper.TimestamperBuildWrapper plugin="timestamper@1.5.15"/> + </buildWrappers> + <executionStrategy class="hudson.matrix.DefaultMatrixExecutionStrategyImpl"> + <runSequentially>[RUNSEQUENTIAL]</runSequentially> + </executionStrategy> +</matrix-project> diff --git a/templates/repos-config.xml b/templates/repos-config.xml @@ -0,0 +1,112 @@ +<?xml version='1.0' encoding='UTF-8'?> +<project> + <actions/> + <description>[DESCRIPTION]</description> + <logRotator class="hudson.tasks.LogRotator"> + <daysToKeep>-1</daysToKeep> + <numToKeep>3</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.StringParameterDefinition> + <name>codename</name> + <description></description> + <defaultValue>experimental</defaultValue> + </hudson.model.StringParameterDefinition> + </parameterDefinitions> + </hudson.model.ParametersDefinitionProperty> + </properties> + <scm class="hudson.scm.NullSCM"/> + <assignedNode>repository</assignedNode> + <canRoam>false</canRoam> + <disabled>false</disabled> + <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding> + <blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding> + <triggers/> + <concurrentBuild>false</concurrentBuild> + <builders> + <hudson.plugins.copyartifact.CopyArtifact plugin="copyartifact@1.34"> + <project>[PKGNAME]-binaries</project> + <parameters>codename=$codename</parameters> + <filter>*</filter> + <target></target> + <excludes></excludes> + <selector class="hudson.plugins.copyartifact.TriggeredBuildSelector"> + <fallbackToLastSuccessful>true</fallbackToLastSuccessful> + <upstreamFilterStrategy>UseGlobalSetting</upstreamFilterStrategy> + </selector> + <doNotFingerprintArtifacts>false</doNotFingerprintArtifacts> + </hudson.plugins.copyartifact.CopyArtifact> + <hudson.plugins.copyartifact.CopyArtifact plugin="copyartifact@1.34"> + <project>[PKGNAME]-source</project> + <parameters>codename=$codename</parameters> + <filter>*</filter> + <target>architecture=source,label=source</target> + <excludes></excludes> + <selector class="hudson.plugins.copyartifact.StatusBuildSelector"> + <stable>true</stable> + </selector> + <doNotFingerprintArtifacts>false</doNotFingerprintArtifacts> + </hudson.plugins.copyartifact.CopyArtifact> + <hudson.tasks.Shell> + <command>if [ -n &quot;$gitlabBranch&quot; ] ; then + export codename=$gitlabBranch +fi +. /etc/jenkins/debian_glue +export KEY_ID +for i in architecture* ; do + #cp $i/* . + cd $i + debsign --no-re-sign -k$KEY_ID *.changes || true + debsign --no-re-sign -k$KEY_ID *.dsc || true + cd .. +done +#find . -type d -name &apos;architecture*&apos; | xargs rm -r + +#debsign --no-re-sign -k$KEY_ID *.changes +#debsign --no-re-sign -k$KEY_ID *.dsc +ssh dak@repo.devuan.org mkdir /home/dak/jenkins/$BUILD_TAG +scp -r * dak@repo.devuan.org:/home/dak/jenkins/$BUILD_TAG +ssh dak@repo.devuan.org dak_add_pkgs -s $codename -c main $BUILD_TAG +env</command> + </hudson.tasks.Shell> + </builders> + <publishers> + <hudson.tasks.ArtifactArchiver> + <artifacts>*/*</artifacts> + <allowEmptyArchive>false</allowEmptyArchive> + <onlyIfSuccessful>false</onlyIfSuccessful> + <fingerprint>false</fingerprint> + <defaultExcludes>true</defaultExcludes> + </hudson.tasks.ArtifactArchiver> + <hudson.plugins.ircbot.IrcPublisher plugin="ircbot@2.25"> + <targets class="empty-list"/> + <strategy>ALL</strategy> + <notifyOnBuildStart>false</notifyOnBuildStart> + <notifySuspects>false</notifySuspects> + <notifyCulprits>false</notifyCulprits> + <notifyFixers>false</notifyFixers> + <notifyUpstreamCommitters>false</notifyUpstreamCommitters> + <buildToChatNotifier class="hudson.plugins.im.build_notify.DefaultBuildToChatNotifier" plugin="instant-messaging@1.32"/> + <matrixMultiplier>ONLY_CONFIGURATIONS</matrixMultiplier> + <channels/> + </hudson.plugins.ircbot.IrcPublisher> + </publishers> + <buildWrappers> + <hudson.plugins.ws__cleanup.PreBuildCleanup plugin="ws-cleanup@0.25"> + <deleteDirs>false</deleteDirs> + <cleanupParameter></cleanupParameter> + <externalDelete></externalDelete> + </hudson.plugins.ws__cleanup.PreBuildCleanup> + <hudson.plugins.timestamper.TimestamperBuildWrapper plugin="timestamper@1.5.15"/> + </buildWrappers> +</project> diff --git a/templates/source-config.xml b/templates/source-config.xml @@ -0,0 +1,119 @@ +<?xml version='1.0' encoding='UTF-8'?> +<project> + <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.StringParameterDefinition> + <name>codename</name> + <description></description> + <defaultValue>experimental</defaultValue> + </hudson.model.StringParameterDefinition> + </parameterDefinitions> + </hudson.model.ParametersDefinitionProperty> + </properties> + <scm class="hudson.plugins.git.GitSCM" plugin="git@2.3.4"> + <configVersion>2</configVersion> + <userRemoteConfigs> + <hudson.plugins.git.UserRemoteConfig> + <url>[GIT_URI]</url> + <credentialsId>[GIT_CREDENTIALS]</credentialsId> + </hudson.plugins.git.UserRemoteConfig> + </userRemoteConfigs> + <branches> + <hudson.plugins.git.BranchSpec> + <name>*/suites/$codename</name> + </hudson.plugins.git.BranchSpec> + </branches> + <doGenerateSubmoduleConfigurations>false</doGenerateSubmoduleConfigurations> + <submoduleCfg class="list"/> + <extensions> + <hudson.plugins.git.extensions.impl.RelativeTargetDirectory> + <relativeTargetDir>source</relativeTargetDir> + </hudson.plugins.git.extensions.impl.RelativeTargetDirectory> + </extensions> + </scm> + <assignedNode>keysign</assignedNode> + <canRoam>false</canRoam> + <disabled>false</disabled> + <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding> + <blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding> + <triggers/> + <concurrentBuild>false</concurrentBuild> + <builders> + <hudson.tasks.Shell> + <command>if [ -n &quot;$gitlabBranch&quot; ] ; then + export codename=$gitlabBranch +fi +# when using git: +export SKIP_DCH=true +export KEEP_SOURCE_CHANGES=true +/usr/bin/generate-git-snapshot + +# when using subversion: +# /usr/bin/generate-svn-snapshot +env</command> + </hudson.tasks.Shell> + <hudson.tasks.Shell> + <command>mkdir -p report +# For the source package: +/usr/bin/lintian-junit-report *.dsc &gt; report/lintian.xml +# or, for the binary package: +/usr/bin/lintian-junit-report *.changes &gt; report/lintian.xml</command> + </hudson.tasks.Shell> + </builders> + <publishers> + <hudson.tasks.ArtifactArchiver> + <artifacts>*.gz,*.bz2,*.xz,*.deb,*.dsc,*.changes,lintian.txt,*udeb,*.git</artifacts> + <allowEmptyArchive>false</allowEmptyArchive> + <onlyIfSuccessful>false</onlyIfSuccessful> + <fingerprint>true</fingerprint> + <defaultExcludes>true</defaultExcludes> + </hudson.tasks.ArtifactArchiver> + <hudson.plugins.ircbot.IrcPublisher plugin="ircbot@2.25"> + <targets class="empty-list"/> + <strategy>ALL</strategy> + <notifyOnBuildStart>false</notifyOnBuildStart> + <notifySuspects>false</notifySuspects> + <notifyCulprits>false</notifyCulprits> + <notifyFixers>false</notifyFixers> + <notifyUpstreamCommitters>false</notifyUpstreamCommitters> + <buildToChatNotifier class="hudson.plugins.im.build_notify.DefaultBuildToChatNotifier" plugin="instant-messaging@1.32"/> + <matrixMultiplier>ONLY_CONFIGURATIONS</matrixMultiplier> + <channels/> + </hudson.plugins.ircbot.IrcPublisher> + <hudson.plugins.parameterizedtrigger.BuildTrigger plugin="parameterized-trigger@2.25"> + <configs> + <hudson.plugins.parameterizedtrigger.BuildTriggerConfig> + <configs> + <hudson.plugins.parameterizedtrigger.CurrentBuildParameters/> + </configs> + <projects>[PKGNAME]-binaries</projects> + <condition>SUCCESS</condition> + <triggerWithNoParameters>false</triggerWithNoParameters> + </hudson.plugins.parameterizedtrigger.BuildTriggerConfig> + </configs> + </hudson.plugins.parameterizedtrigger.BuildTrigger> + </publishers> + <buildWrappers> + <hudson.plugins.ws__cleanup.PreBuildCleanup plugin="ws-cleanup@0.25"> + <deleteDirs>false</deleteDirs> + <cleanupParameter></cleanupParameter> + <externalDelete></externalDelete> + </hudson.plugins.ws__cleanup.PreBuildCleanup> + <hudson.plugins.timestamper.TimestamperBuildWrapper plugin="timestamper@1.5.15"/> + </buildWrappers> +</project>