# include:
#   - remote: 'https://gitlab.com/yesolutions/gitlab-ci-templates/raw/main/templates/pre-commit-autofix.yaml'

stages:
  - build
  - typecheck
  - lint
  - test

# App

.pre_pnpm: &pre_pnpm
  - cd app
  - corepack enable
  - corepack prepare pnpm@latest-9 --activate
  - pnpm config set store-dir .pnpm-store
  - pnpm set verify-store-integrity false

build:app:
  stage: build
  image: 'node:22.1.0-slim'
  variables:
    PUBLIC_KERNEL_ORIGIN: "http://kernel:8000"
  rules:
    - changes:
        - app/**/*
  script:
    - *pre_pnpm
    - pnpm install
  cache:
    key:
      files:
        - app/pnpm-lock.yaml
    paths:
      - app/.pnpm-store

typecheck:app:
  stage: typecheck
  image: 'node:22.1.0-slim'
  variables:
    PUBLIC_KERNEL_ORIGIN: "http://kernel:8000"
  rules:
    - changes:
        - app/**/*
  script:
    - *pre_pnpm
    - pnpm install --prefer-offline
    - pnpm check
  cache:
    key:
      files:
        - app/pnpm-lock.yaml
    paths:
      - app/.pnpm-store

lint:app:
  stage: lint
  image: 'node:22.1.0-slim'
  variables:
    PUBLIC_KERNEL_ORIGIN: "http://kernel:8000"
  rules:
    - changes:
        - app/**/*
  script:
    - *pre_pnpm
    - pnpm install --prefer-offline
    - pnpm lint
  cache:
    key:
      files:
        - app/pnpm-lock.yaml
    paths:
      - app/.pnpm-store

test:app:
  stage: test
  image: 'node:22.1.0-slim'
  variables:
    PUBLIC_KERNEL_ORIGIN: "http://kernel:8000"
  rules:
    - changes:
        - app/**/*
  script:
    - *pre_pnpm
    -  pnpm install --prefer-offline
    -  pnpm test:unit --coverage
  cache:
    key:
      files:
        - app/pnpm-lock.yaml
    paths:
      - app/.pnpm-store

# Kernel

.pre_poetry: &pre_poetry
  - cd kernel
  - pip install poetry
  - poetry config virtualenvs.in-project true

build:kernel:
  stage: build
  image: python:3.12
  rules:
    - changes:
        - kernel/**/*
  script:
    - *pre_poetry
    - poetry install
  cache:
    paths:
      - /kernel/.venv

lint:kernel:
  stage: lint
  image: python:3.12
  rules:
    - changes:
        - kernel/**/*
  script:
    - *pre_poetry
    - poetry install
    - pip install ruff
    - ruff check
  cache:
    paths:
      - /kernel/.venv

test:kernel:
  stage: test
  image: python:3.12
  rules:
    - changes:
        - kernel/**/*
  script:
    - *pre_poetry
    - apt update
    - apt install ffmpeg -y
    - poetry install --with=dev
    - poetry run coverage run -m pytest
    - poetry run coverage report -m
    - poetry run coverage xml
  coverage: '/TOTAL.*\s+(\d+%)$/'
  allow_failure: false
  cache:
    paths:
      - /kernel/.venv
