---
# ============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: 'kubernetes-release'

    project: 'kubernetes-release'

    stream:
      - 'master':
          branch: 'master'
          deploy-scenario: 'k8-multus-plugins'
          promote-stack: 'false'
      - '1_20':
          branch: '1.20'
          deploy-scenario: 'k8-multus-plugins'
          promote-stack: 'true'
      - '1_19':
          branch: '1.19'
          deploy-scenario: 'k8-multus-plugins'
          promote-stack: 'true'
      - '1_18':
          branch: '1.18'
          deploy-scenario: 'k8-multus-plugins'
          promote-stack: 'true'
      - '1_17':
          branch: '1.17'
          deploy-scenario: 'k8-multus-plugins'
          promote-stack: 'true'
      - '1_16':
          branch: '1.16'
          deploy-scenario: 'k8-calico-nofeature'
          promote-stack: 'true'
      - '1_15':
          branch: '1.15'
          deploy-scenario: 'k8-calico-nofeature'
          promote-stack: 'true'

    environment-type:
      - offline:
          disabled: false
          execution-mode: offline-deployment
          openrc-credentials-file: 'est-jenkins-openrcfile-city-frankfurt-cicd'

    distro:
      - ubuntu1804

    jobs:
      - 'kubernetes-release-{distro}-{stream}'
      - 'kubernetes-package-{distro}-{stream}'
      - 'kubernetes-promote-{distro}-{stream}'

- job-template:
    name: 'kubernetes-release-{distro}-{stream}'

    project-type: multijob

    disabled: '{obj:disabled}'

    node: 'engine-package-{distro}-fra'

    concurrent: false

    parameters:
      - string:
          name: BRANCH
          default: '{branch}'
          description: 'Branch the job is created for. DO NOT MODIFY!'
      - string:
          name: DISTRO
          default: '{distro}'
          description: 'Distribution to provision and configre target nodes with. DO NOT MODIFY!'
      - string:
          name: DEPLOY_SCENARIO
          default: '{deploy-scenario}'
          description: 'Scenario to test change with. This depends on the branch of the stack.'
      - string:
          name: CI_LOOP
          default: 'release'
          description: 'CI loop type. DO NOT MODIFY!'
      - string:
          name: VERBOSITY
          default: 'false'
          description: 'Engine verbosity'
      - string:
          name: NORDIX_ENGINE_VERSION
          default: 'master'
          description: 'Engine version of engine to package, deploy, test, release'
      - string:
          name: STACK_TYPE
          default: 'kubernetes'
          description: 'Stack to package, deploy, test, release'
      - string:
          name: STACK_VERSION
          default: '{branch}'
          description: 'Stack version of engine to package, deploy, test, release'
      - string:
          name: NORDIX_KUBESPRAY_VERSION
          default: '{branch}'
          description: 'Kubespray version of engine to package, deploy, test, release'
      - string:
          name: NORDIX_BIFROST_VERSION
          default: 'master'
          description: 'Bifrost version of engine to package, deploy, test, release'
      - string:
          name: NORDIX_HEAT_VERSION
          default: 'master'
          description: 'Heat version of engine to package, deploy, test, release'
      - string:
          name: PROMOTE_STACK
          default: '{promote-stack}'
          description: 'Heat version of engine to package, deploy, test, release'

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

    wrappers:
      - build-timeout:
          timeout: 600
      - mask-passwords
      - fix-workspace-permissions
      - openstack:
          single-use: True

    triggers:
      - pollscm:
          cron: "#H 0,8,16 * * *"

    scm:
      - git:
          url: https://gerrit.nordix.org/infra/engine.git
          branches:
            - master
          timeout: 15
          wipe-workspace: true

    builders:
      - 'generate-release-metadata-macro'
      - inject:
          properties-file: "$WORKSPACE/release.properties"
      - 'generate-ssh-keypair-macro'
      - 'wait-pkg-mgr-macro'
      - multijob:
          name: Packaging
          condition: SUCCESSFUL
          execution-type: PARALLEL
          projects:
            - name: 'kubernetes-package-{distro}-{stream}'
              current-parameters: false
              git-revision: true
              node-parameters: true
              property-file: "$WORKSPACE/release.properties"
              kill-phase-on: FAILURE
              abort-all-job: true
      - multijob:
          name: Release Test {deploy-scenario}
          condition: SUCCESSFUL
          execution-type: PARALLEL
          projects:
            - name: 'kubernetes-release-offline-deploy-test-{distro}-baremetal-{stream}'
              current-parameters: false
              git-revision: true
              node-parameters: false
              property-file: "$WORKSPACE/release.properties"
              kill-phase-on: FAILURE
              abort-all-job: true
      - multijob:
          name: Promotion
          condition: SUCCESSFUL
          execution-type: PARALLEL
          projects:
            - name: 'kubernetes-promote-{distro}-{stream}'
              current-parameters: false
              git-revision: true
              node-parameters: true
              property-file: "$WORKSPACE/release.properties"
              kill-phase-on: FAILURE
              abort-all-job: true

- job-template:
    name: 'kubernetes-package-{distro}-{stream}'

    disabled: '{obj:disabled}'

    concurrent: false

    parameters:
      - string:
          name: EXECUTION_MODE
          default: 'packaging'
          description: 'Execution mode to run engine'

    properties:
      - logrotate

    wrappers:
      - build-timeout:
          timeout: 70
      - credentials-binding:
          - username-password-separated:
              credential-id: 'nordix-cicd-arm-credentials'
              username: NORDIX_ARM_USERNAME
              password: NORDIX_ARM_TOKEN
      - mask-passwords
      - fix-workspace-permissions

    scm:
      - git:
          url: https://gerrit.nordix.org/infra/engine.git
          branches:
            - master
          timeout: 15
          wipe-workspace: true

    builders:
      - 'package-macro'
      - 'upload-artifact-macro'

- job-template:
    name: 'kubernetes-promote-{distro}-{stream}'

    disabled: '{obj:disabled}'

    concurrent: false

    properties:
      - logrotate

    wrappers:
      - build-timeout:
          timeout: 30
      - credentials-binding:
          - username-password-separated:
              credential-id: 'nordix-cicd-arm-credentials'
              username: NORDIX_ARM_USERNAME
              password: NORDIX_ARM_TOKEN
      - mask-passwords
      - fix-workspace-permissions

    scm:
      - git:
          url: https://gerrit.nordix.org/infra/engine.git
          branches:
            - master
          timeout: 15
          wipe-workspace: true

    builders:
      - 'promote-macro'
