pipeline { agent any stages { stage('Checkout') { steps { checkout scm } } stage('Build CI Image') { steps { sh 'docker compose -f docker-compose.ci.yml build --pull' } } stage('Install Dependencies') { steps { sh 'docker compose -f docker-compose.ci.yml run --rm app composer install --no-interaction --prefer-dist --no-progress' } } stage('Prepare Test DB') { steps { sh 'docker compose -f docker-compose.ci.yml run --rm app sh -lc "echo using mysql: $DB_HOST:$DB_PORT/$DB_DATABASE"' } } stage('Run Tests') { steps { script { env.APP_KEY = sh( returnStdout: true, script: "docker compose -f docker-compose.ci.yml run --rm keygen" ).trim() } sh 'APP_KEY=$APP_KEY docker compose -f docker-compose.ci.yml run --rm app sh -lc "for i in \\$(seq 1 60); do mysqladmin ping -h \\${DB_HOST:-db} -u\\${DB_USERNAME:-school} -p\\${DB_PASSWORD:-school} >/dev/null 2>&1 && break; sleep 2; done; php artisan migrate --force && php artisan test"' } } } post { always { sh 'docker compose -f docker-compose.ci.yml rm -f -s -v || true' sh 'docker compose -f docker-compose.ci.yml down -v --remove-orphans' } } }