status-go/_assets/ci/Jenkinsfile.tests
Jakub Sokołowski 494c6707ba
ci: parametrize DB port for unit tests
Otherwise we can't run tests in parallel on the same host. Also the
container name has to be different depending on executor.

Resolves errors like:
```
docker: Error response from daemon: Conflict.
    The container name "/status-go-test-db" is already in use by container "123...".
    You have to remove (or rename) that container to be able to reuse that name.
```
Resolves: https://github.com/status-im/status-go/issues/4040

Signed-off-by: Jakub Sokołowski <jakub@status.im>
2023-09-18 19:54:21 +02:00

102 lines
2.6 KiB
Plaintext

library 'status-jenkins-lib@v1.7.0'
pipeline {
agent { label 'linux && x86_64 && nix-2.11' }
parameters {
string(
name: 'BRANCH',
defaultValue: 'develop',
description: 'Name of branch to build.'
)
}
options {
timestamps()
/* Prevent Jenkins jobs from running forever */
timeout(time: 40, unit: 'MINUTES')
disableConcurrentBuilds()
/* manage how many builds we keep */
buildDiscarder(logRotator(
numToKeepStr: '5',
daysToKeepStr: '30',
))
}
environment {
TARGET = 'tests'
DB_CONT = "status-go-test-db-${env.EXECUTOR_NUMBER.toInteger() + 1}"
DB_PORT = "${5432 + env.EXECUTOR_NUMBER.toInteger()}"
TMPDIR = "${WORKSPACE_TMP}"
GOPATH = "${WORKSPACE_TMP}/go"
GOCACHE = "${WORKSPACE_TMP}/gocache"
PATH = "${PATH}:${GOPATH}/bin"
REPO_SRC = "${GOPATH}/src/github.com/status-im/status-go"
}
stages {
stage('Prep') {
steps { /* Go needs to find status-go in GOPATH. */
sh "mkdir -p \$(dirname ${REPO_SRC})"
sh "ln -s ${WORKSPACE} ${REPO_SRC}"
}
}
stage('Vendor Check') {
steps { script {
nix.shell('make install-modvendor', pure: false)
nix.shell('make vendor', pure: false)
/* fail build if vendoring hasn't been done */
nix.shell('git diff --exit-code --no-color --stat vendor/')
} }
}
stage('Migration') {
steps { script {
nix.shell('make migration-check', pure: false)
} }
}
stage('Lint') {
steps { script {
nix.shell('make lint', pure: true)
} }
}
stage('Canary') {
steps { script {
nix.shell('make canary-test', pure: true)
} }
}
stage('Unit Tests') {
environment {
TEST_POSTGRES_PORT = "${env.DB_PORT}"
}
steps { script {
db = docker.image('postgres:9.6-alpine').withRun([
"--name=${DB_CONT}",
"--env=POSTGRES_HOST_AUTH_METHOD=trust",
"--publish=${DB_PORT}:${DB_PORT}",
].join(' '), "-p ${DB_PORT}") { c ->
nix.shell('make generate-handlers', pure: true)
nix.shell('make test-unit V=1', pure: false)
}
} }
post { cleanup { /* Leftover DB containers. */
sh "docker rm ${DB_CONT} || true"
} }
}
} // stages
post {
always {
script { env.PKG_URL = "${currentBuild.absoluteUrl}/consoleText" }
junit '**/report.xml'
}
success { script { github.notifyPR(true) } }
failure { script { github.notifyPR(false) } }
cleanup { dir(env.TMPDIR) { deleteDir() } }
} // post
} // pipeline