blob: abcf1a8afc04347852e5bae04cfaa77d2bed06b7 [file] [log] [blame]
#!groovy
// Collect parameters
String mirror_name = env.MIRROR_NAME
String mirror_target = env.MIRROR_TARGET ?: env.MIRROR_NAME
String snapshot_name = env.SNAPSHOT_NAME as String
String snapshot_id = env.SNAPSHOT_ID as String
String snapshot_dir = env.SNAPSHOT_DIR
String snapshot_rel_dir = env.SNAPSHOT_REL_DIR
String root_dir = env.ROOT_DIR
String slave_label = env.SLAVE_LABEL
// Snapshot name can be hierarchical, i.e. can have subdirectories, so let's flatten it
String normalized_snapshot_name = snapshot_name.replaceAll('/', '-')
String _snapshot = ''
node(slave_label) {
try {
dir(snapshot_dir) {
// Guess link target
if (snapshot_id ==~ /^\d{4}-\d{2}-\d{2}-\d{6}$/) {
// Exact snapshot ID
_snapshot = "${mirror_target}-${snapshot_id}"
} else if (snapshot_id == 'latest') {
// Latest available snapshot
_snapshot = sh (script: "sed '1p;d' '${mirror_target}-${snapshot_id}.target.txt'", returnStdout: true).trim()
} else {
// Some named snapshot
_snapshot = sh (script: "readlink '${mirror_target}-${snapshot_id}'", returnStdout: true).trim()
}
// Set name for the snapshot to prevent it from time-based cleanup
sh "ln -sfn '${_snapshot}' '${mirror_target}-${normalized_snapshot_name}'"
}
// Set top-level name
dir("${root_dir}/${snapshot_name}") {
sh "ln -sfn '${snapshot_rel_dir}/${_snapshot}' '${mirror_name}'"
sh "echo '${snapshot_rel_dir}/${_snapshot}' > '${mirror_name}'.target.txt"
}
} finally {
// Cleanup
dir("${snapshot_dir}@tmp") {
deleteDir()
}
dir("${root_dir}/${snapshot_name}@tmp") {
deleteDir()
}
}
}
// Set build description
currentBuild.description = "<p><b>${_snapshot}</b> (from ${snapshot_id})</p>"