---
# Copyright © 2021 Orange
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#       http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
stages:
  - linting
  - build
  - test

cla_authors:
  stage: linting
  image:
    name: bitnami/git:2
    entrypoint: [""]
  script:
    - . .ci/common.sh
    - title "Running cla authors retrieval..."
    - exit_code=0
    - RESULT=$(.ci/check-cla-for-multiple-commits.sh 2>&1) || exit_code=$?
    - handle_test_result $exit_code "$RESULT"
    - exit $exit_code
  needs: []
  rules:
    - if: $CI_MERGE_REQUEST_ID


pylint:
  stage: linting
  image:
    name: cytopia/pylint
    entrypoint: [""]
  script:
    - . .ci/common.sh
    - title "Running pylint check..."
    - exit_code=0
    - RESULT=$(find kubernetes/ TOSCA/ docs/ -name '*.py' -print0 | xargs -0 pylint 2>&1) || exit_code=$?
    - handle_test_result $exit_code "$RESULT"
    - exit $exit_code
  needs: []
  rules:
    - if: $CI_MERGE_REQUEST_ID
      changes:
        - .ci/*
        - .gitlab-ci.yml
        - '**/*.py'

commit-message:
  stage: linting
  image:
    name: jorisroovers/gitlint:0.16.0
    entrypoint: [""]
  script:
    - . .ci/common.sh
    - title "*** Running gitlint..."
    - exit_code=0
    - RESULT=$(gitlint 2>&1) || exit_code=$?
    - handle_test_result $exit_code "$RESULT"
    - exit $exit_code
  needs: []
  rules:
    - if: $CI_MERGE_REQUEST_ID


trailing-whitespaces:
  stage: linting
  image:
    name: alpine/git:v2.24.1
    entrypoint: [""]
  script:
    - . .ci/common.sh
    - title "Running trailing whitespaces check..."
    - exit_code=0
    - RESULT=$(.ci/find-trailing-whitespaces.sh 2>&1) || exit_code=$?
    - handle_test_result $exit_code "$RESULT"
    - exit $exit_code
  needs: []
  rules:
    - if: $CI_MERGE_REQUEST_ID

tabs:
  stage: linting
  image:
    name: alpine/git:v2.24.1
    entrypoint: [""]
  script:
    - . .ci/common.sh
    - title "Running tabs check..."
    - exit_code=0
    - RESULT=$(.ci/find-tabs.sh 2>&1) || exit_code=$?
    - handle_test_result $exit_code "$RESULT"
    - exit $exit_code
  needs: []
  rules:
    - if: $CI_MERGE_REQUEST_ID

documentation:doc8:
  stage: linting
  image:
    name: testthedocs/ttd-doc8
    entrypoint: [""]
  script:
    - . .ci/common.sh
    - title "Running doc8 check..."
    - exit_code=0
    - RESULT=$(doc8 docs 2>&1) || exit_code=$?
    - handle_test_result $exit_code "$RESULT"
    - exit $exit_code
  rules:
    - if: $CI_MERGE_REQUEST_ID
      changes:
        - .ci/*
        - .gitlab-ci.yml
        - docs/**/*
  needs: []

documentation:link-check:
  stage: linting
  image:
    name: python:3.7
    entrypoint: [""]
  script:
    - . .ci/common.sh
    - pip install -r requirements.txt
      -chttps://git.onap.org/doc/plain/etc/upper-constraints.os.txt
      -chttps://git.onap.org/doc/plain/etc/upper-constraints.onap.txt
    - title "Running documentation links check..."
    - exit_code=0
    - RESULT=$(sphinx-build -W -b linkcheck -d /tmp/doctrees ./docs/ ./docs/_build/linkcheck 2>&1) || exit_code=$?
    - handle_test_result $exit_code "$RESULT"
    - exit $exit_code
  rules:
    - if: $CI_MERGE_REQUEST_ID
      changes:
        - .ci/*
        - .gitlab-ci.yml
        - docs/**/*
  needs: []

