diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 04403452aa..d049be3057 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -109,6 +109,9 @@ jobs: - name: Test native rebuild setup run: yarn test:postinstall + - name: Test release update-channel guard + run: yarn test:publish-channel + - name: Restore node_modules archive id: cache uses: actions/cache/restore@v4 diff --git a/.scripts/electron-package-utils/assert-publish-channel.js b/.scripts/electron-package-utils/assert-publish-channel.js new file mode 100644 index 0000000000..2fc894a45a --- /dev/null +++ b/.scripts/electron-package-utils/assert-publish-channel.js @@ -0,0 +1,134 @@ +/** + * This script fails a Windows / Linux desktop release job BEFORE electron-builder publishes it, when the + * package.json that electron-builder is about to read does not carry the per-arch update channel. + * + * Why: `yarn run pack --desktop= --arch= --platform=` stamps + * `build.publish[].channel = latest-` into `apps//src/package.json`, and the app build copies that + * file into `dist/apps/`, which is what `electron-builder --project dist/apps/` reads. When the stamp does + * not reach dist (e.g. pack runs after the copy), electron-builder silently falls back to its default `latest` + * channel and publishes `latest.yml` / `latest-linux*.yml`, while installed apps only ever request + * `latest-${process.arch}` (desktop-lib update-strategy), so they stop auto-updating. Gauzy Server shipped like + * that from v107 to v111.44.45 and nobody noticed for 4.5 months. + * + * Usage (from the repository root, right before `yarn electron-builder ... --project `): + * ``` + * node .scripts/electron-package-utils/assert-publish-channel.js --project dist/apps/desktop --arch x64 + * ``` + * + * Prints one OK line and exits 0 when every `build.publish[]` entry has `channel: latest-`. + * Otherwise prints a GitHub Actions `::error` annotation and exits 1. + */ + +const fs = require('fs'); +const path = require('path'); + +const ARCHES = ['x64', 'arm64']; +const TITLE = 'Update channel missing'; +const USAGE = 'node .scripts/electron-package-utils/assert-publish-channel.js --project --arch '; +const HINT = + 'Hint: `yarn run pack --desktop= --arch= --platform=` must run BEFORE the build copies apps//src/package.json into dist (or copy it into dist again after pack).'; + +// Workflow command data must escape %, CR and LF, see +// https://docs.github.com/en/actions/reference/workflow-commands-for-github-actions +function escapeData(value) { + return String(value).replace(/%/g, '%25').replace(/\r/g, '%0D').replace(/\n/g, '%0A'); +} + +// Use exitCode (not process.exit) so buffered stdout is never cut off before the runner sees the annotation. +function fail(title, message, hint) { + console.log(`::error title=${title}::${escapeData(message)}`); + if (hint) { + console.log(hint); + } + process.exitCode = 1; +} + +// Accepts `--project ` / `--project=` and `--arch ` / `--arch=`, nothing else. +function parseArgs(argv) { + const args = {}; + for (let i = 0; i < argv.length; i++) { + const match = /^--(project|arch)(?:=(.*))?$/.exec(argv[i]); + if (!match) { + throw new Error(`unknown argument "${argv[i]}"`); + } + const [, name, inline] = match; + const value = inline !== undefined ? inline : argv[++i]; + if (value === undefined || value === '' || value.startsWith('--')) { + throw new Error(`--${name} needs a value`); + } + if (args[name] !== undefined) { + throw new Error(`--${name} was given twice`); + } + args[name] = value; + } + if (args.project === undefined) { + throw new Error('--project is required'); + } + if (args.arch === undefined) { + throw new Error('--arch is required'); + } + if (!ARCHES.includes(args.arch)) { + throw new Error(`--arch must be one of ${ARCHES.join(', ')} (got "${args.arch}")`); + } + return args; +} + +function describeChannel(entry) { + if (!entry || typeof entry !== 'object' || entry.channel === undefined) { + return '(none)'; + } + return JSON.stringify(entry.channel); +} + +function main() { + let args; + try { + args = parseArgs(process.argv.slice(2)); + } catch (error) { + fail('Update channel check misconfigured', `assert-publish-channel: ${error.message}. Usage: ${USAGE}`); + return; + } + + const expected = `latest-${args.arch}`; + const file = path.join(args.project, 'package.json'); + + if (!fs.existsSync(file)) { + fail(TITLE, `${file} not found, so the update channel cannot be checked (expected "${expected}").`, HINT); + return; + } + + let pkg; + try { + pkg = JSON.parse(fs.readFileSync(file, 'utf8')); + } catch (error) { + fail( + TITLE, + `${file} is not readable JSON (${error.message}), so the update channel cannot be checked (expected "${expected}").` + ); + return; + } + + const publish = pkg && pkg.build ? pkg.build.publish : undefined; + if (!Array.isArray(publish) || publish.length === 0) { + fail( + TITLE, + `${file}: build.publish must be a non-empty array, found ${JSON.stringify(publish)}; expected every entry to have channel "${expected}".`, + HINT + ); + return; + } + + if (publish.some((entry) => !entry || entry.channel !== expected)) { + const found = publish.map((entry, index) => `[${index}] ${describeChannel(entry)}`).join(', '); + fail( + TITLE, + `${file}: expected build.publish[].channel "${expected}" but found ${found}. electron-builder would publish an update manifest that installed apps never request.`, + HINT + ); + return; + } + + console.log(`Update channel OK: ${file} build.publish[].channel = ${expected} (entries: ${publish.length}).`); +} + +main(); diff --git a/.scripts/electron-package-utils/assert-publish-channel.test.js b/.scripts/electron-package-utils/assert-publish-channel.test.js new file mode 100644 index 0000000000..069fac0dd7 --- /dev/null +++ b/.scripts/electron-package-utils/assert-publish-channel.test.js @@ -0,0 +1,105 @@ +const assert = require('node:assert/strict'); +const fs = require('node:fs'); +const os = require('node:os'); +const path = require('node:path'); +const test = require('node:test'); +const { spawnSync } = require('node:child_process'); + +const GUARD = path.join(__dirname, 'assert-publish-channel.js'); +const GUARD_COMMAND = 'node .scripts/electron-package-utils/assert-publish-channel.js'; +const ROOT_PACKAGE = path.join(__dirname, '..', '..', 'package.json'); + +function run(...args) { + const result = spawnSync(process.execPath, [GUARD, ...args], { encoding: 'utf8' }); + return { status: result.status, output: result.stdout + result.stderr }; +} + +// Writes `/package.json` with the given build.publish (or raw text) and returns the directory. +function project(t, publish, raw) { + const dir = fs.mkdtempSync(path.join(os.tmpdir(), 'publish-channel-')); + t.after(() => fs.rmSync(dir, { recursive: true, force: true })); + const content = raw !== undefined ? raw : JSON.stringify({ name: 'app', build: { publish } }); + fs.writeFileSync(path.join(dir, 'package.json'), content); + return dir; +} + +const github = (channel) => ({ provider: 'github', repo: 'ever-gauzy-desktop', releaseType: 'release', channel }); + +test('passes when every publish entry has the channel of the arch being built', (t) => { + const x64 = run('--project', project(t, [github('latest-x64')]), '--arch', 'x64'); + assert.equal(x64.status, 0, x64.output); + assert.match(x64.output, /Update channel OK: .* = latest-x64 \(entries: 1\)/); + + const arm64 = run(`--project=${project(t, [github('latest-arm64')])}`, '--arch=arm64'); + assert.equal(arm64.status, 0, arm64.output); +}); + +test('fails with an annotation when the channel never reached dist', (t) => { + const result = run('--project', project(t, [github(undefined)]), '--arch', 'x64'); + assert.equal(result.status, 1); + assert.match(result.output, /^::error title=Update channel missing::.*"latest-x64" but found \[0\] \(none\)/m); + assert.match(result.output, /Hint: `yarn run pack/); +}); + +test('fails on the wrong arch, the default channel, or one entry without a channel', (t) => { + for (const publish of [[github('latest-arm64')], [github('latest')], [github('latest-x64'), github(undefined)]]) { + const result = run('--project', project(t, publish), '--arch', 'x64'); + assert.equal(result.status, 1, JSON.stringify(publish)); + assert.match(result.output, /^::error title=Update channel missing::/m); + } +}); + +test('fails when build.publish is missing, empty or not a list', (t) => { + for (const publish of [undefined, [], github('latest-x64')]) { + const result = run('--project', project(t, publish), '--arch', 'x64'); + assert.equal(result.status, 1, JSON.stringify(publish)); + assert.match(result.output, /build\.publish must be a non-empty array/); + } +}); + +test('fails when package.json is missing or not JSON', (t) => { + const missing = run('--project', path.join(os.tmpdir(), 'publish-channel-does-not-exist'), '--arch', 'x64'); + assert.equal(missing.status, 1); + assert.match(missing.output, /not found/); + + const broken = run('--project', project(t, undefined, '{ "build": '), '--arch', 'x64'); + assert.equal(broken.status, 1); + assert.match(broken.output, /is not readable JSON/); +}); + +test('fails loudly when it is called wrongly', (t) => { + const dir = project(t, [github('latest-x64')]); + for (const args of [[], ['--project', dir], ['--arch', 'x64'], ['--project', dir, '--arch', 'ia32'], ['--foo']]) { + const result = run(...args); + assert.equal(result.status, 1, args.join(' ')); + assert.match(result.output, /^::error title=Update channel check misconfigured::/m); + } +}); + +// The guard only protects releases if it stays wired in: every Windows / Linux release script that stamps a +// per-arch channel with `pack --arch` must run it on the same arch and dist dir right before electron-builder. +test('every per-arch Windows / Linux publishing script runs the guard right before electron-builder', () => { + const { scripts } = JSON.parse(fs.readFileSync(ROOT_PACKAGE, 'utf8')); + const targets = Object.entries(scripts).filter( + ([, script]) => + /electron-builder/.test(script) && + /--publish=always/.test(script) && + / --(windows|linux) /.test(script) && + /yarn run pack --desktop=\S+ --arch=/.test(script) + ); + assert.ok(targets.length >= 28, `expected at least 28 per-arch release scripts, found ${targets.length}`); + + for (const [name, script] of targets) { + const arch = /yarn run pack --desktop=\S+ --arch=(\S+)/.exec(script)[1]; + const project = /electron-builder .* --project (\S+)/.exec(script)[1]; + const guard = `${GUARD_COMMAND} --project ${project} --arch ${arch} && `; + assert.ok( + new RegExp(` --${arch} `).test(script), + `${name}: electron-builder arch differs from pack --arch ${arch}` + ); + assert.ok( + script.includes(`${guard}npm config set cache .cache && yarn electron-builder `), + `${name}: missing "${guard}"` + ); + } +}); diff --git a/package.json b/package.json index 08370a79ad..4376c5a8e1 100644 --- a/package.json +++ b/package.json @@ -117,6 +117,7 @@ "postinstall": "patch-package", "postinstall.manual": "patch-package && yarn node ./.scripts/postinstall.js", "test:postinstall": "node --test .scripts/postinstall.test.js", + "test:publish-channel": "node --test .scripts/electron-package-utils/assert-publish-channel.test.js", "postinstall.electron": "yarn electron-builder install-app-deps && yarn node tools/electron/postinstall", "postinstall.web": "yarn node ./decorate-angular-cli.js && yarn node tools/web/postinstall", "build:desktop": "cross-env NODE_ENV=production yarn run copy-files-i18n-desktop && yarn run postinstall.electron && yarn run config:prod && yarn run config:desktop:prod && yarn run pack:desktop && yarn run generate:icons:desktop --environment=prod && yarn run build:package:all:prod && yarn ng:prod run gauzy:desktop-ui --base-href ./ && yarn ng:prod run api:desktop-api && yarn ng:prod build desktop-api --configuration=production --output-path=dist/apps/desktop/desktop-api && yarn ng:prod build desktop --configuration=production --base-href ./ && yarn run prepare:desktop && yarn run copy-files-desktop && yarn run copy-assets-gauzy", @@ -124,13 +125,13 @@ "build:desktop:linux": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=12288 yarn run build:desktop && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --linux --project dist/apps/desktop", "build:desktop:linux:release": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=12288 yarn run build:desktop && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --linux --publish=always --project dist/apps/desktop", "build:desktop:linux:release:gh": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn run build:desktop && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --linux --publish=always --project dist/apps/desktop", - "build:desktop:linux:release:gh:x64": "yarn run pack --desktop=desktop --arch=x64 --platform=linux && cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn run build:desktop && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --linux --x64 --publish=always --project dist/apps/desktop", - "build:desktop:linux:release:gh:arm64": "yarn run pack --desktop=desktop --arch=arm64 --platform=linux && cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn run build:desktop && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --linux --arm64 --publish=always --project dist/apps/desktop", + "build:desktop:linux:release:gh:x64": "yarn run pack --desktop=desktop --arch=x64 --platform=linux && cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn run build:desktop && node .scripts/electron-package-utils/assert-publish-channel.js --project dist/apps/desktop --arch x64 && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --linux --x64 --publish=always --project dist/apps/desktop", + "build:desktop:linux:release:gh:arm64": "yarn run pack --desktop=desktop --arch=arm64 --platform=linux && cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn run build:desktop && node .scripts/electron-package-utils/assert-publish-channel.js --project dist/apps/desktop --arch arm64 && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --linux --arm64 --publish=always --project dist/apps/desktop", "build:desktop:windows": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=12288 yarn run build:desktop && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 -c.extraMetadata.author.name=Ever build --windows --project dist/apps/desktop", "build:desktop:windows:release": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=12288 yarn run build:desktop && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 -c.extraMetadata.author.name=Ever build --windows --publish=always --project dist/apps/desktop", "build:desktop:windows:release:gh": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn run build:desktop && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 -c.extraMetadata.author.name=Ever build --windows --publish=always --project dist/apps/desktop", - "build:desktop:windows:release:gh:x64": "yarn run pack --desktop=desktop --arch=x64 --platform=win32 && cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn run build:desktop && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 -c.extraMetadata.author.name=Ever build --windows --x64 --publish=always --project dist/apps/desktop", - "build:desktop:windows:release:gh:arm64": "yarn run pack --desktop=desktop --arch=arm64 --platform=win32 && cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn run build:desktop && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 -c.extraMetadata.author.name=Ever build --windows --arm64 --publish=always --project dist/apps/desktop", + "build:desktop:windows:release:gh:x64": "yarn run pack --desktop=desktop --arch=x64 --platform=win32 && cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn run build:desktop && node .scripts/electron-package-utils/assert-publish-channel.js --project dist/apps/desktop --arch x64 && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 -c.extraMetadata.author.name=Ever build --windows --x64 --publish=always --project dist/apps/desktop", + "build:desktop:windows:release:gh:arm64": "yarn run pack --desktop=desktop --arch=arm64 --platform=win32 && cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn run build:desktop && node .scripts/electron-package-utils/assert-publish-channel.js --project dist/apps/desktop --arch arm64 && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 -c.extraMetadata.author.name=Ever build --windows --arm64 --publish=always --project dist/apps/desktop", "build:desktop:mac": "yarn run build:desktop && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --mac --project dist/apps/desktop", "build:desktop:mac:release": "yarn run build:desktop && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --mac --publish=always --project dist/apps/desktop", "build:desktop:mac:quick": "npm config set cache .cache && cross-env DEBUG=electron-builder DEBUG_DMG=true yarn electron-builder -c.electronVersion=38.2.2 build --mac --publish=never --project dist/apps/desktop", @@ -420,13 +421,13 @@ "build:desktop-timer:linux": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=12288 yarn run build:desktop-timer && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --linux --project dist/apps/desktop-timer", "build:desktop-timer:linux:release": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=12288 yarn run build:desktop-timer && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --linux --publish=always --project dist/apps/desktop-timer", "build:desktop-timer:linux:release:gh": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn run build:desktop-timer && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --linux --publish=always --project dist/apps/desktop-timer", - "build:desktop-timer:linux:release:gh:x64": "yarn run pack --desktop=desktop-timer --arch=x64 --platform=linux && cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn run build:desktop-timer && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --linux --x64 --publish=always --project dist/apps/desktop-timer", - "build:desktop-timer:linux:release:gh:arm64": "yarn run pack --desktop=desktop-timer --arch=arm64 --platform=linux && cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn run build:desktop-timer && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --linux --arm64 --publish=always --project dist/apps/desktop-timer", + "build:desktop-timer:linux:release:gh:x64": "yarn run pack --desktop=desktop-timer --arch=x64 --platform=linux && cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn run build:desktop-timer && node .scripts/electron-package-utils/assert-publish-channel.js --project dist/apps/desktop-timer --arch x64 && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --linux --x64 --publish=always --project dist/apps/desktop-timer", + "build:desktop-timer:linux:release:gh:arm64": "yarn run pack --desktop=desktop-timer --arch=arm64 --platform=linux && cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn run build:desktop-timer && node .scripts/electron-package-utils/assert-publish-channel.js --project dist/apps/desktop-timer --arch arm64 && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --linux --arm64 --publish=always --project dist/apps/desktop-timer", "build:desktop-timer:windows": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=12288 yarn run build:desktop-timer && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 -c.extraMetadata.author.name=Ever build --windows --x64 --project dist/apps/desktop-timer", "build:desktop-timer:windows:release": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=12288 yarn run build:desktop-timer && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 -c.extraMetadata.author.name=Ever build --windows --publish=always --project dist/apps/desktop-timer", "build:desktop-timer:windows:release:gh": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn run build:desktop-timer && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 -c.extraMetadata.author.name=Ever build --windows --publish=always --project dist/apps/desktop-timer", - "build:desktop-timer:windows:release:gh:x64": "yarn run pack --desktop=desktop-timer --arch=x64 --platform=win32 && cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn run build:desktop-timer && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 -c.extraMetadata.author.name=Ever build --windows --x64 --publish=always --project dist/apps/desktop-timer", - "build:desktop-timer:windows:release:gh:arm64": "yarn run pack --desktop=desktop-timer --arch=arm64 --platform=win32 && cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn run build:desktop-timer && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 -c.extraMetadata.author.name=Ever build --windows --arm64 --publish=always --project dist/apps/desktop-timer", + "build:desktop-timer:windows:release:gh:x64": "yarn run pack --desktop=desktop-timer --arch=x64 --platform=win32 && cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn run build:desktop-timer && node .scripts/electron-package-utils/assert-publish-channel.js --project dist/apps/desktop-timer --arch x64 && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 -c.extraMetadata.author.name=Ever build --windows --x64 --publish=always --project dist/apps/desktop-timer", + "build:desktop-timer:windows:release:gh:arm64": "yarn run pack --desktop=desktop-timer --arch=arm64 --platform=win32 && cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn run build:desktop-timer && node .scripts/electron-package-utils/assert-publish-channel.js --project dist/apps/desktop-timer --arch arm64 && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 -c.extraMetadata.author.name=Ever build --windows --arm64 --publish=always --project dist/apps/desktop-timer", "build:desktop-timer:mac": "yarn run build:desktop-timer && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --project dist/apps/desktop-timer", "build:desktop-timer:mac:release": "yarn run build:desktop-timer && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --mac --publish=always --project dist/apps/desktop-timer", "build:desktop-timer:mac:quick": "yarn run build:desktop-timer && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --mac --config -c.mac.identity=null --project dist/apps/desktop-timer", @@ -441,20 +442,20 @@ "build:gauzy-server:windows": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=12288 yarn run build:gauzy-server && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 -c.extraMetadata.author.name=Ever build --windows --project dist/apps/gauzy-server", "build:gauzy-server:windows:release": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=12288 yarn run build:gauzy-server && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 -c.extraMetadata.author.name=Ever build --windows --publish=always --project dist/apps/gauzy-server", "build:gauzy-server:windows:release:gh": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn run build:gauzy-server && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 -c.extraMetadata.author.name=Ever build --windows --publish=always --project dist/apps/gauzy-server", - "build:gauzy-server:windows:release:gh:x64": "yarn run pack --desktop=server --arch=x64 --platform=win32 && cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn run build:gauzy-server && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 -c.extraMetadata.author.name=Ever build --windows --x64 --publish=always --project dist/apps/gauzy-server", - "build:gauzy-server:windows:release:gh:arm64": "yarn run pack --desktop=server --arch=arm64 --platform=win32 && cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn run build:gauzy-server && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 -c.extraMetadata.author.name=Ever build --windows --arm64 --publish=always --project dist/apps/gauzy-server", + "build:gauzy-server:windows:release:gh:x64": "yarn run pack --desktop=server --arch=x64 --platform=win32 && cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn run build:gauzy-server && node .scripts/electron-package-utils/assert-publish-channel.js --project dist/apps/gauzy-server --arch x64 && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 -c.extraMetadata.author.name=Ever build --windows --x64 --publish=always --project dist/apps/gauzy-server", + "build:gauzy-server:windows:release:gh:arm64": "yarn run pack --desktop=server --arch=arm64 --platform=win32 && cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn run build:gauzy-server && node .scripts/electron-package-utils/assert-publish-channel.js --project dist/apps/gauzy-server --arch arm64 && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 -c.extraMetadata.author.name=Ever build --windows --arm64 --publish=always --project dist/apps/gauzy-server", "build:gauzy-server:linux": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=12288 yarn run build:gauzy-server && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --linux --project dist/apps/gauzy-server", "build:gauzy-server:linux:release": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=12288 yarn run build:gauzy-server && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --linux --publish=always --project dist/apps/gauzy-server", "build:gauzy-server:linux:release:gh": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn run build:gauzy-server && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --linux --publish=always --project dist/apps/gauzy-server", - "build:gauzy-server:linux:release:gh:x64": "yarn run pack --desktop=server --arch=x64 --platform=linux && cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn run build:gauzy-server && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --linux --x64 --publish=always --project dist/apps/gauzy-server", - "build:gauzy-server:linux:release:gh:arm64": "yarn run pack --desktop=server --arch=arm64 --platform=linux && cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn run build:gauzy-server && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --linux --arm64 --publish=always --project dist/apps/gauzy-server", + "build:gauzy-server:linux:release:gh:x64": "yarn run pack --desktop=server --arch=x64 --platform=linux && cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn run build:gauzy-server && node .scripts/electron-package-utils/assert-publish-channel.js --project dist/apps/gauzy-server --arch x64 && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --linux --x64 --publish=always --project dist/apps/gauzy-server", + "build:gauzy-server:linux:release:gh:arm64": "yarn run pack --desktop=server --arch=arm64 --platform=linux && cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn run build:gauzy-server && node .scripts/electron-package-utils/assert-publish-channel.js --project dist/apps/gauzy-server --arch arm64 && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --linux --arm64 --publish=always --project dist/apps/gauzy-server", "build:gauzy-server:mac": "yarn run build:gauzy-server && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --mac --project dist/apps/gauzy-server", "build:gauzy-server:mac:release": "yarn run build:gauzy-server && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --mac --publish=always --project dist/apps/gauzy-server", "quick:build:gauzy-server": "yarn electron-builder -c.electronVersion=38.2.2 -c.extraMetadata.author.name=Ever build --mac --project dist/apps/gauzy-server", - "build:gauzy-server:linux:release:gh:arm64:isolated": "yarn run pack --desktop=server --arch=arm64 --platform=linux && copyfiles -E -f apps/server/src/package.json dist/apps/gauzy-server && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --linux --arm64 --publish=always --project dist/apps/gauzy-server", - "build:gauzy-server:linux:release:gh:x64:isolated": "yarn run pack --desktop=server --arch=x64 --platform=linux && copyfiles -E -f apps/server/src/package.json dist/apps/gauzy-server && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --linux --x64 --publish=always --project dist/apps/gauzy-server", - "build:gauzy-server:windows:release:gh:x64:isolated": "yarn run pack --desktop=server --arch=x64 --platform=win32 && copyfiles -E -f apps/server/src/package.json dist/apps/gauzy-server && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --windows --x64 --publish=always --project dist/apps/gauzy-server", - "build:gauzy-server:windows:release:gh:arm64:isolated": "yarn run pack --desktop=server --arch=arm64 --platform=win32 && copyfiles -E -f apps/server/src/package.json dist/apps/gauzy-server && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --windows --arm64 --publish=always --project dist/apps/gauzy-server", + "build:gauzy-server:linux:release:gh:arm64:isolated": "yarn run pack --desktop=server --arch=arm64 --platform=linux && copyfiles -E -f apps/server/src/package.json dist/apps/gauzy-server && node .scripts/electron-package-utils/assert-publish-channel.js --project dist/apps/gauzy-server --arch arm64 && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --linux --arm64 --publish=always --project dist/apps/gauzy-server", + "build:gauzy-server:linux:release:gh:x64:isolated": "yarn run pack --desktop=server --arch=x64 --platform=linux && copyfiles -E -f apps/server/src/package.json dist/apps/gauzy-server && node .scripts/electron-package-utils/assert-publish-channel.js --project dist/apps/gauzy-server --arch x64 && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --linux --x64 --publish=always --project dist/apps/gauzy-server", + "build:gauzy-server:windows:release:gh:x64:isolated": "yarn run pack --desktop=server --arch=x64 --platform=win32 && copyfiles -E -f apps/server/src/package.json dist/apps/gauzy-server && node .scripts/electron-package-utils/assert-publish-channel.js --project dist/apps/gauzy-server --arch x64 && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --windows --x64 --publish=always --project dist/apps/gauzy-server", + "build:gauzy-server:windows:release:gh:arm64:isolated": "yarn run pack --desktop=server --arch=arm64 --platform=win32 && copyfiles -E -f apps/server/src/package.json dist/apps/gauzy-server && node .scripts/electron-package-utils/assert-publish-channel.js --project dist/apps/gauzy-server --arch arm64 && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --windows --arm64 --publish=always --project dist/apps/gauzy-server", "build:gauzy-server:mac:release:isolated": "npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --mac --publish=always --project dist/apps/gauzy-server", "copy-files-i18n-desktop-timer": "yarn run download:translations --desktop=desktop-timer", "copy-files-i18n-desktop": "yarn run download:translations --desktop=desktop", @@ -476,13 +477,13 @@ "build:gauzy-api-server:windows": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=12288 yarn run build:gauzy-api-server && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 -c.extraMetadata.author.name=Ever build --windows --project dist/apps/gauzy-api-server", "build:gauzy-api-server:windows:release": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=12288 yarn run build:gauzy-api-server && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 -c.extraMetadata.author.name=Ever build --windows --publish=always --project dist/apps/gauzy-api-server", "build:gauzy-api-server:windows:release:gh": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn run build:gauzy-api-server && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 -c.extraMetadata.author.name=Ever build --windows --publish=always --project dist/apps/gauzy-api-server", - "build:gauzy-api-server:windows:release:gh:x64": "yarn run pack --desktop=server-api --arch=x64 --platform=win32 && cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn run build:gauzy-api-server && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 -c.extraMetadata.author.name=Ever build --windows --x64 --publish=always --project dist/apps/gauzy-api-server", - "build:gauzy-api-server:windows:release:gh:arm64": "yarn run pack --desktop=server-api --arch=arm64 --platform=win32 && cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn run build:gauzy-api-server && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 -c.extraMetadata.author.name=Ever build --windows --arm64 --publish=always --project dist/apps/gauzy-api-server", + "build:gauzy-api-server:windows:release:gh:x64": "yarn run pack --desktop=server-api --arch=x64 --platform=win32 && cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn run build:gauzy-api-server && node .scripts/electron-package-utils/assert-publish-channel.js --project dist/apps/gauzy-api-server --arch x64 && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 -c.extraMetadata.author.name=Ever build --windows --x64 --publish=always --project dist/apps/gauzy-api-server", + "build:gauzy-api-server:windows:release:gh:arm64": "yarn run pack --desktop=server-api --arch=arm64 --platform=win32 && cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn run build:gauzy-api-server && node .scripts/electron-package-utils/assert-publish-channel.js --project dist/apps/gauzy-api-server --arch arm64 && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 -c.extraMetadata.author.name=Ever build --windows --arm64 --publish=always --project dist/apps/gauzy-api-server", "build:gauzy-api-server:linux": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=12288 yarn run build:gauzy-api-server && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --linux --project dist/apps/gauzy-api-server", "build:gauzy-api-server:linux:release": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=12288 yarn run build:gauzy-api-server && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --linux --publish=always --project dist/apps/gauzy-api-server", "build:gauzy-api-server:linux:release:gh": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn run build:gauzy-api-server && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --linux --publish=always --project dist/apps/gauzy-api-server", - "build:gauzy-api-server:linux:release:gh:x64": "yarn run pack --desktop=server-api --arch=x64 --platform=linux && cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn run build:gauzy-api-server && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --linux --x64 --publish=always --project dist/apps/gauzy-api-server", - "build:gauzy-api-server:linux:release:gh:arm64": "yarn run pack --desktop=server-api --arch=arm64 --platform=linux && cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn run build:gauzy-api-server && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --linux --arm64 --publish=always --project dist/apps/gauzy-api-server", + "build:gauzy-api-server:linux:release:gh:x64": "yarn run pack --desktop=server-api --arch=x64 --platform=linux && cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn run build:gauzy-api-server && node .scripts/electron-package-utils/assert-publish-channel.js --project dist/apps/gauzy-api-server --arch x64 && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --linux --x64 --publish=always --project dist/apps/gauzy-api-server", + "build:gauzy-api-server:linux:release:gh:arm64": "yarn run pack --desktop=server-api --arch=arm64 --platform=linux && cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn run build:gauzy-api-server && node .scripts/electron-package-utils/assert-publish-channel.js --project dist/apps/gauzy-api-server --arch arm64 && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --linux --arm64 --publish=always --project dist/apps/gauzy-api-server", "build:gauzy-api-server:mac": "yarn run build:gauzy-api-server && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --mac --project dist/apps/gauzy-api-server", "build:gauzy-api-server:mac:release": "yarn run build:gauzy-api-server && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --mac --publish=always --project dist/apps/gauzy-api-server", "copy-files-i18n-api-server": "yarn run download:translations --desktop=server-api", @@ -503,13 +504,13 @@ "build:agent:windows": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=12288 yarn run build:agent && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 -c.extraMetadata.author.name=Ever build --windows --project dist/apps/agent", "build:agent:windows:release": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=12288 yarn run build:agent && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 -c.extraMetadata.author.name=Ever build --windows --publish=always --project dist/apps/agent", "build:agent:windows:release:gh": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn run build:agent && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 -c.extraMetadata.author.name=Ever build --windows --publish=always --project dist/apps/agent", - "build:agent:windows:release:gh:x64": "yarn run pack --desktop=agent --arch=x64 --platform=win32 && cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn run build:agent && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 -c.extraMetadata.author.name=Ever build --windows --x64 --publish=always --project dist/apps/agent", - "build:agent:windows:release:gh:arm64": "yarn run pack --desktop=agent --arch=arm64 --platform=win32 && cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn run build:agent && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 -c.extraMetadata.author.name=Ever build --windows --arm64 --publish=always --project dist/apps/agent", + "build:agent:windows:release:gh:x64": "yarn run pack --desktop=agent --arch=x64 --platform=win32 && cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn run build:agent && node .scripts/electron-package-utils/assert-publish-channel.js --project dist/apps/agent --arch x64 && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 -c.extraMetadata.author.name=Ever build --windows --x64 --publish=always --project dist/apps/agent", + "build:agent:windows:release:gh:arm64": "yarn run pack --desktop=agent --arch=arm64 --platform=win32 && cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn run build:agent && node .scripts/electron-package-utils/assert-publish-channel.js --project dist/apps/agent --arch arm64 && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 -c.extraMetadata.author.name=Ever build --windows --arm64 --publish=always --project dist/apps/agent", "build:agent:linux": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=12288 yarn run build:agent && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --linux --project dist/apps/agent", "build:agent:linux:release": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=12288 yarn run build:agent && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --linux --publish=always --project dist/apps/agent", "build:agent:linux:release:gh": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn run build:agent && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --linux --publish=always --project dist/apps/agent", - "build:agent:linux:release:gh:x64": "yarn run pack --desktop=agent --arch=x64 --platform=linux && cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn run build:agent && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --linux --x64 --publish=always --project dist/apps/agent", - "build:agent:linux:release:gh:arm64": "yarn run pack --desktop=agent --arch=arm64 --platform=linux && cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn run build:agent && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --linux --arm64 --publish=always --project dist/apps/agent", + "build:agent:linux:release:gh:x64": "yarn run pack --desktop=agent --arch=x64 --platform=linux && cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn run build:agent && node .scripts/electron-package-utils/assert-publish-channel.js --project dist/apps/agent --arch x64 && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --linux --x64 --publish=always --project dist/apps/agent", + "build:agent:linux:release:gh:arm64": "yarn run pack --desktop=agent --arch=arm64 --platform=linux && cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn run build:agent && node .scripts/electron-package-utils/assert-publish-channel.js --project dist/apps/agent --arch arm64 && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --linux --arm64 --publish=always --project dist/apps/agent", "build:agent:mac": "yarn run build:agent && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --mac --project dist/apps/agent", "build:agent:mac:quick": "yarn run build:agent:mac -c.mac.identity=null", "build:agent:mac:release": "yarn run build:agent && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --mac --publish=always --project dist/apps/agent", @@ -541,13 +542,13 @@ "build:gauzy-mcp-server:linux": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=12288 yarn run build:gauzy-mcp-server && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --linux --project dist/apps/server-mcp", "build:gauzy-mcp-server:linux:release": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=12288 yarn run build:gauzy-mcp-server && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --linux --publish=always --project dist/apps/server-mcp", "build:gauzy-mcp-server:linux:release:gh": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn run build:gauzy-mcp-server && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --linux --publish=always --project dist/apps/server-mcp", - "build:gauzy-mcp-server:linux:release:gh:x64": "yarn run pack --desktop=server-mcp --arch=x64 --platform=linux && cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn run build:gauzy-mcp-server && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --linux --x64 --publish=always --project dist/apps/server-mcp", - "build:gauzy-mcp-server:linux:release:gh:arm64": "yarn run pack --desktop=server-mcp --arch=arm64 --platform=linux && cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn run build:gauzy-mcp-server && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --linux --arm64 --publish=always --project dist/apps/server-mcp", + "build:gauzy-mcp-server:linux:release:gh:x64": "yarn run pack --desktop=server-mcp --arch=x64 --platform=linux && cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn run build:gauzy-mcp-server && node .scripts/electron-package-utils/assert-publish-channel.js --project dist/apps/server-mcp --arch x64 && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --linux --x64 --publish=always --project dist/apps/server-mcp", + "build:gauzy-mcp-server:linux:release:gh:arm64": "yarn run pack --desktop=server-mcp --arch=arm64 --platform=linux && cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn run build:gauzy-mcp-server && node .scripts/electron-package-utils/assert-publish-channel.js --project dist/apps/server-mcp --arch arm64 && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --linux --arm64 --publish=always --project dist/apps/server-mcp", "build:gauzy-mcp-server:windows": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=12288 yarn run build:gauzy-mcp-server && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 -c.extraMetadata.author.name=Ever build --windows --project dist/apps/server-mcp", "build:gauzy-mcp-server:windows:release": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=12288 yarn run build:gauzy-mcp-server && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 -c.extraMetadata.author.name=Ever build --windows --publish=always --project dist/apps/server-mcp", "build:gauzy-mcp-server:windows:release:gh": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn run build:gauzy-mcp-server && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 -c.extraMetadata.author.name=Ever build --windows --publish=always --project dist/apps/server-mcp", - "build:gauzy-mcp-server:windows:release:gh:x64": "yarn run pack --desktop=server-mcp --arch=x64 --platform=win32 && cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn run build:gauzy-mcp-server && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 -c.extraMetadata.author.name=Ever build --windows --x64 --publish=always --project dist/apps/server-mcp", - "build:gauzy-mcp-server:windows:release:gh:arm64": "yarn run pack --desktop=server-mcp --arch=arm64 --platform=win32 && cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn run build:gauzy-mcp-server && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 -c.extraMetadata.author.name=Ever build --windows --arm64 --publish=always --project dist/apps/server-mcp", + "build:gauzy-mcp-server:windows:release:gh:x64": "yarn run pack --desktop=server-mcp --arch=x64 --platform=win32 && cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn run build:gauzy-mcp-server && node .scripts/electron-package-utils/assert-publish-channel.js --project dist/apps/server-mcp --arch x64 && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 -c.extraMetadata.author.name=Ever build --windows --x64 --publish=always --project dist/apps/server-mcp", + "build:gauzy-mcp-server:windows:release:gh:arm64": "yarn run pack --desktop=server-mcp --arch=arm64 --platform=win32 && cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=30000 yarn run build:gauzy-mcp-server && node .scripts/electron-package-utils/assert-publish-channel.js --project dist/apps/server-mcp --arch arm64 && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 -c.extraMetadata.author.name=Ever build --windows --arm64 --publish=always --project dist/apps/server-mcp", "build:gauzy-mcp-server:mac": "yarn run build:gauzy-mcp-server && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --mac --project dist/apps/server-mcp", "build:gauzy-mcp-server:mac:release": "yarn run build:gauzy-mcp-server && npm config set cache .cache && yarn electron-builder -c.electronVersion=38.2.2 build --mac --publish=always --project dist/apps/server-mcp", "copy-files-i18n-mcp-server": "yarn run download:translations --desktop=server-mcp",