pipeline { agent any options { timestamps() disableConcurrentBuilds() } stages { stage('Checkout') { steps { checkout scm } } stage('Production readiness') { steps { sh 'chmod +x scripts/ci/*.sh' sh 'bash scripts/ci/ci-readiness.sh .' sh 'bash scripts/ci/validate-docker-compose.sh .' } } stage('Compose smoke') { steps { sh ''' set -euo pipefail mkdir -p .ci-bin if ! command -v docker >/dev/null 2>&1; then echo "Installing static docker CLI..." curl -fsSL "https://download.docker.com/linux/static/stable/x86_64/docker-27.4.1.tgz" \ | tar xz --strip-components=1 -C .ci-bin docker/docker chmod +x .ci-bin/docker fi if ! command -v docker-compose >/dev/null 2>&1 && ! docker compose version >/dev/null 2>&1; then echo "Installing docker-compose plugin binary..." curl -fsSL "https://github.com/docker/compose/releases/download/v2.32.4/docker-compose-linux-x86_64" \ -o .ci-bin/docker-compose chmod +x .ci-bin/docker-compose fi export PATH="$PWD/.ci-bin:$PATH" COMPOSE="docker compose" if ! docker compose version >/dev/null 2>&1; then COMPOSE="docker-compose" fi mkdir -p dist sed '/exclude_from_hc:/d' docker-compose.yml > dist/docker-compose.coolify.yml $COMPOSE -f dist/docker-compose.coolify.yml config -q VERSION="$(grep -E '^ERPNEXT_VERSION=' example.env | cut -d= -f2)" docker pull "frappe/erpnext:${VERSION}" echo "frappe/erpnext:${VERSION} OK" ''' } } } post { success { archiveArtifacts artifacts: 'dist/docker-compose.coolify.yml', fingerprint: true, onlyIfSuccessful: true } } }