termdock 1.4.45 → 1.4.47
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/assets/{abnfDiagram-VRR7QNED-Bt36T7gE.js → abnfDiagram-VRR7QNED-xXEmQsOW.js} +1 -1
- package/dist/client/assets/{arc-DhZtXG4q.js → arc-c3mZlWqm.js} +1 -1
- package/dist/client/assets/{architectureDiagram-ZJ3FMSHR-C4BLot_l.js → architectureDiagram-ZJ3FMSHR-DMbRcwkn.js} +1 -1
- package/dist/client/assets/{blockDiagram-677ZJIJ3-BG8NrPiD.js → blockDiagram-677ZJIJ3-B9lNQSTH.js} +1 -1
- package/dist/client/assets/{c4Diagram-LMCZKHZV-m3lWYsQI.js → c4Diagram-LMCZKHZV-DgZW5rdv.js} +1 -1
- package/dist/client/assets/channel-WVRLx8X3.js +1 -0
- package/dist/client/assets/{chunk-2Q5K7J3B-BiBc5Uv0.js → chunk-2Q5K7J3B-Cb_tv5Wu.js} +1 -1
- package/dist/client/assets/{chunk-32BRIVSS-C1g4c11U.js → chunk-32BRIVSS-xoR592bq.js} +1 -1
- package/dist/client/assets/{chunk-5VM5RSS4-Ctw1x2FG.js → chunk-5VM5RSS4-oDHo1_f6.js} +1 -1
- package/dist/client/assets/{chunk-EX3LRPZG-BdI4v3f4.js → chunk-EX3LRPZG-CsA_QWZT.js} +1 -1
- package/dist/client/assets/{chunk-JWPE2WC7-K8nPht_5.js → chunk-JWPE2WC7-iMhYUaoV.js} +1 -1
- package/dist/client/assets/{chunk-MOJQB5TN-DWsVsFoK.js → chunk-MOJQB5TN-BIPIzHce.js} +1 -1
- package/dist/client/assets/{chunk-RYQCIY6F-0MHmqGNs.js → chunk-RYQCIY6F-COxDBj29.js} +1 -1
- package/dist/client/assets/{chunk-V7JOEXUC-BjQQBzKq.js → chunk-V7JOEXUC-jObcq0_w.js} +1 -1
- package/dist/client/assets/{chunk-VR4S4FIN-Bau1q0xN.js → chunk-VR4S4FIN-Cgq2CHJ_.js} +1 -1
- package/dist/client/assets/{chunk-XXDRQBXY-BIzI5y55.js → chunk-XXDRQBXY-C5rWtvue.js} +1 -1
- package/dist/client/assets/classDiagram-OUVF2IWQ-2HXz2vIZ.js +1 -0
- package/dist/client/assets/classDiagram-v2-EOCWNBFH-2HXz2vIZ.js +1 -0
- package/dist/client/assets/{cose-bilkent-JH36ORCC-C_6nPODG.js → cose-bilkent-JH36ORCC-D4W8Q8zp.js} +1 -1
- package/dist/client/assets/{cynefin-VYW2F7L2-DZfIXs6F.js → cynefin-VYW2F7L2-BqiVn0zY.js} +1 -1
- package/dist/client/assets/{cynefinDiagram-TSTJHNR4-Cwtffn_E.js → cynefinDiagram-TSTJHNR4-eOjES7Uk.js} +1 -1
- package/dist/client/assets/{dagre-VKFMJZFB-n2L4piqF.js → dagre-VKFMJZFB-BT2lSgUu.js} +1 -1
- package/dist/client/assets/{diagram-FQU43EPY-DYc1Xsf9.js → diagram-FQU43EPY-BlEQB0Wa.js} +1 -1
- package/dist/client/assets/{diagram-G47NLZAW-Bty2-g6M.js → diagram-G47NLZAW-CfGX_cA7.js} +1 -1
- package/dist/client/assets/{diagram-NH7WQ7WH-B7NwHUrU.js → diagram-NH7WQ7WH-DTN5IC_4.js} +1 -1
- package/dist/client/assets/{diagram-OA4YK3LP-BB8nlvCx.js → diagram-OA4YK3LP-Cr_X18I_.js} +1 -1
- package/dist/client/assets/{diagram-WEI45ONY-2hoKf8a6.js → diagram-WEI45ONY-DkWVId1b.js} +1 -1
- package/dist/client/assets/{ebnfDiagram-CCIWWBDH-BARVSv3m.js → ebnfDiagram-CCIWWBDH-YakS4L5W.js} +1 -1
- package/dist/client/assets/{erDiagram-Q63AITRT-5jgm5Ksi.js → erDiagram-Q63AITRT-DOrw-auJ.js} +1 -1
- package/dist/client/assets/{flowDiagram-23GEKE2U-BqCA33p5.js → flowDiagram-23GEKE2U-DhpCjDDF.js} +1 -1
- package/dist/client/assets/{ganttDiagram-NO4QXBWP-BL1NGUYm.js → ganttDiagram-NO4QXBWP-BNKEBypV.js} +1 -1
- package/dist/client/assets/{gitGraphDiagram-IHSO6WYX-D9Qw6ov4.js → gitGraphDiagram-IHSO6WYX-yMteZOxr.js} +1 -1
- package/dist/client/assets/{index-BYpFR_L5.js → index-75VE-HQx.js} +79 -79
- package/dist/client/assets/{infoDiagram-FWYZ7A6U-ZrovoSsZ.js → infoDiagram-FWYZ7A6U-C2i_QPyy.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-FXEZZL3T-uFSMTzKn.js → ishikawaDiagram-FXEZZL3T-BQlWO28k.js} +1 -1
- package/dist/client/assets/{journeyDiagram-5HDEW3XC-DNXNzmef.js → journeyDiagram-5HDEW3XC-B9uP3MoN.js} +1 -1
- package/dist/client/assets/{kanban-definition-HUTT4EX6-Db2NpkWT.js → kanban-definition-HUTT4EX6-rlfrqFLx.js} +1 -1
- package/dist/client/assets/{linear-DjF6fII5.js → linear-DfWrlpf9.js} +1 -1
- package/dist/client/assets/{mermaid.core-BXI9ENYY.js → mermaid.core-CVZF0dKx.js} +4 -4
- package/dist/client/assets/{mindmap-definition-LN4V7U3C-CjcF3QgK.js → mindmap-definition-LN4V7U3C-DG8LHYTz.js} +1 -1
- package/dist/client/assets/{pegDiagram-2B236MQR-BckzTuEj.js → pegDiagram-2B236MQR-C13qrniu.js} +1 -1
- package/dist/client/assets/{pieDiagram-ENE6RG2P-Ch2Ty0Y2.js → pieDiagram-ENE6RG2P-BUz782ot.js} +1 -1
- package/dist/client/assets/{quadrantDiagram-ABIIQ3AL-DvXeQj4a.js → quadrantDiagram-ABIIQ3AL-CGd-XJg3.js} +1 -1
- package/dist/client/assets/{railroadDiagram-RFXS5EU6-BUurE4S_.js → railroadDiagram-RFXS5EU6-DbfdIi8k.js} +1 -1
- package/dist/client/assets/{requirementDiagram-TGXJPOKE-CfnNu5HR.js → requirementDiagram-TGXJPOKE-CLssmPfP.js} +1 -1
- package/dist/client/assets/{sankeyDiagram-HTMAVEWB-BfpeK6jA.js → sankeyDiagram-HTMAVEWB-DHSBB69r.js} +1 -1
- package/dist/client/assets/{sequenceDiagram-DBY2YBRQ-CmkcMlBD.js → sequenceDiagram-DBY2YBRQ-BrVCviNJ.js} +1 -1
- package/dist/client/assets/{sizeCapture-X5ZJPWSS-BvnnE9Ev.js → sizeCapture-X5ZJPWSS-KmVuoFrX.js} +1 -1
- package/dist/client/assets/{stateDiagram-2N3HPSRC-D-gs0yW-.js → stateDiagram-2N3HPSRC-ChRW_w5J.js} +1 -1
- package/dist/client/assets/stateDiagram-v2-6OUMAXLB-Dnlauzzq.js +1 -0
- package/dist/client/assets/{swimlanes-5IMT3BWC-BW65nQch.js → swimlanes-5IMT3BWC-DOOxTOx2.js} +2 -2
- package/dist/client/assets/swimlanesDiagram-G3AALYLV-BVOOD7ia.js +8 -0
- package/dist/client/assets/{timeline-definition-FHXFAJF6-Mj3zCwTc.js → timeline-definition-FHXFAJF6-CgmYsE8y.js} +1 -1
- package/dist/client/assets/{vennDiagram-L72KCM5P-gXnoVb66.js → vennDiagram-L72KCM5P-CzlHRf82.js} +1 -1
- package/dist/client/assets/{wardleyDiagram-EHGQE667-Cgbh1_F7.js → wardleyDiagram-EHGQE667-DboWJKy5.js} +1 -1
- package/dist/client/assets/{xychartDiagram-FW5EYKEG-DQW7oknN.js → xychartDiagram-FW5EYKEG-D9hSM6kK.js} +1 -1
- package/dist/client/index.html +1 -1
- package/dist/client/sw.js +1 -1
- package/dist/server/entry.js +31 -12
- package/dist/server/utils/runtimeClient.js +41 -0
- package/package.json +5 -2
- package/runtime-manifest.json +12 -0
- package/scripts/classify-release.mjs +88 -0
- package/scripts/generate-runtime-manifest.mjs +77 -0
- package/scripts/prepare-desktop-runtime.mjs +27 -3
- package/.desktop-dist/main.js +0 -800
- package/dist/client/assets/channel-Ck9tD_4_.js +0 -1
- package/dist/client/assets/classDiagram-OUVF2IWQ-CtEpUyds.js +0 -1
- package/dist/client/assets/classDiagram-v2-EOCWNBFH-CtEpUyds.js +0 -1
- package/dist/client/assets/stateDiagram-v2-6OUMAXLB-gXYMxyju.js +0 -1
- package/dist/client/assets/swimlanesDiagram-G3AALYLV-DmhG9XuP.js +0 -8
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { execFileSync } from 'node:child_process';
|
|
2
|
+
import fs from 'node:fs';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { fileURLToPath } from 'node:url';
|
|
5
|
+
|
|
6
|
+
const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..');
|
|
7
|
+
|
|
8
|
+
function git(args) {
|
|
9
|
+
return execFileSync('git', args, { cwd: root, encoding: 'utf8' }).trim();
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
function stable(value) {
|
|
13
|
+
if (!value || typeof value !== 'object' || Array.isArray(value)) return value;
|
|
14
|
+
return Object.fromEntries(Object.keys(value).sort().map((key) => [key, stable(value[key])]));
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function latestDesktopTag() {
|
|
18
|
+
return git(['tag', '--merged', 'HEAD', '--list', 'v*', '--sort=-version:refname'])
|
|
19
|
+
.split('\n')
|
|
20
|
+
.find(Boolean);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const requestedBase = process.argv.slice(2).find((argument) => !argument.startsWith('--'));
|
|
24
|
+
const base = requestedBase || latestDesktopTag();
|
|
25
|
+
if (!base) {
|
|
26
|
+
throw new Error('No desktop release tag found. Fetch tags or pass a base ref explicitly.');
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
const changedFiles = git(['diff', '--name-only', base, '--'])
|
|
30
|
+
.split('\n')
|
|
31
|
+
.map((file) => file.trim())
|
|
32
|
+
.filter(Boolean);
|
|
33
|
+
const currentPackage = JSON.parse(fs.readFileSync(path.join(root, 'package.json'), 'utf8'));
|
|
34
|
+
const basePackage = JSON.parse(git(['show', `${base}:package.json`]));
|
|
35
|
+
const dependencyChanged = JSON.stringify(stable({
|
|
36
|
+
dependencies: currentPackage.dependencies ?? {},
|
|
37
|
+
engines: currentPackage.engines ?? {},
|
|
38
|
+
})) !== JSON.stringify(stable({
|
|
39
|
+
dependencies: basePackage.dependencies ?? {},
|
|
40
|
+
engines: basePackage.engines ?? {},
|
|
41
|
+
}));
|
|
42
|
+
|
|
43
|
+
const desktopPatterns = [
|
|
44
|
+
/^desktop\//,
|
|
45
|
+
/^forge\.config\.cjs$/,
|
|
46
|
+
/^tsconfig\.desktop\.json$/,
|
|
47
|
+
/^scripts\/prepare-desktop-runtime\.mjs$/,
|
|
48
|
+
/^scripts\/prepare-desktop-tokens\.mjs$/,
|
|
49
|
+
/^\.github\/workflows\/release-macos\.yml$/,
|
|
50
|
+
];
|
|
51
|
+
const runtimePatterns = [
|
|
52
|
+
/^src\//,
|
|
53
|
+
/^public\//,
|
|
54
|
+
/^index\.html$/,
|
|
55
|
+
/^vite\.config\.ts$/,
|
|
56
|
+
/^tailwind\.config\.js$/,
|
|
57
|
+
/^postcss\.config\.js$/,
|
|
58
|
+
/^package(?:-lock)?\.json$/,
|
|
59
|
+
/^scripts\/generate-runtime-manifest\.mjs$/,
|
|
60
|
+
];
|
|
61
|
+
const testFile = /(?:^|\/)\w[^/]*\.test\.[cm]?[jt]sx?$/;
|
|
62
|
+
const noReleaseFile = /^(?:docs\/|README|LICENSE|AGENTS|\.gitignore$|scripts\/classify-release\.mjs$)/;
|
|
63
|
+
const desktopFiles = changedFiles.filter((file) =>
|
|
64
|
+
!testFile.test(file) && desktopPatterns.some((pattern) => pattern.test(file)));
|
|
65
|
+
const runtimeFiles = changedFiles.filter((file) =>
|
|
66
|
+
!testFile.test(file) && runtimePatterns.some((pattern) => pattern.test(file)));
|
|
67
|
+
const codeFiles = changedFiles.filter((file) => !noReleaseFile.test(file) && !testFile.test(file));
|
|
68
|
+
const classified = new Set([...desktopFiles, ...runtimeFiles]);
|
|
69
|
+
const unknownCodeFiles = codeFiles.filter((file) => !classified.has(file));
|
|
70
|
+
const requiresDesktop = dependencyChanged || desktopFiles.length > 0 || unknownCodeFiles.length > 0;
|
|
71
|
+
const requiresRuntime = runtimeFiles.length > 0 || requiresDesktop;
|
|
72
|
+
const result = {
|
|
73
|
+
base,
|
|
74
|
+
requiresRuntime,
|
|
75
|
+
requiresDesktop,
|
|
76
|
+
dependencyChanged,
|
|
77
|
+
desktopFiles,
|
|
78
|
+
runtimeFiles,
|
|
79
|
+
unknownCodeFiles,
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
console.log(JSON.stringify(result, null, 2));
|
|
83
|
+
if (process.argv.includes('--github-output') && process.env.GITHUB_OUTPUT) {
|
|
84
|
+
fs.appendFileSync(
|
|
85
|
+
process.env.GITHUB_OUTPUT,
|
|
86
|
+
`requires_runtime=${requiresRuntime}\nrequires_desktop=${requiresDesktop}\n`,
|
|
87
|
+
);
|
|
88
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import crypto from 'node:crypto';
|
|
2
|
+
import fs from 'node:fs';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { fileURLToPath } from 'node:url';
|
|
5
|
+
|
|
6
|
+
const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..');
|
|
7
|
+
const packageJson = JSON.parse(fs.readFileSync(path.join(root, 'package.json'), 'utf8'));
|
|
8
|
+
const packageLock = JSON.parse(fs.readFileSync(path.join(root, 'package-lock.json'), 'utf8'));
|
|
9
|
+
const compatibility = JSON.parse(
|
|
10
|
+
fs.readFileSync(path.join(root, 'desktop', 'runtime-compatibility.json'), 'utf8'),
|
|
11
|
+
);
|
|
12
|
+
|
|
13
|
+
function stableObject(value) {
|
|
14
|
+
if (Array.isArray(value)) return value.map(stableObject);
|
|
15
|
+
if (!value || typeof value !== 'object') return value;
|
|
16
|
+
return Object.fromEntries(
|
|
17
|
+
Object.keys(value).sort().map((key) => [key, stableObject(value[key])]),
|
|
18
|
+
);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function hashDirectory(directory) {
|
|
22
|
+
const hash = crypto.createHash('sha256');
|
|
23
|
+
const visit = (current, relative = '') => {
|
|
24
|
+
for (const entry of fs.readdirSync(current, { withFileTypes: true })
|
|
25
|
+
.sort((left, right) => left.name.localeCompare(right.name))) {
|
|
26
|
+
const entryPath = path.join(current, entry.name);
|
|
27
|
+
const relativePath = path.join(relative, entry.name).split(path.sep).join('/');
|
|
28
|
+
if (entry.isDirectory()) visit(entryPath, relativePath);
|
|
29
|
+
else if (entry.isFile()) {
|
|
30
|
+
hash.update(relativePath);
|
|
31
|
+
hash.update('\0');
|
|
32
|
+
hash.update(fs.readFileSync(entryPath));
|
|
33
|
+
hash.update('\0');
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
visit(directory);
|
|
38
|
+
return `sha256-${hash.digest('base64')}`;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const productionPackages = Object.fromEntries(
|
|
42
|
+
Object.entries(packageLock.packages ?? {})
|
|
43
|
+
.filter(([packagePath, entry]) => packagePath && entry?.dev !== true)
|
|
44
|
+
.sort(([left], [right]) => left.localeCompare(right))
|
|
45
|
+
.map(([packagePath, entry]) => [packagePath, {
|
|
46
|
+
version: entry.version ?? null,
|
|
47
|
+
integrity: entry.integrity ?? null,
|
|
48
|
+
optional: entry.optional === true,
|
|
49
|
+
}]),
|
|
50
|
+
);
|
|
51
|
+
const dependencyInput = stableObject({
|
|
52
|
+
dependencies: packageJson.dependencies ?? {},
|
|
53
|
+
packages: productionPackages,
|
|
54
|
+
});
|
|
55
|
+
const dependencyHash = `sha256-${crypto
|
|
56
|
+
.createHash('sha256')
|
|
57
|
+
.update(JSON.stringify(dependencyInput))
|
|
58
|
+
.digest('base64')}`;
|
|
59
|
+
|
|
60
|
+
const manifest = {
|
|
61
|
+
schemaVersion: compatibility.schemaVersion,
|
|
62
|
+
packageName: packageJson.name,
|
|
63
|
+
version: packageJson.version,
|
|
64
|
+
runtimeProtocolVersion: compatibility.runtimeProtocolVersion,
|
|
65
|
+
minimumDesktopVersion: compatibility.minimumDesktopVersion,
|
|
66
|
+
nodeMajor: compatibility.nodeMajor,
|
|
67
|
+
dependencyHash,
|
|
68
|
+
serverBundleHash: hashDirectory(path.join(root, 'dist', 'server')),
|
|
69
|
+
entrypoint: 'dist/server/cli.js',
|
|
70
|
+
clientEntrypoint: 'dist/client/index.html',
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
fs.writeFileSync(
|
|
74
|
+
path.join(root, 'runtime-manifest.json'),
|
|
75
|
+
`${JSON.stringify(manifest, null, 2)}\n`,
|
|
76
|
+
);
|
|
77
|
+
console.log(`[runtime-manifest] ${manifest.version} ${manifest.dependencyHash}`);
|
|
@@ -14,6 +14,9 @@ const toolchainDir = path.join(stage, 'toolchain');
|
|
|
14
14
|
const toolchainBinDir = path.join(toolchainDir, 'bin');
|
|
15
15
|
const toolchainLibDir = path.join(toolchainDir, 'lib');
|
|
16
16
|
const nodeDownloadDir = path.join(stage, 'node-download');
|
|
17
|
+
const nodeArchiveCacheDir = process.env.TERMDOCK_NODE_ARCHIVE_CACHE
|
|
18
|
+
? path.resolve(process.env.TERMDOCK_NODE_ARCHIVE_CACHE)
|
|
19
|
+
: path.join(os.homedir(), '.cache', 'termdock', 'node-archives');
|
|
17
20
|
const desktopBuildNodeMajor = 22;
|
|
18
21
|
|
|
19
22
|
const buildNodeMajor = Number.parseInt(process.versions.node.split('.')[0], 10);
|
|
@@ -126,7 +129,19 @@ const nodeArchiveName = `node-${process.version}-${nodePlatform}-${nodeArch}.${n
|
|
|
126
129
|
const nodeArchiveUrl = `https://nodejs.org/dist/${process.version}/${nodeArchiveName}`;
|
|
127
130
|
fs.mkdirSync(nodeDownloadDir, { recursive: true });
|
|
128
131
|
const nodeArchivePath = path.join(nodeDownloadDir, nodeArchiveName);
|
|
129
|
-
|
|
132
|
+
fs.mkdirSync(nodeArchiveCacheDir, { recursive: true });
|
|
133
|
+
const cachedNodeArchivePath = path.join(nodeArchiveCacheDir, nodeArchiveName);
|
|
134
|
+
if (!fs.existsSync(cachedNodeArchivePath)) {
|
|
135
|
+
const temporaryArchivePath = `${cachedNodeArchivePath}.${process.pid}.tmp`;
|
|
136
|
+
try {
|
|
137
|
+
run('/usr/bin/curl', ['-fL', '--retry', '4', '--output', temporaryArchivePath, nodeArchiveUrl]);
|
|
138
|
+
run('/usr/bin/tar', ['-tzf', temporaryArchivePath], { stdio: 'ignore' });
|
|
139
|
+
fs.renameSync(temporaryArchivePath, cachedNodeArchivePath);
|
|
140
|
+
} finally {
|
|
141
|
+
fs.rmSync(temporaryArchivePath, { force: true });
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
fs.copyFileSync(cachedNodeArchivePath, nodeArchivePath);
|
|
130
145
|
if (nodeArchiveExt !== 'tar.gz') {
|
|
131
146
|
throw new Error(`Desktop runtime preparation is not implemented for ${process.platform}`);
|
|
132
147
|
}
|
|
@@ -140,18 +155,26 @@ const extractedNode = path.join(
|
|
|
140
155
|
copyMacBinary(extractedNode, runtimeNode);
|
|
141
156
|
|
|
142
157
|
const rootPackage = JSON.parse(fs.readFileSync(path.join(root, 'package.json'), 'utf8'));
|
|
158
|
+
const runtimeManifest = JSON.parse(
|
|
159
|
+
fs.readFileSync(path.join(root, 'runtime-manifest.json'), 'utf8'),
|
|
160
|
+
);
|
|
143
161
|
const runtimePackage = {
|
|
144
|
-
name:
|
|
162
|
+
name: rootPackage.name,
|
|
145
163
|
version: rootPackage.version,
|
|
146
164
|
private: true,
|
|
147
165
|
type: 'module',
|
|
148
166
|
dependencies: rootPackage.dependencies,
|
|
149
167
|
};
|
|
150
168
|
fs.writeFileSync(path.join(serverDir, 'package.json'), `${JSON.stringify(runtimePackage, null, 2)}\n`);
|
|
169
|
+
fs.copyFileSync(path.join(root, 'package-lock.json'), path.join(serverDir, 'package-lock.json'));
|
|
170
|
+
fs.copyFileSync(
|
|
171
|
+
path.join(root, 'runtime-manifest.json'),
|
|
172
|
+
path.join(serverDir, 'runtime-manifest.json'),
|
|
173
|
+
);
|
|
151
174
|
fs.cpSync(path.join(root, 'dist'), path.join(serverDir, 'dist'), { recursive: true });
|
|
152
175
|
|
|
153
176
|
run(process.platform === 'win32' ? 'npm.cmd' : 'npm', [
|
|
154
|
-
'
|
|
177
|
+
'ci',
|
|
155
178
|
'--omit=dev',
|
|
156
179
|
'--no-audit',
|
|
157
180
|
'--no-fund',
|
|
@@ -195,6 +218,7 @@ const manifest = {
|
|
|
195
218
|
nodeVersion: process.version,
|
|
196
219
|
createdAt: new Date().toISOString(),
|
|
197
220
|
tools: fs.readdirSync(toolchainBinDir).sort(),
|
|
221
|
+
runtimeCompatibility: runtimeManifest,
|
|
198
222
|
};
|
|
199
223
|
fs.writeFileSync(path.join(stage, 'manifest.json'), `${JSON.stringify(manifest, null, 2)}\n`);
|
|
200
224
|
console.log(`[desktop-runtime] ready at ${stage}`);
|