Files
overleaf-cep/server-ce/test/Jenkinsfile
Jakob Ackermann 836e8b5144 [monorepo] extend cleanup in Jenkins VMs (#27793)
* [monorepo] extend docker compose cleanup

* [web] cleanup docker images

Only retain the branch builds for dependencies.

* [server-ce] jenkins: remove build specific image

Retain the branch image as cache.

* [monorepo] jenkins: prune untagged docker images and docker build cache

* [monorepo] jenkins: remove temporary files from monorepo

* [monorepo] jenkins: remove containers from sandboxed compiles

GitOrigin-RevId: c847015986a060c5c84c39cd06236fd73bbf6f3a
2025-08-12 08:06:27 +00:00

235 lines
7.1 KiB
Groovy

def job_copybara_done = false
def job_npm_install_done = false
def job_prefetch_custom_done = false
def job_prefetch_default_done = false
def job_server_ce_build_done = false
def job_server_pro_build_done = false
pipeline {
agent {
node {
label 'jenkins-agent-web'
customWorkspace '/workspace'
}
}
options {
timestamps()
parallelsAlwaysFailFast()
}
environment {
BRANCH_NAME = "${GIT_BRANCH.replace('origin/', '')}"
COMMIT_SHA = "${GIT_COMMIT}"
SHORT_SHA = "${GIT_COMMIT.take(7)}"
OVERLEAF_BASE_BRANCH = "us-east1-docker.pkg.dev/overleaf-ops/ol-docker/overleaf-base-internal:${BRANCH_NAME}"
OVERLEAF_BASE_LATEST = "us-east1-docker.pkg.dev/overleaf-ops/ol-docker/overleaf-base-internal:main"
OVERLEAF_BASE_TAG = "us-east1-docker.pkg.dev/overleaf-ops/ol-docker/overleaf-base-internal:${BRANCH_NAME}-${SHORT_SHA}_${BUILD_ID}"
OVERLEAF_BRANCH = "us-east1-docker.pkg.dev/overleaf-ops/ol-docker/overleaf-internal:${BRANCH_NAME}"
OVERLEAF_LATEST = "us-east1-docker.pkg.dev/overleaf-ops/ol-docker/overleaf-internal:main"
OVERLEAF_TAG = "us-east1-docker.pkg.dev/overleaf-ops/ol-docker/overleaf-internal:${BRANCH_NAME}-${SHORT_SHA}_${BUILD_ID}"
IMAGE_TAG_CE = "${OVERLEAF_TAG}"
IMAGE_TAG_PRO = "us-east1-docker.pkg.dev/overleaf-ops/ol-docker/pro:main"
}
stages {
stage('Parallel') {
parallel {
stage('Install deps') {
steps {
sh 'make install'
sh 'make -C server-ce/test npm_install_in_docker'
script { job_npm_install_done = true }
}
}
stage('shellcheck') {
steps {
dir('server-ce') {
sh 'make shellcheck'
}
}
}
stage('Format') {
steps {
script { waitUntil { return job_npm_install_done } }
dir('server-ce/test') {
sh 'make format_in_docker'
}
}
}
stage('Copybara') {
steps {
sh 'copybara/bin/sync'
script { job_copybara_done = true }
}
}
stage('Build CE image') {
steps {
script { waitUntil { return job_copybara_done } }
dir('copybara/public/repo/server-ce') {
sh 'make build-base'
sh 'make build-community'
}
script { job_server_ce_build_done = true }
}
}
stage('Push CE to internal') {
steps {
script { waitUntil { return job_server_ce_build_done } }
dir('copybara/public/repo/server-ce') {
sh 'make push'
}
}
}
stage('Build Pro image') {
environment {
OVERLEAF_CE_TAG = "${OVERLEAF_TAG}"
OVERLEAF_PRO_TAG= "${IMAGE_TAG_PRO}"
}
steps {
script { waitUntil { return job_server_ce_build_done } }
dir('server-pro') {
sh 'make build-ci'
}
script { job_server_pro_build_done = true }
}
}
stage('Prefetch default') {
steps {
dir('server-ce/test') {
sh 'make prefetch_default -j4'
}
script { job_prefetch_default_done = true }
}
}
stage('Prefetch custom') {
steps {
dir('server-ce/test') {
sh 'make prefetch_custom -j4'
}
script { job_prefetch_custom_done = true }
}
}
stage('CE default') {
environment {
CYPRESS_SHARD = "CE_DEFAULT"
COMPOSE_PROJECT_NAME = "test-ce-default"
}
steps {
script { waitUntil { return job_npm_install_done && job_server_ce_build_done && job_prefetch_default_done } }
dir('server-ce/test') {
sh 'make test-e2e'
}
}
}
stage('CE custom 1') {
environment {
CYPRESS_SHARD = "CE_CUSTOM_1"
COMPOSE_PROJECT_NAME = "test-ce-custom-1"
}
steps {
script { waitUntil { return job_npm_install_done && job_server_ce_build_done && job_prefetch_default_done && job_prefetch_custom_done } }
dir('server-ce/test') {
sh 'make test-e2e'
}
}
}
stage('PRO default 1') {
environment {
CYPRESS_SHARD = "PRO_DEFAULT_1"
COMPOSE_PROJECT_NAME = "test-pro-default-1"
}
steps {
script { waitUntil { return job_npm_install_done && job_server_pro_build_done && job_prefetch_default_done } }
dir('server-ce/test') {
sh 'make test-e2e'
}
}
}
stage('PRO default 2') {
environment {
CYPRESS_SHARD = "PRO_DEFAULT_2"
COMPOSE_PROJECT_NAME = "test-pro-default-2"
}
steps {
script { waitUntil { return job_npm_install_done && job_server_pro_build_done && job_prefetch_default_done } }
dir('server-ce/test') {
sh 'make test-e2e'
}
}
}
stage('PRO custom 1') {
environment {
CYPRESS_SHARD = "PRO_CUSTOM_1"
COMPOSE_PROJECT_NAME = "test-pro-custom-1"
}
steps {
script { waitUntil { return job_npm_install_done && job_server_pro_build_done && job_prefetch_default_done && job_prefetch_custom_done } }
dir('server-ce/test') {
sh 'make test-e2e'
}
}
}
stage('PRO custom 2') {
environment {
CYPRESS_SHARD = "PRO_CUSTOM_2"
COMPOSE_PROJECT_NAME = "test-pro-custom-2"
}
steps {
script { waitUntil { return job_npm_install_done && job_server_pro_build_done && job_prefetch_default_done && job_prefetch_custom_done } }
dir('server-ce/test') {
sh 'make test-e2e'
}
}
}
stage('PRO custom 3') {
environment {
CYPRESS_SHARD = "PRO_CUSTOM_3"
COMPOSE_PROJECT_NAME = "test-pro-custom-3"
}
steps {
script { waitUntil { return job_npm_install_done && job_server_pro_build_done && job_prefetch_default_done && job_prefetch_custom_done } }
dir('server-ce/test') {
sh 'make test-e2e'
}
}
}
stage('PRO custom 4') {
environment {
CYPRESS_SHARD = "PRO_CUSTOM_4"
COMPOSE_PROJECT_NAME = "test-pro-custom-4"
}
steps {
script { waitUntil { return job_npm_install_done && job_server_pro_build_done && job_prefetch_default_done && job_prefetch_custom_done } }
dir('server-ce/test') {
sh 'make test-e2e'
}
}
}
}
}
}
post {
cleanup {
dir('server-ce/test') {
sh 'make clean'
}
dir('server-ce') {
sh 'make clean'
}
sh 'make clean_jenkins'
}
}
}
// vim: set ft=groovy :