
Change-Id: Ide31346f35ecef3030f306698cfe4586010df020 Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/30674 Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de> Reviewed-by: Georg Brandl <g.brandl@fz-juelich.de>
226 lines
6.0 KiB
Groovy
226 lines
6.0 KiB
Groovy
properties([
|
|
buildDiscarder(logRotator(artifactDaysToKeepStr: '',
|
|
artifactNumToKeepStr: '',
|
|
daysToKeepStr: '',
|
|
numToKeepStr: '50')),
|
|
parameters([
|
|
string(defaultValue: 'secop/frappy',
|
|
description: '', name: 'GERRIT_PROJECT'),
|
|
string(defaultValue: 'master',
|
|
description: '', name: 'GERRIT_BRANCH'),
|
|
string(defaultValue: 'refs/heads/master',
|
|
description: '', name: 'GERRIT_REFSPEC'),
|
|
choice(choices: '''\
|
|
patchset-created
|
|
ref-updated
|
|
change-merged''',
|
|
description: '', name: 'GERRIT_EVENT_TYPE')])
|
|
])
|
|
|
|
|
|
|
|
this.verifyresult = [:]
|
|
def changedFiles = '';
|
|
|
|
|
|
def run_pylint(pyver) {
|
|
stage ('pylint-' + pyver) {
|
|
def status = 'OK'
|
|
changedFiles = sh returnStdout: true, script: '''\
|
|
#!/bin/bash
|
|
git diff HEAD~1... --name-only --diff-filter=ARCM -- \\*.py
|
|
'''
|
|
changedFiles = changedFiles.replaceAll("[\r\n]", " ").trim()
|
|
|
|
res = sh returnStatus: true, script: """\
|
|
#!/bin/bash -x
|
|
. /home/jenkins/secopvenv/bin/activate
|
|
pip install -r requirements-dev.txt
|
|
pip install -r requirements.txt
|
|
pip install isort pylint
|
|
pip install -e .
|
|
export PYTHONIOENCODING=utf8
|
|
|
|
echo "$changedFiles"
|
|
if [[ -n "$changedFiles" ]]; then
|
|
set -o pipefail
|
|
pylint $changedFiles | tee pylint_results.txt
|
|
isort --df $changedFiles || true | tee isort_results.txt
|
|
fi
|
|
"""
|
|
withCredentials([string(credentialsId: 'GERRITHTTP',
|
|
variable: 'GERRITHTTP')]) {
|
|
sh """\
|
|
#!/bin/bash
|
|
if [ -f pylint_results.txt ] ; then
|
|
/home/jenkins/tools2/bin/pylint2gerrit
|
|
mv pylint_results.txt pylint-${pyver}.txt
|
|
else
|
|
touch pylint-${pyver}.txt
|
|
fi
|
|
"""
|
|
} // credentials
|
|
|
|
echo "pylint result: $res"
|
|
if ( res != 0 ) {
|
|
currentBuild.result='FAILURE'
|
|
status = 'FAILURE'
|
|
}
|
|
|
|
archiveArtifacts([allowEmptyArchive: true,
|
|
artifacts: 'pylint-*.txt'])
|
|
recordIssues([enabledForFailure: true,
|
|
ignoreQualityGate: true,
|
|
tools: [pyLint(id: 'pylint'+pyver, name: "Pylint $pyver", pattern: "pylint-${pyver}.txt")],
|
|
unhealthy: 2,
|
|
healthy: 1,
|
|
failedTotalAll: 1])
|
|
|
|
|
|
}
|
|
} // run_pylint
|
|
|
|
|
|
def run_tests(pyver) {
|
|
stage('Test:' + pyver) {
|
|
writeFile file: 'setup.cfg', text: '''
|
|
[tool:pytest]
|
|
addopts = --junit-xml=pytest.xml --junit-prefix=''' + pyver
|
|
|
|
def status = "OK"
|
|
try {
|
|
timeout(5) {
|
|
sh '''\
|
|
#!/bin/bash
|
|
. /home/jenkins/secopvenv/bin/activate
|
|
pip install -r requirements-dev.txt
|
|
pip install -r requirements.txt
|
|
pip install -e .
|
|
make test
|
|
'''
|
|
}
|
|
} catch (all) {
|
|
currentBuild.result = 'FAILURE'
|
|
status = 'FAILURE'
|
|
}
|
|
|
|
step([$class: 'JUnitResultArchiver', allowEmptyResults: true,
|
|
keepLongStdio: true, testResults: 'pytest.xml'])
|
|
}
|
|
}
|
|
|
|
def run_docs() {
|
|
stage('prepare') {
|
|
sh '''
|
|
. /home/jenkins/secopvenv/bin/activate
|
|
pip install -r requirements-dev.txt
|
|
pip install -r requirements.txt
|
|
pip install -e .
|
|
'''
|
|
}
|
|
|
|
stage('check links') {
|
|
sh '''
|
|
. /home/jenkins/secopvenv/bin/activate
|
|
|
|
make -C doc linkcheck
|
|
'''
|
|
}
|
|
|
|
stage('build html') {
|
|
sh '''
|
|
. /home/jenkins/secopvenv/bin/activate
|
|
make -C doc html
|
|
'''
|
|
}
|
|
|
|
stage('build singlehtml') {
|
|
sh '''
|
|
. /home/jenkins/secopvenv/bin/activate
|
|
make -C doc singlehtml
|
|
'''
|
|
}
|
|
|
|
stage('build latexpdf') {
|
|
sh '''
|
|
. /home/jenkins/secopvenv/bin/activate
|
|
make -C doc latexpdf
|
|
'''
|
|
}
|
|
|
|
stage('build man') {
|
|
sh '''
|
|
. /home/jenkins/secopvenv/bin/activate
|
|
make -C doc man
|
|
'''
|
|
}
|
|
|
|
stage('store html doc for build') {
|
|
publishHTML([allowMissing: false, alwaysLinkToLastBuild: false, keepAll: true, reportDir: 'doc/_build/html', reportFiles: 'index.html', reportName: 'Built documentation', reportTitles: ''])
|
|
}
|
|
}
|
|
|
|
|
|
|
|
node("dockerhost") {
|
|
stage('clean workspace')
|
|
{
|
|
cleanWs()
|
|
}
|
|
stage('checkout') {
|
|
checkout poll: false,
|
|
scm: [$class: 'GitSCM',
|
|
branches: [[name: '${GERRIT_BRANCH}']],
|
|
doGenerateSubmoduleConfigurations: false,
|
|
extensions: [
|
|
[$class: 'CleanCheckout'],
|
|
[$class: 'hudson.plugins.git.extensions.impl.BuildChooserSetting',
|
|
buildChooser: [$class: "com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.GerritTriggerBuildChooser"]],
|
|
],
|
|
submoduleCfg: [],
|
|
userRemoteConfigs:
|
|
[[
|
|
refspec: GERRIT_REFSPEC,
|
|
credentialsId: 'jenkins_ecdsa_x',
|
|
url: 'ssh://jenkins@forge.frm2.tum.de:29418/${GERRIT_PROJECT}']]]
|
|
sh 'git show'
|
|
}
|
|
stage('(re-)generate image') {
|
|
sh '''#!/bin/bash
|
|
git worktree add tmpmaster origin/master
|
|
cd tmpmaster
|
|
docker build --target base --tag frappy_base:latest ci
|
|
docker build --target docs --tag frappy_docs:latest ci
|
|
cd ..
|
|
rm -rf tmpmaster
|
|
'''
|
|
}
|
|
|
|
stage('execute tests') {
|
|
def img = docker.image('frappy_base:latest')
|
|
def docimg = docker.image('frappy_docs:latest')
|
|
|
|
parallel 'Test': {
|
|
img.inside {
|
|
run_tests('python3')
|
|
}},
|
|
'Pylint': {
|
|
img.inside {
|
|
run_pylint('python3')
|
|
}},
|
|
'Docs': {
|
|
docimg.inside {
|
|
run_docs()
|
|
}
|
|
stage('publish') {
|
|
if (GERRIT_EVENT_TYPE == 'change-merged')
|
|
{
|
|
sh '''
|
|
rsync -rlv doc/_build/* /ictrlsrv/share/public/doc/frappy
|
|
'''
|
|
}
|
|
}}, failFast: false
|
|
}
|
|
setGerritReview()
|
|
}
|