def dockerArgs() {
  def workspace_dir = pwd()
  sh "mkdir -p ${workspace_dir}/.m2"

  def args = ""
      args = "${args} -e MESOS_TAG=${params.MESOS_TAG}"
      args = "${args} -e MESOS_RELEASE=${params.MESOS_RELEASE}"

      // Jenkins runs docker containers with the current user and group
      // ('-u$(id -u):$(id -g)'). Here we map /etc/{passwd,group} inside the
      // container so that the rpm/deb files will be created with the correct
      // uid/gid.
      args = "${args} -v=/etc/passwd:/etc/passwd"
      args = "${args} -v=/etc/group:/etc/group"

      // Jenkins maps the current working directory into the container using
      // '-v=$PWD:$PWD,rw,z'. As a result the $HOME directory is also mapped as
      // $HOME in the container, but without any write permissions. Thus, when
      // Maven tries to use $HOME/.m2 for downloading dependencies, it fails.
      // The following volume mount solves this by explicitly mounting $HOME/.m2
      // inside the container.
      args = "${args} -v=${workspace_dir}/.m2:$HOME/.m2:rw,z"
  return args
}

def uploadToBintray(def pattern) {
  withCredentials([string(credentialsId: params.BINTRAY_CREDENTIALS_ID, variable: 'BINTRAY_CREDS')]) {
    sh 'find . -name ' + pattern ' | ' +
       'while read rpm ; do support/packaging/bintray.sh $rpm; done'
  }
}

parallel(centos7: {
  node('ubuntu') {
    checkout scm

    def img
    if (params.REBUILD_DOCKER_IMAGE == "true") {
      img = docker.build("mesos/packaging:centos7",
                         "-f support/packaging/centos/centos7.dockerfile support/packaging/centos")
    } else {
      img = docker.image("mesos/packaging:centos7")
    }

    img.inside(dockerArgs()) {
      sh 'support/packaging/centos/build_rpm.sh'
    }

    archiveArtifacts artifacts: '**/*.rpm', fingerprint: true
    if (params.UPLOAD_TO_BINTRAY == "true") {
      uploadToBintray('*.rpm')
    }
  }
},
centos6: {
  node('ubuntu') {
    checkout scm

    def img
    if (params.REBUILD_DOCKER_IMAGE == "true") {
      img = docker.build("mesos/packaging:centos6",
                         "-f support/packaging/centos/centos6.dockerfile support/packaging/centos")
    } else {
      img = docker.image("mesos/packaging:centos6")
    }

    img.inside(dockerArgs()) {
      sh 'support/packaging/centos/build_rpm.sh'
    }

    archiveArtifacts artifacts: '**/*.rpm', fingerprint: true
    if (params.UPLOAD_TO_BINTRAY == "true") {
      uploadToBintray('*.rpm')
    }
  }
})
