#!/bin/groovy
/*
 * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The OpenAirInterface Software Alliance licenses this file to You under
 * the OAI Public License, Version 1.1  (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.openairinterface.org/?page_id=698
 *
 * 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.
 *-------------------------------------------------------------------------------
 * For more information about the OpenAirInterface (OAI) Software Alliance:
 *      contact@openairinterface.org
 */

// Location of the python executor node shall be in the same subnet as the others servers
def nodeExecutor = params.nodeExecutor

// Name of the phone resource
def ciServerResource = params.serverResource

pipeline {
  agent {
    label nodeExecutor
  }
  options {
    disableConcurrentBuilds()
    ansiColor('xterm')
    lock (ciServerResource)
  }
  stages {
    stage ("Verify Parameters") {
      steps {
        script {
          echo '\u2705 \u001B[32mVerify Parameters\u001B[0m'
          def allParametersPresent = true

          // It is already to late to check it
          if (params.nodeExecutor != null) {
            echo "Docker Push executor node  :   ${nodeExecutor}"
          }
          if (params.serverResource == null) {
            allParametersPresent = false
          }
        }
      }
    }
    stage ("Push to DockerHub") {
      steps {
        script {
          WEEK_TAG = sh returnStdout: true, script: 'date +"%Y.w%U"'
          WEEK_TAG = WEEK_TAG.trim()

          withCredentials([
            [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.DH_Credentials}", usernameVariable: 'DH_Username', passwordVariable: 'DH_Password']
          ]) {
            def listOfImages = ["oai-enb", "oai-gnb", "oai-lte-ue", "oai-nr-ue"]
            sh "docker login -u ${DH_Username} -p ${DH_Password} > /dev/null 2>&1"
            listOfImages.eachWithIndex { item, iindex ->
              sh "docker image tag ${item}:develop ${DH_Username}/${item}:develop"
              sh "docker image tag ${item}:develop ${DH_Username}/${item}:${WEEK_TAG}"
              sh "docker push --quiet ${DH_Username}/${item}:${WEEK_TAG}"
              sh "docker push --quiet ${DH_Username}/${item}:develop"
              sh "docker rmi ${DH_Username}/${item}:${WEEK_TAG} ${DH_Username}/${item}:develop"
            }
            sh "docker logout > /dev/null 2>&1"
          }
        }
      }
    }
  }
  post {
    always {
      script {
        echo "End of Registry Push"
      }
    }
  }
}