---
# ============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'
          container-tool: 'docker'
          gated-projects: 'infra/stack/onap|infra/installer/oom'
          successful: false
          failed: false
          unstable: false
          notbuilt: false
          deploy-scenario: 'onap-full-nofeature'
      - 'frankfurt':
          branch: '{stream}'
          openrc-credentials-file: 'est-jenkins-openrcfile-city-frankfurt-cicd'
          execution-mode: 'packaging'
          container-tool: 'docker'
          gated-projects: 'infra/stack/onap|infra/installer/oom'
          successful: false
          failed: false
          unstable: false
          notbuilt: false
          deploy-scenario: 'onap-full-nofeature'
      - 'elalto':
          branch: '{stream}'
          openrc-credentials-file: 'est-jenkins-openrcfile-city-frankfurt-cicd'
          execution-mode: 'packaging'
          container-tool: 'docker'
          gated-projects: 'infra/stack/onap|infra/installer/oom'
          successful: false
          failed: false
          unstable: false
          notbuilt: false
          deploy-scenario: 'onap-full-nofeature'

    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: CONTAINER_TOOL
          default: '{container-tool}'
          description: 'Command to use when pulling images. Options docker or podman'
      - 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: 300
      - 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'
