library 'status-jenkins-lib@v1.7.0' pipeline { agent { label 'linux && nix-2.11 && x86_64' } options { timestamps() disableConcurrentBuilds() /* Prevent Jenkins jobs from running forever */ timeout(time: 30, unit: 'MINUTES') /* Go requires a certain directory structure */ checkoutToSubdirectory('src/github.com/waku-org/go-waku') buildDiscarder(logRotator( numToKeepStr: '10', daysToKeepStr: '30', )) } environment { TARGET = 'tests' REPO = "${env.WORKSPACE}/src/github.com/waku-org/go-waku" GOCACHE = "${env.WORKSPACE_TMP}/go-build" GOPATH = "${env.WORKSPACE}/go" PATH = "${env.PATH}:${env.GOPATH}/bin" /* Necesary to avoid cache poisoning by other builds. */ GOLANGCI_LINT_CACHE = "${env.WORKSPACE_TMP}/golangci-lint" /* Ganache config */ GANACHE_RPC_PORT = "${8989 + env.EXECUTOR_NUMBER.toInteger()}" GANACHE_MNEMONIC = 'swim relax risk shy chimney please usual search industry board music segment' } stages { stage('Lint') { steps { script { dir(env.REPO) { nix.develop('make lint', pure: false) } } } } stage('Test') { steps { script { dir(env.REPO) { nix.develop('make test-ci', pure: false) } } } } stage('Ganache') { steps { script { ganache = docker.image( 'trufflesuite/ganache:v7.4.1' ).run( "-p 127.0.0.1:${env.GANACHE_RPC_PORT}:8545", "-m='${GANACHE_MNEMONIC}'" ) } } } stage('On-chain tests') { environment { GANACHE_NETWORK_RPC_URL = "ws://localhost:${env.GANACHE_RPC_PORT}" } steps { script { dir(env.REPO) { nix.develop('make test-onchain', pure: false) } } } } } post { always { script { /* No artifact but a PKG_URL is necessary. */ env.PKG_URL = "${currentBuild.absoluteUrl}consoleText" } } success { script { github.notifyPR(true) } } failure { script { github.notifyPR(false) } } cleanup { script { cleanWs() catchError { ganache.stop() } } } } }