---
# 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/**/*