From f140a71d6d5e93e73a737a756d2682ee70011cd9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Soko=C5=82owski?= Date: Thu, 24 Jun 2021 10:20:50 +0200 Subject: [PATCH] ci: add Jenkinsfile for Linux MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adding a single Jenkinsfile for PR builds that can run on all three platforms supported by our Jenkins CI setup. Signed-off-by: Jakub SokoĊ‚owski --- ci/Jenkinsfile.prs | 99 +++++++++++++++++++++++++++ Jenkinsfile => ci/Jenkinsfile.release | 0 2 files changed, 99 insertions(+) create mode 100644 ci/Jenkinsfile.prs rename Jenkinsfile => ci/Jenkinsfile.release (100%) diff --git a/ci/Jenkinsfile.prs b/ci/Jenkinsfile.prs new file mode 100644 index 000000000..59b92e679 --- /dev/null +++ b/ci/Jenkinsfile.prs @@ -0,0 +1,99 @@ +library 'status-jenkins-lib@v1.2.18' + +pipeline { + agent { label getAgentLabel() } + + parameters { + string( + name: 'NIM_PARAMS', + description: 'Flags for Nim compilation.', + defaultValue: params.NIM_PARAMS ?: '-d:disableMarchNative -d:insecure --parallelBuild:6' + ) + string( + name: 'LOG_LEVEL', + description: 'Build logging level. (DEBUG, TRACE)', + defaultValue: params.LOG_LEVEL ?: 'DEBUG' + ) + string( + name: 'VERBOSITY', + description: 'Makefile verbosity level.(0-2)', + defaultValue: params.VERBOSITY ?: '0' + ) + string( + name: 'MAKEFLAGS', + description: 'Makefile flags.', + defaultValue: params.MAKEFLAGS ?: '-j6' + ) + } + + options { + timestamps() + /* manage how many builds we keep */ + buildDiscarder(logRotator( + numToKeepStr: '3', + daysToKeepStr: '30', + artifactNumToKeepStr: '1', + )) + } + + environment { + TARGET = getAgentLabel() + } + + stages { + stage('Deps') { steps { + cache(maxCacheSize: 250, caches: [[ + $class: 'ArbitraryFileCache', excludes: '', includes: '**/*', + path: 'vendor/nimbus-build-system/vendor/Nim/bin', + ]]) { + sh "make V=${params.VERBOSITY} update" + } + sh "make V=${params.VERBOSITY} deps" + } } + + stage('Binaries') { + parallel { + stage('V1') { steps { sh "make V=${params.VERBOSITY} v1" } } + stage('V2') { steps { sh "make V=${params.VERBOSITY} v2" } } + } + } + + stage('Run Tests') { + parallel { + stage('V1') { steps { sh "make V=${params.VERBOSITY} test1" } } + stage('V2') { steps { sh "make V=${params.VERBOSITY} test2" } } + } + } + + stage('Upload') { steps { script { + def out = genOutputFilename() + sh "mv build/wakunode2 ${out}" + env.PKG_URL = s3.uploadArtifact(out) + jenkins.setBuildDesc(Waku: env.PKG_URL) + } } } + } // stages + post { + success { script { github.notifyPR(true) } } + failure { script { github.notifyPR(false) } } + } // post +} // pipeline + + +/* This allows us to use one Jenkinsfile and run + * jobs on different platforms based on job name. */ +def getAgentLabel() { + if (params.AGENT_LABEL) { + return params.AGENT_LABEL + } + def tokens = env.JOB_NAME.split('/') + for (platform in ['linux', 'macos', 'windows']) { + if (tokens.contains(platform)) { return platform } + } + throw new Exception('No agent provided or found in job path!') +} + +def genOutputFilename() { + return [ + "wakunode2", utils.timestamp(), utils.gitCommit(), getAgentLabel() + ].join('-') + (env.NODE_NAME.startsWith('windows') ? '.exe' : '.bin') +} diff --git a/Jenkinsfile b/ci/Jenkinsfile.release similarity index 100% rename from Jenkinsfile rename to ci/Jenkinsfile.release