#!/usr/bin/env groovy library 'status-jenkins-lib@v1.7.16' pipeline { agent { label 'linux' } options { timestamps() disableConcurrentBuilds() /* Prevent Jenkins jobs from running forever */ timeout(time: 60, unit: 'MINUTES') /* Limit builds retained */ buildDiscarder(logRotator( numToKeepStr: '30', daysToKeepStr: '30', artifactNumToKeepStr: '10', )) } parameters { booleanParam( name: 'PUBLISH', description: 'Trigger publishing of build results to GitHub.', defaultValue: getPublishDefault(params.PUBLISH), ) } stages { stage('Build') { parallel { stage('Linux/E2E') { steps { script { linux_e2e = jenkins.Build('status-desktop/systems/linux/x86_64/tests-e2e') } } } stage('Linux/x86_64') { steps { script { linux_x86_64 = jenkins.Build('status-desktop/systems/linux/x86_64/package') } } } stage('Windows/x86_64') { steps { script { windows_x86_64 = jenkins.Build('status-desktop/systems/windows/x86_64/package') } } } stage('MacOS/x86_64') { steps { script { macos_x86_64 = jenkins.Build('status-desktop/systems/macos/x86_64/package') } } } stage('MacOS/aarch64') { steps { script { macos_aarch64 = jenkins.Build('status-desktop/systems/macos/aarch64/package') } } } } } stage('Archive') { steps { script { sh('rm -f pkg/*') jenkins.copyArts(linux_x86_64) jenkins.copyArts(windows_x86_64) jenkins.copyArts(macos_x86_64) jenkins.copyArts(macos_aarch64) sha = "pkg/${utils.pkgFilename(ext: 'sha256')}" dir('pkg') { /* generate sha256 checksums for upload */ sh "sha256sum * | tee ../${sha}" archiveArtifacts('*') } } } } stage('Upload') { steps { script { /* object for easier URLs handling */ urls = [ /* mobile */ 'Linux': utils.pkgUrl(linux_x86_64), 'Windows': utils.pkgUrl(windows_x86_64), 'MacOS/x86_64': utils.pkgUrl(macos_x86_64), 'MacOS/aarch64': utils.pkgUrl(macos_aarch64), /* upload the sha256 checksums file too */ SHA: s3.uploadArtifact(sha), ] /* add URLs to the build description */ jenkins.setBuildDesc(urls) } } } stage('Publish') { when { expression { params.PUBLISH } } steps { script { github.publishReleaseFiles(repo: 'status-desktop'); } } } } post { failure { script { withCredentials([ string( credentialsId: 'discord-status-desktop-webhook', variable: 'DISCORD_WEBHOOK' ), ]) { discordSend( title: "${env.JOB_NAME}#${env.BUILD_NUMBER}", description: """ CI Desktop build Failure! Branch: `${GIT_BRANCH}` Commit: `${GIT_COMMIT.take(8)}` """, link: env.BUILD_URL, result: currentBuild.currentResult, webhookURL: env.DISCORD_WEBHOOK ) } } } } } /* Helper that makes PUBLISH default to 'false' unless: * - The build is for a release branch * - A user explicitly specified a value * Since release builds create and re-create GitHub drafts every time. */ def Boolean getPublishDefault(Boolean previousValue) { if (env.JOB_NAME.startsWith('status-desktop/release')) { return true } if (previousValue != null) { return previousValue } return false }