#Calendar implementation for the HTWK Leipzig timetable. Evaluation and display of the individual dates in iCal format.
#Copyright (C) 2024 HTWKalender support@htwkalender.de

#This program is free software: you can redistribute it and/or modify
#it under the terms of the GNU Affero General Public License as published by
#the Free Software Foundation, either version 3 of the License, or
#(at your option) any later version.

#This program is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#GNU Affero General Public License for more details.

#You should have received a copy of the GNU Affero General Public License
#along with this program.  If not, see <https://www.gnu.org/licenses/>.
stages:
  - lint
  - sonarqube-check
  - test
  - build
  - package
  - deploy

lint-frontend:
  image: node:lts
  stage: lint
  script:
    - cd frontend
    - npm i
    - npm run lint-no-fix
  rules:
    - changes:
      - frontend/**/*

lint-data-manager:
  stage: lint
  image: golangci/golangci-lint:latest
  script:
    - cd services/data-manager
    - go mod download
    - golangci-lint --version
    - golangci-lint run -v --timeout=5m
  rules:
    - changes:
      - services/data-manager/**/*

lint-ical:
  stage: lint
  image: golangci/golangci-lint:latest
  script:
    - cd services/ical
    - go mod download
    - golangci-lint --version
    - golangci-lint run -v --timeout=5m
  rules:
    - changes:
      - services/ical/**/*

sonarqube-data-manager:
  stage: sonarqube-check
  tags:
    - imn
  image:
    name: sonarsource/sonar-scanner-cli:5.0
    entrypoint:
      - ''
  variables:
    SONAR_USER_HOME: "${CI_PROJECT_DIR}/.sonar"
    GIT_DEPTH: '0'
  cache:
    key: "${CI_JOB_NAME}"
    paths:
      - ".sonar/cache"
  script:
    - cd services/data-manager
    - sonar-scanner
  allow_failure: true
  rules:
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
    - if: '$CI_COMMIT_REF_NAME == "master" || $CI_COMMIT_REF_NAME == "main" || $CI_COMMIT_REF_NAME == "develop"'

test-data-manager:
  image: golang:alpine
  stage: test
  script:
    - cd services/data-manager
    - go test -v ./...
  rules:
    - changes:
      - services/data-manager/**/*

test-ical:
  image: golang:alpine
  stage: test
  script:
    - cd services/ical
    - go test -v ./...
  rules:
    - changes:
      - services/ical/**/*

test-frontend:
  image: node:lts
  stage: test
  script:
    - cd frontend
    - npm i
    - npm run test
  dependencies:
  - lint-frontend

include:
  - local: 'charts/ci-build-deploy.yml'
  - template: Security/Dependency-Scanning.gitlab-ci.yml
