status-go/_assets/ci/Jenkinsfile
Jakub Sokołowski 9dd80e7f1e
ci: use Nix shell to provide Android SDK for builds
Installing the SDK via Ansible is prone to error and not exactly
reproduceable. This way we can also track the exact tooling version as
used in Status Mobile app:
https://github.com/status-im/status-mobile/blob/develop/nix/pkgs.nix

Signed-off-by: Jakub Sokołowski <jakub@status.im>
2022-12-05 15:48:27 +01:00

90 lines
2.3 KiB
Groovy

library 'status-jenkins-lib@v1.6.4'
pipeline {
agent { label 'linux' }
parameters {
string(
name: 'BRANCH',
defaultValue: 'develop',
description: 'Name of branch to build.'
)
booleanParam(
name: 'RELEASE',
defaultValue: false,
description: 'Enable to create a new release on GitHub and DigitalOcean Space.',
)
}
options {
disableConcurrentBuilds()
/* Go requires a certain directory structure */
checkoutToSubdirectory('src/github.com/status-im/status-go')
/* manage how many builds we keep */
buildDiscarder(logRotator(
numToKeepStr: '5',
daysToKeepStr: '30',
))
}
environment {
REPO = "${env.WORKSPACE}/src/github.com/status-im/status-go"
GOPATH = "${env.WORKSPACE}"
PATH = "/usr/local/go/bin:${env.PATH}:${env.GOPATH}/bin"
/* This will override the var in Makefile */
RELEASE_DIR = "${env.WORKSPACE}/pkg"
}
stages {
stage('Build') {
parallel {
stage('iOS') { steps { script {
ios = jenkins.Build('status-go/platforms/ios')
} } }
stage('Android') { steps { script {
android = jenkins.Build('status-go/platforms/android')
} } }
stage('Linux') { steps { script {
linux = jenkins.Build('status-go/platforms/linux')
} } }
stage('Docker') { steps { script {
dock = jenkins.Build('status-go/platforms/docker')
} } }
} // parallel
} // stage(Build)
stage('Archive') {
steps { script {
sh "rm -fr ${env.RELEASE_DIR}"
sh "mkdir ${env.RELEASE_DIR}"
[ios, android, linux].each { platformBuild ->
jenkins.copyArts(platformBuild)
}
dir(env.RELEASE_DIR) {
/* generate sha256 checksums for upload */
sh 'sha256sum * | tee checksum.sha256'
archiveArtifacts('*')
}
} }
} // stage(Archive)
stage('Release') {
when { expression { params.RELEASE == true } }
steps { script {
dir (env.REPO) { version = utils.getVersion() }
github.publishReleaseFiles(
repo: 'status-go',
version: version,
desc: ':warning: Fill me in!',
)
} }
} // stage(Release)
} // stages
post {
always { dir(env.REPO) {
sh 'make clean-release'
} }
}
}