#!groovy
pipeline {

  agent any

  parameters {
    string(name: 'pactConsumerTags', defaultValue: 'junit5', description: 'Tags to verify')
  }

  stages {
    stage ('Get Latest Prod Version From Pact Broker') {
      steps {
        sh 'curl -LO https://github.com/pact-foundation/pact-ruby-standalone/releases/download/v1.88.3/pact-1.88.3-linux-x86_64.tar.gz'
        sh 'tar xzf pact-1.88.3-linux-x86_64.tar.gz'
        dir('pact/bin') {
          script {
            env.PROD_VERSION = sh(script: "./pact-broker describe-version -a user-service -b http://pact_broker -l prod | tail -1 | cut -f 1 -d \\|", returnStdout: true).trim()
          }
        }
        echo "Current prod version: " + PROD_VERSION
      }
    }
    stage("Checkout Latest Prod Version") {
      steps {
        sh "git checkout ${PROD_VERSION}"
      }
    }

    stage ('Run Contract Tests') {
      steps {
        dir('user-service') {
          sh "../mvnw clean test " +
                  "-Pcontract-tests " +
                  "-Dpact.provider.version=${PROD_VERSION} " +
                  "-Dpact.verifier.publishResults=true " +
                  "-Dpactbroker.tags=prod,${params.pactConsumerTags}"
        }
      }
    }
  }

}