blob: 127893195f4b43296097eb2481165d9bffca4717 [file]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
def AGENT_LABEL = env.AGENT_LABEL ?: 'ubuntu'
def JDK_NAME = env.JDK_NAME ?: 'jdk_25_latest'
def MAVEN_PARAMS = "-U -B -e -fae -V -Dnoassembly -T1C "
pipeline {
agent {
label AGENT_LABEL
}
tools {
jdk JDK_NAME
}
environment {
MAVEN_SKIP_RC = true
}
options {
buildDiscarder(
logRotator(artifactNumToKeepStr: '5', numToKeepStr: '10')
)
disableConcurrentBuilds()
}
parameters {
booleanParam(name: 'CLEAN', defaultValue: true, description: 'Perform the build in clean workspace')
}
stages {
stage('Clean workspace') {
when {
expression { params.CLEAN }
}
steps {
sh 'git clean -fdx'
}
}
stage('Setup llvm-mingw') {
when {
anyOf {
branch 'main'
branch 'camel-4.22.x'
}
}
steps {
script {
// Prefer an agent-provided llvm-mingw when the cross-compilers are already
// on PATH; otherwise download the pinned, SHA256-verified toolchain into a
// persistent cache so snapshot deploys don't require it to be pre-provisioned.
// The install script is the single source of truth shared with
// .github/actions/setup-llvm-mingw/action.yml.
env.LLVM_MINGW_BIN = sh(
returnStdout: true,
script: '''#!/bin/bash
set -eo pipefail
if command -v x86_64-w64-mingw32-clang >/dev/null 2>&1 \
&& command -v aarch64-w64-mingw32-clang >/dev/null 2>&1; then
dirname "$(command -v x86_64-w64-mingw32-clang)"
else
./.github/actions/setup-llvm-mingw/install-llvm-mingw.sh "$HOME/.cache/llvm-mingw" | tail -1
fi
'''
).trim()
}
sh '''
for compiler in x86_64-w64-mingw32-clang aarch64-w64-mingw32-clang; do
if ! [ -x "${LLVM_MINGW_BIN}/${compiler}" ]; then
echo "ERROR: $compiler not found under ${LLVM_MINGW_BIN}."
exit 1
fi
done
'''
}
}
stage('Build & Deploy') {
when {
anyOf {
branch 'main'
branch 'camel-4.22.x'
branch 'camel-4.18.x'
}
}
steps {
script {
// The native camel.exe cross-compile only exists on main and the upcoming
// camel-4.22.x LTS. Older LTS branches still deploy their snapshots, but
// without the native build (no -Dcamel.exe.build and no llvm-mingw on PATH).
def nativeExe = env.BRANCH_NAME in ['main', 'camel-4.22.x']
def exeParams = nativeExe ? '-Dcamel.exe.build=true ' : ''
def pathPrefix = nativeExe ? "PATH=\"${env.LLVM_MINGW_BIN}:\$PATH\" " : ''
sh "${pathPrefix}./mvnw $MAVEN_PARAMS ${exeParams}-Pdeploy,apache-snapshots -Dquickly -Dmaven.install.skip=true clean deploy"
}
}
}
}
post {
always {
emailext(
subject: '${DEFAULT_SUBJECT}',
body: '${DEFAULT_CONTENT}',
recipientProviders: [[$class: 'DevelopersRecipientProvider']]
)
cleanWs(
cleanWhenNotBuilt: false,
cleanWhenUnstable: false,
cleanWhenFailure: false,
cleanWhenAborted: false,
cleanWhenSuccess: true,
deleteDirs: true,
disableDeferredWipeout: true,
notFailBuild: true)
}
}
}