Loading .gitlab-ci.yml +80 −38 Changes for .gitlab-ci.yml: 80 added lines, 38 removed lines. Original line number Diff line number Diff line Loading @@ -2,13 +2,13 @@ default: image: python:3.12-slim cache: paths: - .cache/uv - .cache/pip before_script: - cd "$CI_PROJECT_DIR/${BACKEND_DIR:-.}" - pip install uv - export UV_SYSTEM_CERTS=1 - uv sync --locked --extra dev - . .venv/bin/activate - cd "$CI_PROJECT_DIR" - python -m pip install -r mcp_module/requirements.txt -r ai_agent/requirements.txt - python -m pip install mypy pytest ruff import-linter - python -m pip check - export PYTHONPATH="$CI_PROJECT_DIR:$PYTHONPATH" stages: - type Loading @@ -16,63 +16,105 @@ stages: - lint - format - test - build-and-push - build variables: UV_CACHE_DIR: "$CI_PROJECT_DIR/.cache/uv" PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip" SOURCE_DIRS: "mcp_module/ ai_agent/" TEST_DIRS: "tests/" include: - template: Security/SAST.gitlab-ci.yml sast: stage: test before_script: [] type: stage: type tags: - docker script: - mypy src/ tests/ - mypy $SOURCE_DIRS architecture: stage: architecture tags: - docker script: - lint-imports - | if [ -f "$CI_PROJECT_DIR/.importlinter" ] || \ [ -f "$CI_PROJECT_DIR/.importlinter.ini" ] || \ [ -f "$CI_PROJECT_DIR/pyproject.toml" ] || \ [ -f "$CI_PROJECT_DIR/setup.cfg" ]; then lint-imports else echo "No import-linter config found; skipping architecture check." fi lint: stage: lint tags: - docker script: - ruff check src/ tests/ - ruff check $SOURCE_DIRS $TEST_DIRS format: stage: format tags: - docker script: - ruff format --check src/ tests/ - ruff format --check $SOURCE_DIRS $TEST_DIRS test: stage: test variables: DOCKER_HOST: tcp://docker:2375 DOCKER_TLS_CERTDIR: "" services: - docker:dind tags: - docker script: - pytest tests/unit tests/integration --cov=src/open_exposure_gateway --cov-branch --cov-report=term-missing || [ $? -eq 5 ] #bypass no tests found error. coverage: '/TOTAL.+ ([0-9]{1,3}(?:\.[0-9]+)?%)/' - pytest .variables-template: tags: - shell before_script: - docker info - echo "$CI_REGISTRY_PASSWORD" | docker login --username "$CI_REGISTRY_USER" --password-stdin "$CI_REGISTRY" - | if [ -n "$CI_COMMIT_TAG" ]; then export IMAGE_TAG="$CI_COMMIT_TAG" elif [ "$CI_COMMIT_REF_NAME" = "main" ]; then export IMAGE_TAG="latest" elif [ "$CI_COMMIT_REF_NAME" = "develop" ]; then export IMAGE_TAG="develop" else export IMAGE_TAG="$(echo "$CI_COMMIT_REF_NAME" | tr '/' '-')" fi echo "Using image tag: $IMAGE_TAG" conformance: stage: test allow_failure: true build-ai-agent: stage: build extends: .variables-template variables: IMAGE_NAME: "ai_agent" script: - pytest tests/conformance - echo "Building ${IMAGE_NAME} image..." - docker build --network=host -t "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG" -f "$CI_PROJECT_DIR/$IMAGE_NAME/Dockerfile" "$CI_PROJECT_DIR/$IMAGE_NAME" - docker push "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG" only: - main - develop - tags build-and-push: stage: build-and-push image: docker:cli build-mcp-module: stage: build extends: .variables-template variables: DOCKER_HOST: tcp://docker:2375 DOCKER_TLS_CERTDIR: "" services: - docker:dind before_script: - docker info IMAGE_NAME: "mcp_module" script: - export TEST_IMAGE_TAG="ci-${CI_COMMIT_REF_SLUG}-${CI_COMMIT_SHORT_SHA}" - echo "$CI_REGISTRY_PASSWORD" | docker login -u "$CI_REGISTRY_USER" "$CI_REGISTRY" --password-stdin - docker buildx build --provenance=false --network=host -t "$CI_REGISTRY_IMAGE:$TEST_IMAGE_TAG" --push . - docker logout "$CI_REGISTRY" rules: - if: '$CI_COMMIT_BRANCH == "main" || $CI_COMMIT_BRANCH == "develop"' - echo "Building ${IMAGE_NAME} image..." - docker build --network=host -t "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG" -f "$CI_PROJECT_DIR/$IMAGE_NAME/Dockerfile" "$CI_PROJECT_DIR/$IMAGE_NAME" - docker push "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG" only: - main - develop - tags Loading
.gitlab-ci.yml +80 −38 Changes for .gitlab-ci.yml: 80 added lines, 38 removed lines. Original line number Diff line number Diff line Loading @@ -2,13 +2,13 @@ default: image: python:3.12-slim cache: paths: - .cache/uv - .cache/pip before_script: - cd "$CI_PROJECT_DIR/${BACKEND_DIR:-.}" - pip install uv - export UV_SYSTEM_CERTS=1 - uv sync --locked --extra dev - . .venv/bin/activate - cd "$CI_PROJECT_DIR" - python -m pip install -r mcp_module/requirements.txt -r ai_agent/requirements.txt - python -m pip install mypy pytest ruff import-linter - python -m pip check - export PYTHONPATH="$CI_PROJECT_DIR:$PYTHONPATH" stages: - type Loading @@ -16,63 +16,105 @@ stages: - lint - format - test - build-and-push - build variables: UV_CACHE_DIR: "$CI_PROJECT_DIR/.cache/uv" PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip" SOURCE_DIRS: "mcp_module/ ai_agent/" TEST_DIRS: "tests/" include: - template: Security/SAST.gitlab-ci.yml sast: stage: test before_script: [] type: stage: type tags: - docker script: - mypy src/ tests/ - mypy $SOURCE_DIRS architecture: stage: architecture tags: - docker script: - lint-imports - | if [ -f "$CI_PROJECT_DIR/.importlinter" ] || \ [ -f "$CI_PROJECT_DIR/.importlinter.ini" ] || \ [ -f "$CI_PROJECT_DIR/pyproject.toml" ] || \ [ -f "$CI_PROJECT_DIR/setup.cfg" ]; then lint-imports else echo "No import-linter config found; skipping architecture check." fi lint: stage: lint tags: - docker script: - ruff check src/ tests/ - ruff check $SOURCE_DIRS $TEST_DIRS format: stage: format tags: - docker script: - ruff format --check src/ tests/ - ruff format --check $SOURCE_DIRS $TEST_DIRS test: stage: test variables: DOCKER_HOST: tcp://docker:2375 DOCKER_TLS_CERTDIR: "" services: - docker:dind tags: - docker script: - pytest tests/unit tests/integration --cov=src/open_exposure_gateway --cov-branch --cov-report=term-missing || [ $? -eq 5 ] #bypass no tests found error. coverage: '/TOTAL.+ ([0-9]{1,3}(?:\.[0-9]+)?%)/' - pytest .variables-template: tags: - shell before_script: - docker info - echo "$CI_REGISTRY_PASSWORD" | docker login --username "$CI_REGISTRY_USER" --password-stdin "$CI_REGISTRY" - | if [ -n "$CI_COMMIT_TAG" ]; then export IMAGE_TAG="$CI_COMMIT_TAG" elif [ "$CI_COMMIT_REF_NAME" = "main" ]; then export IMAGE_TAG="latest" elif [ "$CI_COMMIT_REF_NAME" = "develop" ]; then export IMAGE_TAG="develop" else export IMAGE_TAG="$(echo "$CI_COMMIT_REF_NAME" | tr '/' '-')" fi echo "Using image tag: $IMAGE_TAG" conformance: stage: test allow_failure: true build-ai-agent: stage: build extends: .variables-template variables: IMAGE_NAME: "ai_agent" script: - pytest tests/conformance - echo "Building ${IMAGE_NAME} image..." - docker build --network=host -t "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG" -f "$CI_PROJECT_DIR/$IMAGE_NAME/Dockerfile" "$CI_PROJECT_DIR/$IMAGE_NAME" - docker push "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG" only: - main - develop - tags build-and-push: stage: build-and-push image: docker:cli build-mcp-module: stage: build extends: .variables-template variables: DOCKER_HOST: tcp://docker:2375 DOCKER_TLS_CERTDIR: "" services: - docker:dind before_script: - docker info IMAGE_NAME: "mcp_module" script: - export TEST_IMAGE_TAG="ci-${CI_COMMIT_REF_SLUG}-${CI_COMMIT_SHORT_SHA}" - echo "$CI_REGISTRY_PASSWORD" | docker login -u "$CI_REGISTRY_USER" "$CI_REGISTRY" --password-stdin - docker buildx build --provenance=false --network=host -t "$CI_REGISTRY_IMAGE:$TEST_IMAGE_TAG" --push . - docker logout "$CI_REGISTRY" rules: - if: '$CI_COMMIT_BRANCH == "main" || $CI_COMMIT_BRANCH == "develop"' - echo "Building ${IMAGE_NAME} image..." - docker build --network=host -t "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG" -f "$CI_PROJECT_DIR/$IMAGE_NAME/Dockerfile" "$CI_PROJECT_DIR/$IMAGE_NAME" - docker push "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG" only: - main - develop - tags