# Единый merge gate: тесты, ktlint и detekt. # Testcontainers поднимает PostgreSQL 18 через Docker-in-Docker, поэтому runner # должен разрешать privileged-сервисы (docker:dind) и сеть до docker:2375. stages: - check - smoke - release-evidence variables: GRADLE_OPTS: "-Dorg.gradle.daemon=false" GRADLE_USER_HOME: "$CI_PROJECT_DIR/.gradle" DOCKER_HOST: "tcp://docker:2375" DOCKER_TLS_CERTDIR: "" TESTCONTAINERS_HOST_OVERRIDE: "docker" check: stage: check image: eclipse-temurin:21-jdk services: - name: docker:27-dind alias: docker cache: key: "gradle-$CI_COMMIT_REF_SLUG" paths: - .gradle/caches - .gradle/wrapper script: - ./gradlew --no-daemon test ktlintCheck detekt evidenceCheck artifacts: when: always paths: - build/reports/evidence/index.md rules: - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' - if: '$CI_COMMIT_BRANCH' # Дымовой тест на каждый push/MR: полный стек на одноразовой БД, health, # вход и один доменный сценарий. Полный release gate — ниже. smoke: stage: smoke # Shell-runner: скрипт поднимает реальный стек на localhost и проверяет его. # На runner нужны Java 21, Docker Compose v2, Python 3 и bash. tags: [lms-shell] cache: key: "gradle-$CI_COMMIT_REF_SLUG" paths: - .gradle/caches - .gradle/wrapper script: - ./scripts/ldd-smoke.sh artifacts: when: always paths: - build/evidence/smoke.json rules: - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' - if: '$CI_COMMIT_BRANCH' # Ручной release gate: runtime, mutation и browser evidence. # Нужен privileged docker:dind; Chromium и Node ставятся в before_script. release-evidence: stage: release-evidence # Shell-runner с Java 21, Docker Compose v2, Node 22, Chromium Playwright. tags: [lms-release] before_script: - cd e2e && npm ci && npx playwright install chromium && cd .. cache: key: "gradle-$CI_COMMIT_REF_SLUG" paths: - .gradle/caches - .gradle/wrapper script: - ./scripts/ldd-release.sh artifacts: when: always paths: - build/evidence/ - build/reports/evidence/ rules: - if: '$CI_COMMIT_TAG' when: on_success - if: '$CI_COMMIT_BRANCH' when: manual