Add target resolution logic to Jenkinsfile
This commit is contained in:
1 parent
3b7c6847e7
commit
d3a25cb38f
1 file changed
+84
Vendored
+84
@@ -0,0 +1,84 @@
|
||||
def getTargets(String targetParam) {
|
||||
if (targetParam == 'all') {
|
||||
sh(
|
||||
script: '''
|
||||
git clone --depth 1 https://github.com/openwrt/openwrt.git /tmp/openwrt-targets
|
||||
cd /tmp/openwrt-targets
|
||||
perl scripts/dump-target-info.pl targets 2>/dev/null | awk '{print $1}'
|
||||
''',
|
||||
returnStdout: true
|
||||
).trim().split('\n').toList()
|
||||
} else {
|
||||
targetParam.split(',').collect { it.trim() }.findAll { it }
|
||||
}
|
||||
}
|
||||
|
||||
def generateStages(openwrtVersions, targets) {
|
||||
def stages = [:]
|
||||
|
||||
for (version in openwrtVersions) {
|
||||
for (target in targets) {
|
||||
def v = version
|
||||
def t = target
|
||||
def safeTarget = t.replace('/', '-')
|
||||
def tag = "lochnair/openwrt-sdk-rust:${safeTarget}-${v}"
|
||||
|
||||
stages["${safeTarget}-${v}"] = {
|
||||
stage("${safeTarget}-${v}") {
|
||||
docker.withRegistry('https://index.docker.io/v1/', 'dockerhub-creds') {
|
||||
def img = docker.build(tag,
|
||||
"--build-arg SAFE_TARGET=${safeTarget} " +
|
||||
"--build-arg VERSION=${v} " +
|
||||
".")
|
||||
img.push()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return stages
|
||||
}
|
||||
|
||||
properties([
|
||||
parameters([
|
||||
string(
|
||||
name: 'TARGETS',
|
||||
defaultValue: 'x86/64,mediatek/filogic,octeon/generic',
|
||||
description: 'Comma-separated list of targets to build, or "all" to build every target'
|
||||
)
|
||||
])
|
||||
])
|
||||
|
||||
node {
|
||||
stage('Checkout') {
|
||||
checkout scm
|
||||
}
|
||||
|
||||
stage('Fetch Versions') {
|
||||
def versionsJson = sh(
|
||||
script: 'curl -sL https://downloads.openwrt.org/.versions.json',
|
||||
returnStdout: true
|
||||
).trim()
|
||||
def versions = readJSON text: versionsJson
|
||||
|
||||
env.STABLE = versions.stable_version ?: ''
|
||||
env.OLDSTABLE = versions.oldstable_version ?: ''
|
||||
}
|
||||
|
||||
stage('Resolve Targets') {
|
||||
env.RESOLVED_TARGETS = getTargets(params.TARGETS).join(',')
|
||||
echo "Building for targets: ${env.RESOLVED_TARGETS}"
|
||||
}
|
||||
|
||||
stage('Build Images') {
|
||||
def openwrtVersions = [env.STABLE, env.OLDSTABLE].findAll { it }
|
||||
def targets = env.RESOLVED_TARGETS.split(',').toList()
|
||||
|
||||
def stages = generateStages(openwrtVersions, targets)
|
||||
stages.each { name, s -> s() }
|
||||
}
|
||||
|
||||
stage('Cleanup') {
|
||||
sh 'rm -rf /tmp/openwrt-targets'
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user