---
# ============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=========================================================

- project:
    name: 'onap-verify-package'

    project: 'onap-verify-package'

    stream:
      - 'master':
          branch: '{stream}'
          openrc-credentials-file: 'est-jenkins-openrcfile-city-frankfurt-cicd'
          execution-mode: 'packaging'
          gated-projects: 'infra/stack/onap|infra/installer/oom'
          successful: false
          failed: false
          unstable: false
          notbuilt: false
          deploy-scenario: 'onap-sdc-full'
      - 'frankfurt':
          branch: '{stream}'
          openrc-credentials-file: 'est-jenkins-openrcfile-city-frankfurt-cicd'
          execution-mode: 'packaging'
          gated-projects: 'infra/stack/onap|infra/installer/oom'
          successful: false
          failed: false
          unstable: false
          notbuilt: false
          deploy-scenario: 'onap-sdc-full'
      - 'elalto':
          branch: '{stream}'
          openrc-credentials-file: 'est-jenkins-openrcfile-city-frankfurt-cicd'
          execution-mode: 'packaging'
          gated-projects: 'infra/stack/onap|infra/installer/oom'
          successful: false
          failed: false
          unstable: false
          notbuilt: false
          deploy-scenario: 'onap-sdc-full'

    distro:
      - ubuntu1804

    dependency-jobs: 'onap-verify-tox-{stream}'
    dependency-job-var: 'TRIGGER_onap_verify_tox_{stream}_BUILD_RESULT'

    jobs:
      - 'onap-verify-package-{distro}-{stream}'

- job-template:
    name: 'onap-verify-package-{distro}-{stream}'

    disabled: '{obj:disabled}'

    concurrent: true

    parameters:
      - string:
          name: DEPLOY_SCENARIO
          default: '{deploy-scenario}'
          description: 'Scenario to test change with.'
      - string:
          name: EXECUTION_MODE
          default: '{execution-mode}'
          description: 'Engine execution mode - packaging'
      - string:
          name: DISTRO
          default: '{distro}'
          description: 'Distribution to use for configuring target nodes (networking etc.)'
      - string:
          name: VERBOSITY
          default: 'true'
          description: 'Verbosity setting for the engine - true or false - default is false'
      - string:
          name: CI_LOOP
          default: 'verify'
          description: 'CI loop type'
      - label:
          name: SLAVE_LABEL
          default: 'engine-package-{distro}-fra'
          description: 'Slave label to schedule this job on.'
      - project-parameters:
          project: $GERRIT_PROJECT
          branch: '{branch}'
          description: 'The project and branch which the change is proposed for'
      - nordix-gerrit-parameters

    properties:
      - logrotate
      # NOTE (fdegir): throttle categories are controlled in jenkins global configuration
      - throttle:
          enabled: true
          max-per-node: 1
          max-total: 4
          option: category
          categories:
            - engine-verify-package

    scm:
      - git-scm-gerrit:
          ssh-credentials-id: nordixinfra-nordix-gerrit-ssh
          branch: $GERRIT_BRANCH
          refspec: $GERRIT_REFSPEC
          wipe_workspace: true
          clean_before: false

    triggers:
      - gerrit:
          server-name: 'Nordix Gerrit'
          trigger-on:
            - patchset-created-event:
                exclude-drafts: 'false'
                exclude-trivial-rebase: 'false'
                exclude-no-code-change: 'false'
            - draft-published-event
            - comment-added-contains-event:
                comment-contains-value: 'recheck'
            - comment-added-contains-event:
                comment-contains-value: 'reverify'
          projects:
            - project-compare-type: 'REG_EXP'
              project-pattern: '{gated-projects}'
              branches:
                - branch-compare-type: 'ANT'
                  branch-pattern: '**/{branch}'
              disable-strict-forbidden-file-verification: 'true'
              forbidden-file-paths:
                - compare-type: ANT
                  pattern: 'docs/**|releasenotes/**'
          skip-vote:
            successful: '{obj:successful}'
            failed: '{obj:failed}'
            unstable: '{obj:unstable}'
            notbuilt: '{obj:notbuilt}'
          custom-url: '* $JOB_NAME $BUILD_URL'
          readable-message: 'true'
          dependency-jobs: '{dependency-jobs}'

    wrappers:
      - openstack:
          single-use: True
      - build-timeout:
          timeout: 240
      - credentials-binding:
          - username-password-separated:
              credential-id: 'nordix-cicd-arm-credentials'
              username: NORDIX_ARM_USERNAME
              password: NORDIX_ARM_TOKEN
      - mask-passwords
      - pre-scm-buildstep:
          failOnError: true
          buildsteps:
            - system-groovy:
                command: |
                  def build = this.getProperty('binding').getVariable('build')
                  def listener = this.getProperty('binding').getVariable('listener')
                  if (build.getEnvironment(listener).{dependency-job-var} != "SUCCESS") {{
                    println "WARN  : Aborting build since dependent job did not succeed!"
                    throw new InterruptedException()
                  }}
            - shell: |
                #!/bin/bash
                sudo chown -R $USER:$USER $WORKSPACE || exit 1


    builders:
      - 'generate-change-metadata-macro'
      - inject:
          properties-file: "$WORKSPACE/change.properties"
      - 'generate-ssh-keypair-macro'
      - 'wait-pkg-mgr-macro'
      - 'package-macro'
      - 'upload-artifact-macro'