documentation:spelling:
  stage: linting
  image:
    name: python:3.7
    entrypoint: [""]
  script:
    - . .ci/common.sh
    - apt-get update
    - apt-get install -qq --yes curl libenchant-2-2
    - curl -LO https://git.onap.org/doc/plain/docs/spelling_wordlist.txt
    - pip install -r requirements.txt
      -chttps://git.onap.org/doc/plain/etc/upper-constraints.os.txt
      -chttps://git.onap.org/doc/plain/etc/upper-constraints.onap.txt
    - title "Running documentation spelling check..."
    - exit_code=0
    - RESULT=$(sphinx-build -b spelling -d /tmp/doctrees ./docs/ ./docs/_build/spelling 2>&1) || exit_code=$?
    - handle_test_result $exit_code "$RESULT"
    - exit $exit_code
  rules:
    - if: $CI_MERGE_REQUEST_ID
      changes:
        - .ci/*
        - .gitlab-ci.yml
        - docs/**/*
  needs: []

bashisms:
  stage: linting
  image:
    name: manabu/checkbashisms-docker
    entrypoint: [""]
  script:
    - . .ci/common.sh
    - title "Running bashisms check..."
    - exit_code=0
    - RESULT=$(.ci/check-bashisms 2>&1) || exit_code=$?
    - handle_test_result $exit_code "$RESULT"
    - exit $exit_code
  rules:
    - if: $CI_MERGE_REQUEST_ID
  needs: []

helm:fast:
  stage: linting
  services:
    - name: bitnami/chartmuseum:latest
      alias: chartmuseum
  image:
    name: alpine/helm:3.6.3
    entrypoint: [""]
  variables:
    SKIP_LINT: "TRUE"
  script:
    - . .ci/common.sh
    - apk add --no-cache make
    - helm repo add local http://chartmuseum:8080/
    - helm plugin install --version v0.9.0 https://github.com/chartmuseum/helm-push.git
    - title "Running helm fast check..."
    - cd kubernetes
    - exit_code=0
    - make all || exit_code=$?
    - handle_test_result $exit_code ""
    - exit $exit_code
  needs: []
  rules:
    - if: $CI_MERGE_REQUEST_ID
      changes:
        - .ci/*
        - .gitlab-ci.yml
        - kubernetes/**/*

helm:full:
  stage: build
  services:
    - name: bitnami/chartmuseum:latest
      alias: chartmuseum
  image:
    name: alpine/helm:3.6.3
    entrypoint: [""]
  script:
    - . .ci/common.sh
    - apk add --no-cache make
    - helm repo add local http://chartmuseum:8080/
    - helm plugin install --version v0.9.0 https://github.com/chartmuseum/helm-push.git
    - title "Running full helm check..."
    - cd kubernetes
    - exit_code=0
    - make all || exit_code=$?
    - handle_test_result $exit_code ""
    - exit $exit_code
  needs:
    - helm:fast
  timeout: 6h
  rules:
    - if: $CI_MERGE_REQUEST_ID
      changes:
        - .ci/*
        - .gitlab-ci.yml
        - kubernetes/**/*

documentation:
  stage: build
  image:
    name: python:3.7
    entrypoint: [""]
  script:
    - . .ci/common.sh
    - apt-get update
    - apt-get install --yes graphviz plantuml
    - pip install -r requirements.txt
      -chttps://git.onap.org/doc/plain/etc/upper-constraints.os.txt
      -chttps://git.onap.org/doc/plain/etc/upper-constraints.onap.txt
    - title "Running documentation build..."
    - exit_code=0
    - RESULT=$(sphinx-build -q -W -b html -d /tmp/doctrees ./docs/ ./docs/_build/html 2>&1) || exit_code=$?
    - handle_test_result $exit_code "$RESULT"
    - exit $exit_code
  rules:
    - if: $CI_MERGE_REQUEST_ID
      changes:
        - .ci/*
        - .gitlab-ci.yml
        - docs/*
  needs:
    - documentation:spelling
    - documentation:link-check
    - documentation:doc8

gating:launch:
  stage: test
  image:
    name: busybox
    entrypoint: [""]
  script:
    - . .ci/common.sh
    - title "Launching request for a gate"
  needs:
    - bashisms
    - helm:fast
    - tabs
    - trailing-whitespaces
  rules:
    - if: $CI_MERGE_REQUEST_ID
      changes:
        - .ci/*
        - .gitlab-ci.yml
        - kubernetes/**/*
