// 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: '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(), ) } } } }