Fixed build config.
Some checks failed
farmcontrol/farmcontrol-server/pipeline/head There was a failure building this commit

This commit is contained in:
Tom Butcher 2026-07-26 14:21:06 +01:00
parent afe42dafa6
commit b57d269f9b
3 changed files with 101 additions and 38 deletions

89
Jenkinsfile vendored
View File

@ -1,3 +1,38 @@
def buildLinux() {
node('ubuntu') {
try {
stage('Checkout (Ubuntu)') {
checkout scm
}
stage('Setup Node.js (Ubuntu)') {
nodejs(nodeJSInstallationName: 'Node23') {
sh 'node -v'
sh 'pnpm -v'
}
}
stage('Install Dependencies (Ubuntu)') {
nodejs(nodeJSInstallationName: 'Node23') {
sh 'pnpm install --frozen-lockfile --production=false'
}
}
stage('Build (Ubuntu)') {
nodejs(nodeJSInstallationName: 'Node23') {
sh "VITE_BUILD_NUMBER=${env.BUILD_NUMBER} NODE_ENV=production pnpm build:linux"
}
}
stage('Archive Artifacts (Ubuntu)') {
archiveArtifacts artifacts: 'app_dist/**/*.deb, app_dist/**/*.rpm', fingerprint: true
}
} finally {
cleanWs()
}
}
}
def buildOnLabel(label, buildCommand) { def buildOnLabel(label, buildCommand) {
return { return {
node(label) { node(label) {
@ -30,61 +65,45 @@ def buildOnLabel(label, buildCommand) {
stage("Build (${label})") { stage("Build (${label})") {
nodejs(nodeJSInstallationName: 'Node23') { nodejs(nodeJSInstallationName: 'Node23') {
if (isUnix()) { if (isUnix()) {
sh "NODE_ENV=production ${buildCommand}" sh "VITE_BUILD_NUMBER=${env.BUILD_NUMBER} NODE_ENV=production ${buildCommand}"
} else { } else {
bat "set NODE_ENV=production && ${buildCommand}" bat "set VITE_BUILD_NUMBER=${env.BUILD_NUMBER} && set NODE_ENV=production && ${buildCommand}"
} }
} }
} }
stage("Archive Artifacts (${label})") { stage("Archive Artifacts (${label})") {
archiveArtifacts artifacts: 'app_dist/**/*.dmg, app_dist/**/*.exe, app_dist/**/*.AppImage, app_dist/**/*.deb, app_dist/**/*.rpm', fingerprint: true archiveArtifacts artifacts: 'app_dist/**/farmcontrol-server-*.dmg, app_dist/**/farmcontrol-server-*.exe, app_dist/**/farmcontrol-server-*.pkg, app_dist/**/farmcontrol-server-*.msi', fingerprint: true
} }
} }
} }
} }
def buildLinuxWithBun() { def setBuildNameFromPackageVersion() {
return { node('ubuntu') {
node('ubuntu') { stage('Set Build Name') {
stage("Checkout (Linux)") { checkout scm
checkout scm def version
} nodejs(nodeJSInstallationName: 'Node23') {
version = sh(
stage("Setup Bun (Linux)") { script: "node -p \"require('./package.json').version\"",
sh ''' returnStdout: true
curl -fsSL https://bun.sh/install | bash ).trim()
export PATH="$HOME/.bun/bin:$PATH"
bun --version
'''
}
stage("Install Dependencies (Linux)") {
sh '''
export PATH="$HOME/.bun/bin:$PATH"
bun install --frozen-lockfile
'''
}
stage("Build (Linux)") {
sh '''
export PATH="$HOME/.bun/bin:$PATH"
NODE_ENV=production bun run build:linux
'''
}
stage("Archive Artifacts (Linux)") {
archiveArtifacts artifacts: 'app_dist/**/*.deb, app_dist/**/*.rpm', fingerprint: true
} }
def buildName = "v${version}-b${env.BUILD_NUMBER}"
currentBuild.displayName = buildName
echo "Build name set to: ${buildName}"
} }
} }
} }
try { try {
setBuildNameFromPackageVersion()
parallel( parallel(
'Windows Build': buildOnLabel('windows', 'pnpm build:electron'), 'Windows Build': buildOnLabel('windows', 'pnpm build:electron'),
'MacOS Build': buildOnLabel('macos', 'pnpm build:electron'), 'MacOS Build': buildOnLabel('macos', 'pnpm build:electron'),
'Linux Build': buildLinuxWithBun() 'Ubuntu Build': { buildLinux() }
) )
echo 'All parallel stages completed successfully!' echo 'All parallel stages completed successfully!'

View File

@ -14,7 +14,7 @@
"build:renderer": "pnpm build:electron-renderer && shx cp src/electron/preload.js build/electron/ && shx rm -rf build/electron/App.jsx build/electron/main.jsx build/electron/App.css build/electron/index.css build/electron/FarmControlLogo.jsx build/electron/vite.config.js build/electron/public build/electron/build", "build:renderer": "pnpm build:electron-renderer && shx cp src/electron/preload.js build/electron/ && shx rm -rf build/electron/App.jsx build/electron/main.jsx build/electron/App.css build/electron/index.css build/electron/FarmControlLogo.jsx build/electron/vite.config.js build/electron/public build/electron/build",
"build:electron-renderer": "vite build src/electron --outDir build/electron", "build:electron-renderer": "vite build src/electron --outDir build/electron",
"build:electron": "pnpm build && electron-builder", "build:electron": "pnpm build && electron-builder",
"build:linux": "bun run cleanBuild && bun run build:server && shx mkdir -p app_dist/linux && pkg . --targets node18-linux-x64 --output app_dist/linux/farmcontrol-server && fpm -f -s dir -t deb -n farmcontrol-server -p app_dist/linux/ -v $(node -p \"require('./package.json').version\") --after-install packaging/linux/after-install.sh --after-remove packaging/linux/after-remove.sh app_dist/linux/farmcontrol-server=/usr/bin/farmcontrol-server packaging/linux/farmcontrol-server.service=/lib/systemd/system/farmcontrol-server.service && fpm -f -s dir -t rpm -n farmcontrol-server -p app_dist/linux/ -v $(node -p \"require('./package.json').version\") --after-install packaging/linux/after-install.sh --after-remove packaging/linux/after-remove.sh app_dist/linux/farmcontrol-server=/usr/bin/farmcontrol-server packaging/linux/farmcontrol-server.service=/lib/systemd/system/farmcontrol-server.service", "build:linux": "pnpm run cleanBuild && pnpm run build:server && shx mkdir -p app_dist/linux && pkg . --targets node18-linux-x64 --output app_dist/linux/farmcontrol-server && fpm -f -s dir -t deb -n farmcontrol-server -p app_dist/linux/ -v $(node -p \"require('./package.json').version\") --after-install packaging/linux/after-install.sh --after-remove packaging/linux/after-remove.sh app_dist/linux/farmcontrol-server=/usr/bin/farmcontrol-server packaging/linux/farmcontrol-server.service=/lib/systemd/system/farmcontrol-server.service && fpm -f -s dir -t rpm -n farmcontrol-server -p app_dist/linux/ -v $(node -p \"require('./package.json').version\") --after-install packaging/linux/after-install.sh --after-remove packaging/linux/after-remove.sh app_dist/linux/farmcontrol-server=/usr/bin/farmcontrol-server packaging/linux/farmcontrol-server.service=/lib/systemd/system/farmcontrol-server.service",
"cleanBuild": "rimraf build" "cleanBuild": "rimraf build"
}, },
"author": "Tom Butcher", "author": "Tom Butcher",
@ -74,6 +74,7 @@
"appId": "com.tombutcher.farmcontrolserver", "appId": "com.tombutcher.farmcontrolserver",
"productName": "Farm Control Server", "productName": "Farm Control Server",
"executableName": "farmcontrol-server", "executableName": "farmcontrol-server",
"artifactName": "farmcontrol-server-${version}-${arch}.${ext}",
"icon": "assets/farmcontrolhosticon.png", "icon": "assets/farmcontrolhosticon.png",
"directories": { "directories": {
"output": "app_dist" "output": "app_dist"
@ -83,10 +84,52 @@
"node_modules/**/*" "node_modules/**/*"
], ],
"mac": { "mac": {
"target": "dmg" "target": [
{
"target": "dmg",
"arch": [
"arm64"
]
},
{
"target": "pkg",
"arch": [
"arm64"
]
},
{
"target": "dmg",
"arch": [
"x64"
]
},
{
"target": "pkg",
"arch": [
"x64"
]
}
],
"mergeASARs": true,
"x64ArchFiles": "**/node_modules/@esbuild/darwin-x64/**",
"singleArchFiles": "**/node_modules/**"
}, },
"win": { "win": {
"target": "nsis" "target": [
"nsis",
"msiWrapped"
]
},
"nsis": {
"oneClick": false,
"allowToChangeInstallationDirectory": true,
"perMachine": true
},
"msiWrapped": {
"upgradeCode": "{A4E29F1C-8B3D-5E2A-9C71-1D6F8E4A2B90}",
"perMachine": true,
"impersonate": false,
"wrappedInstallerArgs": "/S"
} }
} }
} }

View File

@ -5,6 +5,7 @@ import svgr from "vite-plugin-svgr";
import svgo from "vite-plugin-svgo"; import svgo from "vite-plugin-svgo";
export default defineConfig({ export default defineConfig({
base: "./",
plugins: [react(), svgr(), svgo()], plugins: [react(), svgr(), svgo()],
root: path.resolve(__dirname), root: path.resolve(__dirname),
build: { build: {