From 1a3cb104a5bc8bde809af185d49e279c93a781ca Mon Sep 17 00:00:00 2001 From: geekgeekrun Date: Sun, 14 Apr 2024 15:57:11 +0800 Subject: [PATCH] add script for making dist for current platform and arch --- packages/ui/electron-builder.yml | 17 +---------- packages/ui/package.json | 4 ++- .../make-dist-for-current-platform.mjs | 29 +++++++++++++++++++ .../steps/build-ui-on-current-platform.mjs | 9 +----- packages/ui/scripts/vars/os.mjs | 13 +++++++++ pnpm-lock.yaml | 3 ++ 6 files changed, 50 insertions(+), 25 deletions(-) create mode 100644 packages/ui/scripts/make-dist-for-current-platform.mjs create mode 100644 packages/ui/scripts/vars/os.mjs diff --git a/packages/ui/electron-builder.yml b/packages/ui/electron-builder.yml index b590a6c..dfb2542 100644 --- a/packages/ui/electron-builder.yml +++ b/packages/ui/electron-builder.yml @@ -21,11 +21,6 @@ extraResources: - external-node-runtime-dependencies/** win: executableName: geekgeekrun - target: - - target: nsis - arch: - - x64 - - arm64 nsis: artifactName: ${name}_${version}_${arch}_setup.${ext} shortcutName: ${productName} @@ -39,22 +34,12 @@ mac: - NSDocumentsFolderUsageDescription: Application requests access to the user's Documents folder. - NSDownloadsFolderUsageDescription: Application requests access to the user's Downloads folder. notarize: false - target: - - target: dmg - arch: - - x64 - - arm64 dmg: artifactName: ${name}_${version}_${arch}.${ext} linux: - target: - - target: deb - arch: - - x64 - - arm64 + artifactName: ${name}_${version}_${arch}.${ext} maintainer: GeekGeekRun category: Utility - artifactName: ${name}_${version}_${arch}.${ext} npmRebuild: false publish: provider: generic diff --git a/packages/ui/package.json b/packages/ui/package.json index 6f66cf0..132c54d 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -24,6 +24,7 @@ "build:win": "npm run build && electron-builder --win", "build:mac": "npm run build && electron-builder --mac", "build:linux": "npm run build && electron-builder --linux", + "build:make-dist-for-current-platform": "npm run build && node ./scripts/make-dist-for-current-platform.mjs", "install": "cd ./external-node-runtime-dependencies && cross-env PUPPETEER_SKIP_DOWNLOAD=1 npm install --omit=dev", "release": "node ./scripts/release-new-version.mjs" }, @@ -57,9 +58,10 @@ "electron-builder": "^24.9.1", "electron-vite": "^2.0.0", "element-plus": "^2.5.5", - "find-chrome-bin": "^2.0.1", "eslint": "^8.56.0", "eslint-plugin-vue": "^9.20.1", + "find-chrome-bin": "^2.0.1", + "js-yaml": "^4.1.0", "lodash-es": "^4.17.21", "normalize.css": "^8.0.1", "prettier": "^3.2.4", diff --git a/packages/ui/scripts/make-dist-for-current-platform.mjs b/packages/ui/scripts/make-dist-for-current-platform.mjs new file mode 100644 index 0000000..e7c0252 --- /dev/null +++ b/packages/ui/scripts/make-dist-for-current-platform.mjs @@ -0,0 +1,29 @@ +import builder from 'electron-builder' +import yaml from 'js-yaml' +import url from 'node:url' +import path from 'node:path' +import fs from 'node:fs' +import { buildTargetListMapByPlatform, osPlatformToBuildCommandMap } from './vars/os.mjs' + +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)) + +const getBuilderConfig = () => { + return yaml.load(fs.readFileSync(path.join(__dirname, '../electron-builder.yml'), 'utf8')) +} + +const main = async () => { + const buildTargets = buildTargetListMapByPlatform[process.platform] + const platformKeyForBuildParameter = osPlatformToBuildCommandMap[process.platform] + if (!buildTargets?.length || !platformKeyForBuildParameter) { + console.log('Cannot build for current platform') + process.exit(1) + } + const buildParameter = { + config: getBuilderConfig() + } + buildParameter[platformKeyForBuildParameter] = buildTargets.map((it) => `${it}:${process.arch}`) + + return await builder.build(buildParameter) +} + +main() diff --git a/packages/ui/scripts/steps/build-ui-on-current-platform.mjs b/packages/ui/scripts/steps/build-ui-on-current-platform.mjs index c407a73..89e21bf 100644 --- a/packages/ui/scripts/steps/build-ui-on-current-platform.mjs +++ b/packages/ui/scripts/steps/build-ui-on-current-platform.mjs @@ -1,12 +1,5 @@ import childProcess from 'node:child_process' -import os from 'node:os' - -const currentOsPlatform = os.platform() -const osPlatformToBuildCommandMap = { - darwin: 'mac', - linux: 'linux', - win32: 'win' -} +import { osPlatformToBuildCommandMap, currentOsPlatform } from '../vars/os.mjs' export default function buildUiOnCurrentPlatform() { try { diff --git a/packages/ui/scripts/vars/os.mjs b/packages/ui/scripts/vars/os.mjs new file mode 100644 index 0000000..097f769 --- /dev/null +++ b/packages/ui/scripts/vars/os.mjs @@ -0,0 +1,13 @@ +import os from 'node:os' + +export const currentOsPlatform = os.platform() +export const osPlatformToBuildCommandMap = { + darwin: 'mac', + linux: 'linux', + win32: 'win' +} +export const buildTargetListMapByPlatform = { + darwin: ['dmg'], + linux: ['deb'], + win32: ['nsis'] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e775d39..b844726 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -187,6 +187,9 @@ importers: find-chrome-bin: specifier: ^2.0.1 version: 2.0.1 + js-yaml: + specifier: ^4.1.0 + version: 4.1.0 lodash-es: specifier: ^4.17.21 version: 4.17.21