dash/Jenkinsfile.gitian

130 lines
4.7 KiB
Plaintext
Raw Normal View History

def targets = [
'linux',
'win',
'osx',
]
def osslTarUrl = 'http://downloads.sourceforge.net/project/osslsigncode/osslsigncode/osslsigncode-1.7.1.tar.gz'
def osslPatchUrl = 'https://bitcoincore.org/cfields/osslsigncode-Backports-to-1.7.1.patch'
def SDK_URL='https://bitcoincore.org/depends-sources/sdks'
def OSX_SDK='10.11'
def proc = 4
def mem = 2000
def repositoryUrl = "https://github.com/dashpay/dash.git"
def tasks = [:]
for(int i = 0; i < targets.size(); i++) {
def target = targets[i]
tasks["${target}"] = {
node {
deleteDir() // cleanup workspace
def pwd = sh(returnStdout: true, script: 'pwd').trim()
def dockerGid = sh(returnStdout: true, script: "stat -c '%g' /var/run/docker.sock").trim()
def BRANCH_NAME = sh(returnStdout: true, script: 'echo $BRANCH_NAME').trim()
def commit = BRANCH_NAME
def hasCache = false
def gitianDescriptor
stage("${target}/prepare") {
dir('dash') {
checkout scm
gitianDescriptor = readYaml file: "contrib/gitian-descriptors/gitian-${target}.yml"
}
dir('gitian-builder') {
git url: 'https://github.com/dashpay/gitian-builder.git'
}
sh "mkdir -p dashcore-binaries"
if (target == "osx") {
dir('gitian-builder') {
sh 'mkdir -p inputs'
sh "curl --location --fail $SDK_URL/MacOSX${OSX_SDK}.sdk.tar.gz -o inputs/MacOSX${OSX_SDK}.sdk.tar.gz"
}
}
// restore cache
try {
copyArtifacts(projectName: "dashpay-dash-gitian-nightly/${BRANCH_NAME}", optional: true, selector: lastSuccessful(), filter: "cache-${gitianDescriptor.name}.tar.gz")
} catch (Exception e) {
}
if (fileExists("cache-${gitianDescriptor.name}.tar.gz")) {
hasCache = true
echo "Using cache from dashpay-dash-gitian-nightly/${BRANCH_NAME}"
} else {
try {
copyArtifacts(projectName: 'dashpay-dash-gitian-nightly/develop', optional: true, selector: lastSuccessful(), filter: "cache-${gitianDescriptor.name}.tar.gz");
} catch (Exception e) {
}
if (fileExists("cache-${gitianDescriptor.name}.tar.gz")) {
hasCache = true
echo "Using cache from dashpay-dash-gitian-nightly/develop"
}
}
}
def gitianImage
stage("${target}/builder-image") {
dir('dash') {
gitianImage = docker.build("dash-gitian:${env.BUILD_ID}", 'ci -f ci/Dockerfile.gitian-builder')
}
}
gitianImage.inside("--group-add ${dockerGid} -t -v \"/var/run/docker.sock:/var/run/docker.sock\"") {
sh "mkdir -p gitian-builder/cache"
if (hasCache) {
sh "cd gitian-builder/cache && tar xzfv ../../cache-${gitianDescriptor.name}.tar.gz"
}
stage("${target}/download") {
dir('gitian-builder') {
sh "mkdir -p inputs"
sh "cd inputs && curl -R -O ${osslPatchUrl}"
sh "cd inputs && curl -R -O ${osslTarUrl}"
sh "make -C ../dash/depends download SOURCES_PATH=`pwd`/cache/common"
}
}
stage("${target}/base-vm") {
dir('gitian-builder') {
sh "./bin/make-base-vm --suite bionic --arch amd64 --docker"
}
}
stage("${target}/gbuild") {
dir('gitian-builder') {
// make sure an old version is not running
sh "docker rm -fv gitian-target || true"
try {
sh """
tail -F var/install.log &
tail -F var/build.log &
USE_DOCKER=1 ./bin/gbuild -j ${proc} -m ${mem} --commit dash=${commit} --url dash=${repositoryUrl} ../dash/contrib/gitian-descriptors/gitian-${target}.yml
RET=\$?
# give the above tail calls enough time to print everything on failure
sleep 2s
exit \$RET
"""
} finally {
// make sure it doesn't run forever
sh "docker rm -fv gitian-target || true"
}
sh "mv build/out/dashcore-* ../dashcore-binaries/"
sh "mv build/out/src/dashcore-* ../dashcore-binaries/"
}
archiveArtifacts artifacts: 'dashcore-binaries/*', fingerprint: true
}
// TODO remove this in a few days (only needed to prune the old compressed file from Jenkins caches)
sh "cd gitian-builder/cache && find -name ccache.tar.gz | xargs rm -f"
sh "cd gitian-builder/cache && tar czfv ../../cache-${gitianDescriptor.name}.tar.gz common ${gitianDescriptor.name}"
archiveArtifacts artifacts: "cache-${gitianDescriptor.name}.tar.gz", fingerprint: true
}
}
}
}
parallel tasks