library 'status-react-jenkins@v1.1.5' pipeline { agent { label 'macos-xcode-11.4.1' } 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: 30, unit: 'MINUTES') /* Limit builds retained */ buildDiscarder(logRotator( numToKeepStr: '10', daysToKeepStr: '20', artifactNumToKeepStr: '10', )) /* Allows combined build to copy */ copyArtifactPermission('/status-react/*') } environment { LANG = "en_US.UTF-8" LC_ALL = "en_US.UTF-8" LANGUAGE = "en_US.UTF-8" TARGET = 'macos' NIX_CONF_DIR = "${env.WORKSPACE}/nix" /* See nix/README.md */ NIX_IGNORE_SYMLINK_STORE = 1 VERBOSE_LEVEL = '3' /* We use EXECUTOR_NUMBER to avoid multiple instances clashing */ YARN_CACHE_FOLDER = "/var/tmp/yarn-${EXECUTOR_NUMBER}" GRADLE_USER_HOME = "/var/tmp/gradle-${EXECUTOR_NUMBER}" } stages { stage('Prep') { steps { script { btype = utils.getBuildType() print "Running ${btype} build!" jenkins.abortPreviousRunningBuilds() /* Cleanup and Prep */ commonPrep(btype) } } } stage('Parallel Assemble') { parallel { stage('Checks') { stages { stage('Lint') { steps { script { /* We want the build result to be uploaded */ catchError( message: 'Linting check failed!', buildResult: 'FAILURE', stageResult: 'FAILURE' ) { sh 'make lint' } } } } stage('Tests') { steps { script { sh 'make test' } } } } } stage('Build') { stages { stage('JSBundle') { steps { script { desktop.buildJSBundle() } } } stage('Compile') { steps { script { desktop.compile() } } } stage('Bundle') { steps { script { dmg = desktop.bundleMacOS(btype) } } } } } } } stage('Parallel Upload') { parallel { stage('Archive') { steps { archiveArtifacts dmg } } stage('Upload') { steps { script { env.PKG_URL = s3.uploadArtifact(dmg) } } } } } stage('Cleanup') { steps { sh 'make watchman-clean' sh 'make clean' } } } post { success { script { github.notifyPR(true) } } failure { script { github.notifyPR(false) } } } }