Commit 9be26652 authored by Natalia Grigoriadou's avatar Natalia Grigoriadou
Browse files

updated gitlab-ci.yml file

parent 525b427e
Loading
Loading
Loading
Loading
Loading
+80 −38
Changes for .gitlab-ci.yml: 80 added lines, 38 removed lines.
Original line number Diff line number Diff line
@@ -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
@@ -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