@Library('infraLib') _

pipeline {
  agent {
    label 'linux-agents'
  }
  options { disableConcurrentBuilds() }
  environment {
    AWS_PROFILE             = "gdb-delphi-dev"
    PROJECT_GROUP           = 'delphi'
    PROJECT_NAME            = "ad-sources-snowflake"
    OCTOPUS_CLI_SERVER      = "https://octopus.delphi.zone"
    OCTOPUS_CLI_API_KEY     = sh(script: "aws secretsmanager get-secret-value --profile ${env.AWS_PROFILE} --secret-id 'infra/jenkins/octopus_api_key' --output json | jq .SecretString | tr -d '\"'", , returnStdout: true).trim()
    OCTOPUS_CHANNEL         = octopus.setOctoChannel(env.BRANCH_NAME)
    DEPLOY_ENV              = snowchange.setDeploymentEnv(params.DEPLOY_ENV_CHOICE, env.PROJECT_GROUP, env.BRANCH_NAME )
    ZIP_PACKAGE_UPLOAD_MODE = octopus.zipPackageUploadMode(params.ZIP_PACKAGE_UPLOAD_MODE)
    NOTIFICATIONS_CHANNEL  = 'delphi-decibel-cicd-alerts'
  }
  parameters {
    // Ability to set particular environment for deployment or to skip it at all
    choice(
      choices: [
        'default',
        'dev',
        'qa',
        'stage',
        'skip_deployment'
      ],
      description: 'Set environment for deployment. Development by default',
      name: 'DEPLOY_ENV_CHOICE'
    )
    choice(
      choices: [
        'error',
        'overwrite',
        'ignore'
      ],
      description: 'Defines whether to raise error, overwrite or ignore if zipPackage of specified version already exists in Octopus.',
      name: 'ZIP_PACKAGE_UPLOAD_MODE'
    )
    choice(
      choices: [
        'yes',
        'no'
      ],
      description: "Don't raise errors in case release already exists",
      name: 'FAIL_IF_RELEASE_EXISTS'
    )
  }
  stages {
    stage('Octopus release') {
      environment {
        VERSION = sh(script: "find . -type f -printf '%f\\n' | egrep 'V[0-9]*' | awk -F'__' '{print \$1}' | sort -V | tail -1", , returnStdout: true).trim().substring(1)
      }
      steps {
        script {
          zipPackage.zipPackagePipelineV2(
            snowchange.setZipPackagePipelineParams(
              params.FAIL_IF_RELEASE_EXISTS,
              'snowchange',
              env.PROJECT_GROUP,
              env.PROJECT_NAME
            )
          )
        }
      }
    }
  }
  post {
    always {
      sh "sudo chown -R ec2-user:ec2-user ${env.WORKSPACE}"
    }
    cleanup {
      deleteDir()
    }
  }
}
