From 0d136d8879044bc0040ff3df0d8f0f049c13b69a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Soko=C5=82owski?= Date: Wed, 14 Apr 2021 14:44:13 +0200 Subject: [PATCH] ci: add a combined Jenkinsfile for releases MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is part of a general restructuring in layout of Jenkins job folders before we can properly introduce Release signing and notarization. We need this to distinguish between pr/dev builds and release ones to avoid signing the dev builds with a release certificate. The meta job managed with `ci/Jenkinsfile.combined` runs a job for all 3 platforms and currently is quite basic, but in the future can be extended to include - like the mobile one - updating the nightlies page, or publishing draft GitHub releases. The addition of `make check-pkg-target-*` steps to other `Jenkinsfile`s is necessary because the sub-jobs under `platforms` have no option for checking out Git submodules at the beginning, so I'm making use of how the `Makefile` works and triggering that with a target that doesn't do much. Example job: https://ci.status.im/job/status-desktop/job/release/job/ci-meta-release-job/ Signed-off-by: Jakub SokoĊ‚owski --- ci/Jenkinsfile | 1 + ci/Jenkinsfile.combined | 63 +++++++++++++++++++++++++++++++++++++++++ ci/Jenkinsfile.linux | 2 ++ ci/Jenkinsfile.macos | 2 ++ ci/Jenkinsfile.windows | 2 ++ 5 files changed, 70 insertions(+) create mode 120000 ci/Jenkinsfile create mode 100644 ci/Jenkinsfile.combined diff --git a/ci/Jenkinsfile b/ci/Jenkinsfile new file mode 120000 index 0000000000..35f8dace38 --- /dev/null +++ b/ci/Jenkinsfile @@ -0,0 +1 @@ +Jenkinsfile.combined \ No newline at end of file diff --git a/ci/Jenkinsfile.combined b/ci/Jenkinsfile.combined new file mode 100644 index 0000000000..51300599da --- /dev/null +++ b/ci/Jenkinsfile.combined @@ -0,0 +1,63 @@ +library 'status-react-jenkins@v1.2.11' + +pipeline { + agent { label 'linux' } + + options { + timestamps() + disableConcurrentBuilds() + /* Prevent Jenkins jobs from running forever */ + timeout(time: 35, unit: 'MINUTES') + /* Limit builds retained */ + buildDiscarder(logRotator( + numToKeepStr: '10', + daysToKeepStr: '30', + artifactNumToKeepStr: '10', + )) + } + + stages { + stage('Build') { + parallel { + stage('Linux') { steps { script { + linux = jenkins.Build('status-desktop/platforms/linux') + } } } + stage('Windows') { steps { script { + windows = jenkins.Build('status-desktop/platforms/windows') + } } } + stage('MacOS') { steps { script { + macos = jenkins.Build('status-desktop/platforms/macos') + } } } + } + } + stage('Archive') { + steps { script { + sh('rm -f pkg/*') + jenkins.copyArts(linux) + jenkins.copyArts(windows) + jenkins.copyArts(macos) + sha = "pkg/${utils.pkgFilename('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), + Windows: utils.pkgUrl(windows), + MacOS: utils.pkgUrl(macos), + /* upload the sha256 checksums file too */ + SHA: s3.uploadArtifact(sha), + ] + /* add URLs to the build description */ + jenkins.setBuildDesc(urls) + } } + } + } +} diff --git a/ci/Jenkinsfile.linux b/ci/Jenkinsfile.linux index 870d3a0b60..bc2f4c9f35 100644 --- a/ci/Jenkinsfile.linux +++ b/ci/Jenkinsfile.linux @@ -37,6 +37,8 @@ pipeline { stages { stage('Deps') { steps { + /* trigger fetching of git submodules */ + sh 'make check-pkg-target-linux' /* avoid re-compiling Nim by using cache */ cache(maxCacheSize: 250, caches: [[ $class: 'ArbitraryFileCache', diff --git a/ci/Jenkinsfile.macos b/ci/Jenkinsfile.macos index 0c3f647789..bb348fd58e 100644 --- a/ci/Jenkinsfile.macos +++ b/ci/Jenkinsfile.macos @@ -33,6 +33,8 @@ pipeline { stages { stage('Deps') { steps { + /* trigger fetching of git submodules */ + sh 'make check-pkg-target-macos' /* avoid re-compiling Nim by using cache */ cache(maxCacheSize: 250, caches: [[ $class: 'ArbitraryFileCache', diff --git a/ci/Jenkinsfile.windows b/ci/Jenkinsfile.windows index bbc4e31895..c8eda2ba1a 100644 --- a/ci/Jenkinsfile.windows +++ b/ci/Jenkinsfile.windows @@ -43,6 +43,8 @@ pipeline { stages { stage('Deps') { steps { + /* trigger fetching of git submodules */ + sh 'make check-pkg-target-windows' /* avoid re-compiling Nim by using cache */ cache(maxCacheSize: 250, caches: [[ $class: 'ArbitraryFileCache',