@Library('postcon.helper')
import postcon.helper.Docker
import postcon.helper.Maven
import postcon.helper.ProjectsBuildStore

node {
  properties([[$class: 'GitLabConnectionProperty', gitLabConnection: 'GITLAB']])

  def imageName
  def Docker
  def maven
  def ProjectsBuildStore
  def scmVars
  def mavenVersion

  def buildRelease = { String branch, String version ->
    def majorVersion = "${version}-${branch}"

    Docker.build(imageName, majorVersion, "Dockerfile")

    if (Docker.push(imageName, majorVersion)) {
      ProjectsBuildStore.addBuild("${imageName}:${majorVersion}")
    }
  }
  try {
    stage('prepare build') {
      updateGitlabCommitStatus name: 'build', state: 'pending'
      scmVars = checkout scm
      imageName = '<%= dockerImage %>'

      Docker = new Docker()
      maven = new Maven()
      ProjectsBuildStore = new ProjectsBuildStore()
      ProjectsBuildStore.init()
    }

    if (ProjectsBuildStore.isSelfTriggered() || ProjectsBuildStore.isTriggeredByUpstream('java:10-stretch')) {
      gitlabCommitStatus {
        stage('maven build') {
          maven.deploy(scmVars)
          mavenVersion = maven.getVersionFromPOM()
          sh "echo mavenVersion: '$mavenVersion'"
        }
        stage('docker build') {
          buildRelease("${scmVars.GIT_BRANCH}", mavenVersion)
        }
      }
    }
  } finally {
    stage('cleanup') {
      Docker.cleanImages(imageName)
    }
  }
}
