---
#
# ============LICENSE_START=======================================================
#  Copyright (C) 2019 Nordix Foundation.
# ================================================================================
# 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.
#
# SPDX-License-Identifier: Apache-2.0
# ============LICENSE_END=========================================================

# Description:
# ============
# This file contains job template definition for linter tests.
# This job can be triggered manually or through a Github pull request. It creates a
# pipeline job. The pipeline scripts are maintained in Nordix/metal3-dev-tools repository.

- job-template:
    id: linter_tests
    name: '{job_prefix}_linter_test'
    description: "Code linting tests for {repo[org]}/{repo[name]}."
    project-type: pipeline
    defaults: global
    disabled: False
    concurrent: True
    parameters:
    - string:
        name: PROJECT_REPO_ORG
        default: '{repo[org]}'
        description: 'Project github repo org name'
    - string:
        name: PROJECT_REPO_NAME
        default: '{repo[name]}'
        description: 'Project github repo name'
    - string:
        name: ghprbActualCommit
        default: 'main'
        description: 'CI Repo branch for triggering manual build'
    - string:
        name: IMAGE_OS
        default: 'ubuntu'
        description: 'Distribution to use for the target host as well as source and target cluster. Can be ubuntu or centos'
    properties:
    - build-discarder:
        days-to-keep: 30
        num-to-keep: 300
        artifact-days-to-keep: -1
        artifact-num-to-keep: -1
    - github:
        url: https://github.com/{repo[org]}/{repo[name]}

    triggers:
    - github-pull-request:
        admin-list:
          - '{ci_github_admin_user}'
        org-list: "{ci_github_whitelist_org}"
        cron: 'H/5 * * * *'
        auth-id: "{ci_ghprb_auth_id}"
        trigger-phrase: '/lint'
        skip-build-phrase: '/skip-test'
        only-trigger-phrase: True
        github-hooks: True
        permit-all: False
        auto-close-on-fail: False
        allow-whitelist-orgs-as-admins: True
        white-list-target-branches:
          - main
        status-context: "linter-tests"
        success-status: "Passed"
        failure-status: "Failed"
        error-status: "Error"
        cancel-builds-on-update: True
    pipeline-scm:
      scm:
      - git:
          url: "{ci_github_repo}"
          credentials-id: "{ci_github_jenkins_credentials_id}"
          branches:
            - '{branch|main}'
          name: 'origin'
          refspec: '+refs/heads/*:refs/remotes/origin/*'
          wipe-workspace: True
          honor-refspec: True
          shallow-clone: False
      script-path: 'ci/jobs/{id}.pipeline'
      lightweight-checkout: False
