pipeline {
  agent {
    docker {
      image 'maven:3.6-jdk-11'
      args '-v /home/jenkins/.m2:/var/maven/.m2 -v /home/jenkins/.gnupg:/.gnupg -e MAVEN_CONFIG=/var/maven/.m2 -e MAVEN_OPTS=-Duser.home=/var/maven'
    }
  }
  environment {
    GPG_SECRET = credentials('gpg_password')
    GITHUB = credentials('Github-Username-Pw')
    GITHUB_RELEASE_TOKEN = credentials('github_registry_release')
    GIT_ASKPASS='./.git-askpass'
  }
  stages {
    stage ('Ensure dev branch') {
      when {
        expression {
            return env.BRANCH_NAME != 'dev';
        }
      }
      steps {
        error("Releasing is only possible from dev branch")
      }
    }
    stage ('Set Git Information') {
      steps {
        sh 'echo \'echo \$GITHUB_PSW\' > ./.git-askpass'
        sh 'chmod +x ./.git-askpass'
        sh 'git config url."https://api@github.com/".insteadOf "https://github.com/"'
        sh 'git config url."https://ssh@github.com/".insteadOf "ssh://git@github.com/"'
        sh 'git config url."https://git@github.com/".insteadOf "git@github.com:"'
        sh 'git config user.email "build@taddiken.online"'
        sh 'git config user.name "Jenkins"'
      }
    }
    stage('Create release branch') {
      steps {
        sh 'mvn -B -Prelease gitflow:release-start'
      }
    }
    stage('Verify release') {
      steps {
        sh 'mvn -B -Prelease -Dgpg.passphrase=${GPG_SECRET} verify'
      }
    }
    stage('Perform release') {
      steps {
        sh "mvn -B gitflow:release-finish -DargLine=\"-Prelease -B -Dgpg.passphrase=${GPG_SECRET} -DskipTests\""
      }
    }
    stage('Create GitHub release') {
      steps {
        sh 'git checkout master'
        sh "mvn -B github-release:github-release -Dgithub.release-token=${GITHUB_RELEASE_TOKEN}"
      }
    }
  }
}
