drawio-export/build/ci/Jenkinsfile
Алексей Бадяев e69cd32dfd
All checks were successful
drawio-exporter/pipeline/head This commit looks good
Отключил проверку тестов в Jenkins pipeline
2023-04-04 20:15:56 +07:00

215 lines
7.9 KiB
Groovy

// MouseSoft Ships Jenkins declarative pipeline
pipeline {
agent { label 'go' }
options {
ansiColor('css')
timestamps()
buildDiscarder(logRotator(numToKeepStr: '10'))
skipDefaultCheckout()
timeout(time: 8, unit: 'MINUTES', activity: true)
}
environment {
PROJECT_OWNER = 'ms'
PROJECT_ID = 'drawio-exporter'
PROJECT_NAME = 'MouseSoft Draw.io Exporter'
ROCKET_TITLE = "${currentBuild.fullDisplayName} (<${env.BUILD_URL}|Open>)"
RELEASE_ID = 0
}
stages {
stage('Build') {
parallel {
stage('Build Linux') {
steps {
echo "***** BUILD ${PROJECT_NAME} on Linux *****"
msSendRocketChat("${ROCKET_TITLE}", msBuildInfo(currentBuild), 'black')
cleanWs(disableDeferredWipeout: true, deleteDirs: true)
checkout scm
sh '''#!/bin/bash
make clean vendor lint build dist doc
'''
}
}
// stage('Build Windows') {
// agent{ label 'windows' }
// environment {
// GO_OPT = ' '
// CGO_ENABLED = 0
// }
// steps {
// echo "***** BUILD ${PROJECT_NAME} on Windows *****"
// cleanWs(disableDeferredWipeout: true, deleteDirs: true)
// catchError(buildResult: 'UNSTABLE', stageResult: 'FAILURE') {
// checkout scm
// bat 'make clean vendor build dist pkg-msi'
// }
// }
// post {
// always {
// script {
// if (getContext(hudson.FilePath)) {
// archiveArtifacts (
// artifacts: 'out/*.zip,out/*.msi',
// allowEmptyArchive: true,
// fingerprint: true,
// onlyIfSuccessful: true,
// )
// }
// }
// }
// }
// }
}
}
stage('Test') {
environment {
EXPORT_RESULT = true
COVERAGE_FORMAT = 'xml'
}
steps {
echo "===== TEST ${PROJECT_NAME} ====="
sh '''#!/bin/bash
make test coverage
'''
}
}
stage('Doc') {
when { anyOf {
branch 'main'
branch 'develop'
branch 'release/*'
branch 'support/*'
tag 'v*'
} }
environment {
DOC_FORMAT = 'pdf'
}
steps {
echo "===== MAKE ${PROJECT_NAME} Documentation ====="
sh '''#!/bin/bash
make doc
'''
}
}
stage('Draft Release') {
when { tag 'v*' }
steps {
script {
def version = "${TAG_NAME}".substring(1)
RELEASE_ID = msCreateRelease(
"${PROJECT_OWNER}",
"${PROJECT_ID}",
"${TAG_NAME}",
"${PROJECT_NAME}",
)
}
}
}
stage('Release') {
parallel {
stage('Release Linux') {
when { tag 'v*' }
environment {
OUTDIR = 'dist'
DIST_TAG = 'empty'
GO_OPT = ' '
}
steps {
echo "***** RELEASE ${PROJECT_NAME} for Linux *****"
sh '''#!/bin/bash
make build dist
'''
script {
msUploadFilesToRelease(
"${PROJECT_OWNER}",
"${PROJECT_ID}",
RELEASE_ID,
['dist/*.tar.gz', 'out/doc/*.pdf'],
)
if( currentBuild.currentResult == 'SUCCESS' ) {
currentBuild.keepLog = true
}
}
msSendRocketChat("${ROCKET_TITLE}", "Released assets for Linux", 'blue')
}
}
stage('Release Windows') {
agent{ label 'windows' }
when { tag 'v*' }
environment {
OUTDIR = 'dist'
DIST_TAG = 'empty'
GO_OPT = ' '
}
steps {
echo "***** RELEASE ${PROJECT_NAME} for Windows *****"
bat 'make build dist pkg-msi'
script {
msUploadFilesToRelease(
"${PROJECT_OWNER}",
"${PROJECT_ID}",
RELEASE_ID,
['dist/*.msi'],
)
if( currentBuild.currentResult == 'SUCCESS' ) {
currentBuild.keepLog = true
}
}
msSendRocketChat("${ROCKET_TITLE}", "Released assets for Windows", 'blue')
}
}
}
}
}
post {
always {
script {
if (getContext(hudson.FilePath)) {
junit (
testResults: 'out/junit-report.xml',
allowEmptyResults: true,
skipPublishingChecks: true,
)
cobertura (
coberturaReportFile: 'out/coverage.xml',
failNoReports: false,
)
archiveArtifacts (
artifacts: 'out/*.tar.*,out/*.zip,out/*.msi',
allowEmptyArchive: false,
fingerprint: true,
onlyIfSuccessful: true,
)
archiveArtifacts (
artifacts: 'out/doc/*.pdf',
allowEmptyArchive: true,
fingerprint: true,
onlyIfSuccessful: true,
)
if (currentBuild.result == 'SUCCESS') {
publishHTML(target: [
allowMissing: true,
alwaysLinkToLastBuild: true,
keepAll: false,
reportDir: 'out/doc/html',
reportFiles: 'godoc/index.html',
reportTitles: 'Техническая документация',
reportName: 'Documentation',
])
}
}
if( currentBuild.result != 'SUCCESS' ) {
currentBuild.keepLog = false
}
def timeSec = currentBuild.duration / 1000
msSendRocketChat(
"${ROCKET_TITLE}",
"Build ${currentBuild.result} after ${timeSec} sec",
msBuildResultColor(),
)
}
}
}
}