pipeline { agent { label 'linux' } parameters { string( name: 'BUILD_TYPE', description: 'Specify build type. Values: pr / nightly / release', defaultValue: 'pr', ) } options { timestamps() /* Prevent Jenkins jobs from running forever */ timeout(time: 45, unit: 'MINUTES') /* Limit builds retained */ buildDiscarder(logRotator( numToKeepStr: '10', daysToKeepStr: '20', artifactNumToKeepStr: '10', )) } /** * WARNING: Jenkins ignores PATH changes in Docker * https://issues.jenkins-ci.org/browse/JENKINS-49076 **/ environment { LANG = "en_US.UTF-8" LC_ALL = "en_US.UTF-8" LANGUAGE = "en_US.UTF-8" TARGET_OS = 'windows' NIX_CONF_DIR = "${env.WORKSPACE}/nix" VERBOSE_LEVEL = '3' /* Conan settings */ CONAN_PRINT_RUN_COMMANDS = '1' CONAN_SYSREQUIRES_MODE = 'disabled' CONAN_SYSREQUIRES_SUDO = '0' /* We use EXECUTOR_NUMBER to avoid multiple instances clashing */ LEIN_HOME = "/var/tmp/lein-${EXECUTOR_NUMBER}" YARN_CACHE_FOLDER = "/var/tmp/yarn-${EXECUTOR_NUMBER}" GRADLE_USER_HOME = "/var/tmp/gradle-${EXECUTOR_NUMBER}" } stages { stage('Prep') { steps { script { /* Necessary to load methods */ desktop = load 'ci/desktop.groovy' cmn = load 'ci/common.groovy' btype = cmn.utils.getBuildType() print "Running ${btype} build!" cmn.ci.abortPreviousRunningBuilds() /* Cleanup and Prep */ cmn.prep(btype) } } } stage('Parallel') { parallel { stage('Checks') { stages { stage('Lint') { steps { script { cmn.nix.shell('lein cljfmt check') } } } stage('Tests') { steps { script { cmn.nix.shell('lein test-cljs') } } } } } stage('Build') { stages { stage('Clojure') { steps { script { desktop.buildClojureScript() } } } stage('Compile') { steps { script { desktop.compile() } } } stage('Bundle') { steps { script { app = desktop.bundleWindows(btype) } } } } } } } stage('Archive') { steps { archiveArtifacts app } } stage('Upload') { steps { script { env.PKG_URL = cmn.utils.uploadArtifact(app) } } } stage('Cleanup') { steps { sh 'make clean' } } } post { success { script { load('ci/github.groovy').notifyPR(true) } } failure { script { load('ci/github.groovy').notifyPR(false) } } } }