pipeline { agent { label params.AGENT_LABEL } environment { /* we source .bash_profile to be able to use nix-store */ NIX_SSHOPTS = "-o StrictHostKeyChecking=no source .bash_profile;" /* where our /nix/store is hosted */ NIX_CACHE_USER = 'nix-cache' NIX_CACHE_HOST = 'master-01.do-ams3.ci.misc.statusim.net' NIX_CONF_DIR = "${env.WORKSPACE}/nix" } options { timestamps() disableConcurrentBuilds() /* Prevent Jenkins jobs from running forever */ timeout(time: 300, unit: 'MINUTES') /* Limit builds retained */ buildDiscarder(logRotator( numToKeepStr: '20', daysToKeepStr: '30', )) } stages { stage('Setup') { steps { sh 'scripts/setup' sh ''' . ~/.nix-profile/etc/profile.d/nix.sh && \ nix-env -i openssh ''' } } stage('Build status-go') { steps { script { ['android', 'desktop', 'ios'].each { os -> sh """ . ~/.nix-profile/etc/profile.d/nix.sh && \ nix-build --argstr target-os all -A targets.status-go.${os}.buildInputs """ } } } } stage('Build jsbundle-android') { steps { // Run a Nix build to build/fetch everything that is necessary to produce a jsbundle for TARGET_OS=android (e.g. maven and node repos) sh ''' args="--argstr target-os android --show-trace -A targets.mobile.jsbundle" . ~/.nix-profile/etc/profile.d/nix.sh && \ nix-build --pure --no-out-link $args prodBuildDrv=$(nix-instantiate --quiet $args) && \ prodBuildSrcPath=$(nix-store -q --binding src $prodBuildDrv) && \ prodBuildOutPath=$(nix-store -q --outputs $prodBuildDrv) && \ nix-store --delete $prodBuildDrv $prodBuildSrcPath $prodBuildOutPath ''' } } stage('Build nix shell deps') { steps { // Run a Nix build to build/fetch everything that is necessary to instantiate shell.nix for TARGET_OS=all sh ''' . ~/.nix-profile/etc/profile.d/nix.sh && \ nix-shell --argstr target-os all --pure --show-trace shell.nix ''' } } stage('Upload') { steps { sshagent(credentials: ['nix-cache-ssh']) { sh """ . ~/.nix-profile/etc/profile.d/nix.sh && \ find /nix/store/ -mindepth 1 -maxdepth 1 \ -not -name '.links' -and -not -name '*.lock' \ -and -not -name '*-status-react-jsbundle-source' \ -and -not -name '*-status-react-release-android-source' \ -and -not -name '*-jsbundle-*' \ -and -not -name '*-release-android' | \ xargs nix-copy-closure -v --to ${NIX_CACHE_USER}@${NIX_CACHE_HOST} """ } } } } post { always { sh ''' . ~/.nix-profile/etc/profile.d/nix.sh && \ nix-store --optimize ''' } } }