status-desktop/ci/Jenkinsfile.combined
Jakub Sokołowski 349c83347d
ci: allow running MacOS builds on M1 Macs
This depends on installing Qt via Brew, but that creates a version mismatch,
since it's 5.15.8 and not 5.15.2, which is not optimal but works for now.

In the long term we should probably look into using Nix, or maybe aqt
will support M1 Macs, but this is not great.

Depends on:
- https://github.com/status-im/infra-ci/commit/54408b41
- https://github.com/status-im/infra-ci/commit/39d4fdef

Resolves: https://github.com/status-im/status-desktop/issues/9984

Signed-off-by: Jakub Sokołowski <jakub@status.im>
2023-04-07 14:25:34 +02:00

115 lines
3.3 KiB
Plaintext

library 'status-jenkins-lib@v1.6.8'
pipeline {
agent { label 'linux' }
options {
timestamps()
disableConcurrentBuilds()
/* Prevent Jenkins jobs from running forever */
timeout(time: 60, unit: 'MINUTES')
/* Limit builds retained */
buildDiscarder(logRotator(
numToKeepStr: '10',
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/x86_64') { steps { script {
linux_x86_64 = jenkins.Build('status-desktop/platforms/linux/x86_64')
} } }
stage('Windows/x86_64') { steps { script {
windows_x86_64 = jenkins.Build('status-desktop/platforms/windows/x86_64')
} } }
stage('MacOS/x86_64') { steps { script {
macos_x86_64 = jenkins.Build('status-desktop/platforms/macos/x86_64')
} } }
stage('MacOS/arch64') { steps { script {
macos_aarch64 = jenkins.Build('status-desktop/platforms/macos/aarch64')
} } }
}
}
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
}