stages:
    - test
    - deploy

variables:
  PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"

lint-openapi:
    image:
        name: redocly/cli
        entrypoint: [""]
    stage: test
    script: openapi lint portal/static/docs/api/v0/openapi-spec.yaml
    allow_failure: true

test-frontend:
    image: python:3.12
    stage: test
    before_script:
        - apt-get update
        - apt-get install -y ca-certificates curl gnupg faketime
        - mkdir -p /etc/apt/keyrings
        - curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
        - echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list
        - apt-get update
        - apt-get install -y nodejs libgtk2.0-0 libgtk-3-0 libgbm-dev libnotify-dev libgconf-2-4 libnss3 libxss1 libasound2 libxtst6 xauth xvfb
        - pip install --upgrade pip setuptools
        - pip install pipenv
        - pipenv requirements > requirements.txt
        - pip uninstall --yes pipenv
        - pip install -r requirements.txt
        - npm install cypress
    script:
        - mkdir instance
        - cp tests/resources/portal.test.db instance/portal.db
        - export FLASK_APP=portal
        - faketime '2024-09-26 13:37:00' flask run &
        - faketime '2024-09-26 13:37:00' npx cypress run
    artifacts:
        when: always
        paths:
            - cypress/videos
            - cypress/screenshots
        expire_in: 1 week

test-python:
    image: python:3.12
    stage: test
    cache: 
      paths:
        - .cache/pip
    before_script:
        - pip install pipenv
        - pipenv requirements --dev > requirements.txt
        - pip install -r requirements.txt 
    script:
        - black --check $CI_PROJECT_DIR
        - mypy .

# This snippet is copied and modified from the GitLab Documentation (as of 2021-01-10, the contents of the script seem to have changed by now)
#   * Title of the documentation page: "Building a Docker image with kaniko"
#   * Author: (c) 2011-present GitLab B.V.
#   * URL: https://docs.gitlab.com/ee/ci/docker/using_kaniko.html#building-a-docker-image-with-kaniko
#   * License: CC BY-SA 4.0 (https://creativecommons.org/licenses/by-sa/4.0)
build-docker:
    image:
        name: gcr.io/kaniko-project/executor:debug
        entrypoint: [""]
    stage: deploy
    before_script:
        - mkdir -p /kaniko/.docker
        - echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json
    script:
        - echo "{\"commit\":\"$CI_COMMIT_SHA\",\"datetime\":\"$CI_COMMIT_TIMESTAMP\"}" > PORTAL_VERSION
        - /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile --destination $CI_REGISTRY_IMAGE:$CI_COMMIT_TAG
    only:
        - master
# End of adapted snippet
