- Updated the macOS arm64 build command to use the correct label for architecture compatibility, ensuring proper execution during the build process.
163 lines
4.2 KiB
Groovy
163 lines
4.2 KiB
Groovy
properties([
|
|
buildDiscarder(logRotator(numToKeepStr: '10'))
|
|
])
|
|
|
|
def bunBinDir() {
|
|
if (isUnix()) {
|
|
return "${env.HOME}/.bun/bin"
|
|
}
|
|
return "${env.USERPROFILE}/.bun/bin"
|
|
}
|
|
|
|
def withBun(Closure body) {
|
|
def sep = isUnix() ? ':' : ';'
|
|
withEnv(["PATH=${bunBinDir()}${sep}${env.PATH}"]) {
|
|
body()
|
|
}
|
|
}
|
|
|
|
def checkBun() {
|
|
if (isUnix()) {
|
|
sh 'bun -v'
|
|
} else {
|
|
bat 'bun -v'
|
|
}
|
|
}
|
|
|
|
def writeBuildMetadata() {
|
|
if (isUnix()) {
|
|
sh '''
|
|
bun --eval "await Bun.write('src/buildInfo.json', JSON.stringify({ buildNumber: process.env.BUILD_NUMBER || 'dev' }, null, 2) + '\\n')"
|
|
'''
|
|
} else {
|
|
bat '''
|
|
bun --eval "await Bun.write('src/buildInfo.json', JSON.stringify({ buildNumber: process.env.BUILD_NUMBER || 'dev' }, null, 2) + '\\n')"
|
|
'''
|
|
}
|
|
}
|
|
|
|
def runBuild(buildCommand) {
|
|
def releaseBaseUrl =
|
|
"https://dist.farmcontrol.app/jenkins/farmcontrol/farmcontrol-server"
|
|
withEnv([
|
|
"VITE_BUILD_NUMBER=${env.BUILD_NUMBER ?: 'dev'}",
|
|
'NODE_ENV=production',
|
|
"ELECTROBUN_RELEASE_BASE_URL=${releaseBaseUrl}",
|
|
]) {
|
|
if (isUnix()) {
|
|
sh buildCommand
|
|
} else {
|
|
bat buildCommand
|
|
}
|
|
}
|
|
}
|
|
|
|
def buildLinux() {
|
|
node('ubuntu') {
|
|
try {
|
|
stage('Checkout (Ubuntu)') {
|
|
checkout scm
|
|
}
|
|
|
|
withBun {
|
|
stage('Check Bun (Ubuntu)') {
|
|
checkBun()
|
|
}
|
|
|
|
stage('Install Dependencies (Ubuntu)') {
|
|
sh 'bun install --frozen-lockfile'
|
|
}
|
|
|
|
stage('Write Build Metadata (Ubuntu)') {
|
|
writeBuildMetadata()
|
|
}
|
|
|
|
stage('Build (Ubuntu)') {
|
|
sh "VITE_BUILD_NUMBER=${env.BUILD_NUMBER} NODE_ENV=production bun run build:linux"
|
|
}
|
|
}
|
|
|
|
stage('Archive Artifacts (Ubuntu)') {
|
|
archiveArtifacts artifacts: 'app_dist/farmcontrol-server-*', fingerprint: true
|
|
}
|
|
} finally {
|
|
cleanWs()
|
|
}
|
|
}
|
|
}
|
|
|
|
def buildOnLabel(label, buildCommand) {
|
|
return {
|
|
node(label) {
|
|
stage("Checkout (${label})") {
|
|
checkout scm
|
|
}
|
|
|
|
withBun {
|
|
stage("Check Bun (${label})") {
|
|
checkBun()
|
|
}
|
|
|
|
stage("Install Dependencies (${label})") {
|
|
if (isUnix()) {
|
|
sh 'bun install --frozen-lockfile'
|
|
} else {
|
|
bat 'bun install --frozen-lockfile'
|
|
}
|
|
}
|
|
|
|
stage("Write Build Metadata (${label})") {
|
|
writeBuildMetadata()
|
|
}
|
|
|
|
stage("Build (${label})") {
|
|
runBuild(buildCommand)
|
|
}
|
|
}
|
|
|
|
stage("Archive Artifacts (${label})") {
|
|
archiveArtifacts artifacts: 'app_dist/farmcontrol-server-*', fingerprint: true
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
def buildMacOnLabel(label, targetArch) {
|
|
return buildOnLabel(label, "ELECTROBUN_TARGET_ARCH=${targetArch} bun run build:app:mac")
|
|
}
|
|
|
|
def setBuildNameFromPackageVersion() {
|
|
node('ubuntu') {
|
|
stage('Set Build Name') {
|
|
checkout scm
|
|
withBun {
|
|
checkBun()
|
|
def version = sh(
|
|
script: "bun --eval \"console.log(JSON.parse(await Bun.file('package.json').text()).version)\"",
|
|
returnStdout: true
|
|
).trim()
|
|
def buildName = "v${version}-b${env.BUILD_NUMBER}"
|
|
currentBuild.displayName = buildName
|
|
echo "Build name set to: ${buildName}"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
try {
|
|
setBuildNameFromPackageVersion()
|
|
|
|
parallel(
|
|
'Windows Build': buildOnLabel('windows', 'bun run build:app'),
|
|
'MacOS x64 Build': buildMacOnLabel('macos', 'x64'),
|
|
'MacOS arm64 Build': buildMacOnLabel('macos', 'arm64'),
|
|
'Ubuntu Build': { buildLinux() }
|
|
)
|
|
|
|
echo 'All parallel stages completed successfully!'
|
|
|
|
} catch (Exception e) {
|
|
echo "Pipeline failed: ${e.message}"
|
|
throw e
|
|
}
|