@gtkx/cli 2.0.0-beta.2 → 2.0.0-beta.4
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/cli.d.ts +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +12 -2
- package/dist/cli.js.map +1 -1
- package/dist/codegen/config-dependencies.d.ts +3 -0
- package/dist/codegen/config-dependencies.d.ts.map +1 -0
- package/dist/codegen/config-dependencies.js +355 -0
- package/dist/codegen/config-dependencies.js.map +1 -0
- package/dist/codegen/reference.d.ts.map +1 -1
- package/dist/codegen/reference.js +1 -0
- package/dist/codegen/reference.js.map +1 -1
- package/dist/codegen/run-codegen.d.ts +3 -2
- package/dist/codegen/run-codegen.d.ts.map +1 -1
- package/dist/codegen/run-codegen.js +33 -14
- package/dist/codegen/run-codegen.js.map +1 -1
- package/dist/codegen/store-resolver.d.ts +2 -0
- package/dist/codegen/store-resolver.d.ts.map +1 -1
- package/dist/codegen/store-resolver.js +6 -3
- package/dist/codegen/store-resolver.js.map +1 -1
- package/dist/commands/cleanup.d.ts +9 -0
- package/dist/commands/cleanup.d.ts.map +1 -0
- package/dist/commands/cleanup.js +31 -0
- package/dist/commands/cleanup.js.map +1 -0
- package/dist/commands/dev.d.ts +1 -0
- package/dist/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +13 -4
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/docs.d.ts.map +1 -1
- package/dist/commands/docs.js +1 -0
- package/dist/commands/docs.js.map +1 -1
- package/dist/deploy/freedesktop/validate.d.ts.map +1 -1
- package/dist/deploy/freedesktop/validate.js +11 -4
- package/dist/deploy/freedesktop/validate.js.map +1 -1
- package/dist/deploy/nfpm/config.d.ts +3 -2
- package/dist/deploy/nfpm/config.d.ts.map +1 -1
- package/dist/deploy/nfpm/config.js +3 -3
- package/dist/deploy/nfpm/config.js.map +1 -1
- package/dist/deploy/node-runtime/index.d.ts.map +1 -1
- package/dist/deploy/node-runtime/index.js +2 -1
- package/dist/deploy/node-runtime/index.js.map +1 -1
- package/dist/deploy/payload/stage.d.ts.map +1 -1
- package/dist/deploy/payload/stage.js +24 -3
- package/dist/deploy/payload/stage.js.map +1 -1
- package/dist/deploy/settings/extra-files.d.ts.map +1 -1
- package/dist/deploy/settings/extra-files.js +4 -3
- package/dist/deploy/settings/extra-files.js.map +1 -1
- package/dist/deploy/targets/nfpm-target.d.ts.map +1 -1
- package/dist/deploy/targets/nfpm-target.js +12 -7
- package/dist/deploy/targets/nfpm-target.js.map +1 -1
- package/dist/dev/entry-env.d.ts +2 -1
- package/dist/dev/entry-env.d.ts.map +1 -1
- package/dist/dev/entry-env.js +2 -1
- package/dist/dev/entry-env.js.map +1 -1
- package/dist/dev/runner-deps.d.ts +1 -1
- package/dist/dev/runner-deps.d.ts.map +1 -1
- package/dist/dev/runner-deps.js +3 -3
- package/dist/dev/runner-deps.js.map +1 -1
- package/dist/dev/runner-main.d.ts.map +1 -1
- package/dist/dev/runner-main.js +8 -3
- package/dist/dev/runner-main.js.map +1 -1
- package/dist/dev/supervisor.d.ts +3 -1
- package/dist/dev/supervisor.d.ts.map +1 -1
- package/dist/dev/supervisor.js +124 -27
- package/dist/dev/supervisor.js.map +1 -1
- package/dist/i18n/catalogs.d.ts.map +1 -1
- package/dist/i18n/catalogs.js +1 -0
- package/dist/i18n/catalogs.js.map +1 -1
- package/dist/i18n/source-messages.d.ts +3 -1
- package/dist/i18n/source-messages.d.ts.map +1 -1
- package/dist/i18n/source-messages.js +167 -37
- package/dist/i18n/source-messages.js.map +1 -1
- package/dist/internal/build-output.d.ts.map +1 -1
- package/dist/internal/build-output.js +53 -6
- package/dist/internal/build-output.js.map +1 -1
- package/dist/internal/docs-elements.d.ts +1 -0
- package/dist/internal/docs-elements.d.ts.map +1 -1
- package/dist/internal/docs-elements.js +5 -4
- package/dist/internal/docs-elements.js.map +1 -1
- package/dist/internal/errors.d.ts +2 -1
- package/dist/internal/errors.d.ts.map +1 -1
- package/dist/internal/errors.js +1 -1
- package/dist/internal/errors.js.map +1 -1
- package/dist/internal/parent-process.d.ts +12 -0
- package/dist/internal/parent-process.d.ts.map +1 -0
- package/dist/internal/parent-process.js +74 -0
- package/dist/internal/parent-process.js.map +1 -0
- package/dist/internal/prepare-project.d.ts +1 -0
- package/dist/internal/prepare-project.d.ts.map +1 -1
- package/dist/internal/prepare-project.js +8 -2
- package/dist/internal/prepare-project.js.map +1 -1
- package/dist/vite-plugins/ensure-store.d.ts +1 -1
- package/dist/vite-plugins/ensure-store.d.ts.map +1 -1
- package/dist/vite-plugins/ensure-store.js +2 -2
- package/dist/vite-plugins/ensure-store.js.map +1 -1
- package/dist/vite-plugins/i18n.d.ts +1 -1
- package/dist/vite-plugins/i18n.d.ts.map +1 -1
- package/dist/vite-plugins/i18n.js +24 -11
- package/dist/vite-plugins/i18n.js.map +1 -1
- package/dist/vite-plugins/index.d.ts.map +1 -1
- package/dist/vite-plugins/index.js +3 -1
- package/dist/vite-plugins/index.js.map +1 -1
- package/dist/vite-plugins/native.d.ts.map +1 -1
- package/dist/vite-plugins/native.js +0 -4
- package/dist/vite-plugins/native.js.map +1 -1
- package/dist/vite-plugins/settings-worker-env.d.ts +1 -1
- package/dist/vite-plugins/settings-worker-env.d.ts.map +1 -1
- package/dist/vite-plugins/settings-worker-env.js +2 -2
- package/dist/vite-plugins/settings-worker-env.js.map +1 -1
- package/dist/vitest-plugin.d.ts +2 -1
- package/dist/vitest-plugin.d.ts.map +1 -1
- package/dist/vitest-plugin.js +6 -6
- package/dist/vitest-plugin.js.map +1 -1
- package/package.json +12 -9
- package/src/cli.ts +12 -2
- package/src/codegen/config-dependencies.ts +470 -0
- package/src/codegen/reference.ts +1 -0
- package/src/codegen/run-codegen.ts +39 -17
- package/src/codegen/store-resolver.ts +8 -3
- package/src/commands/cleanup.ts +36 -0
- package/src/commands/dev.ts +26 -4
- package/src/commands/docs.ts +1 -0
- package/src/deploy/freedesktop/validate.ts +13 -4
- package/src/deploy/nfpm/config.ts +9 -3
- package/src/deploy/node-runtime/index.ts +2 -1
- package/src/deploy/payload/stage.ts +42 -3
- package/src/deploy/settings/extra-files.ts +5 -3
- package/src/deploy/targets/nfpm-target.ts +13 -6
- package/src/dev/entry-env.ts +2 -1
- package/src/dev/runner-deps.ts +3 -3
- package/src/dev/runner-main.ts +10 -3
- package/src/dev/supervisor.ts +164 -30
- package/src/i18n/catalogs.ts +1 -0
- package/src/i18n/source-messages.ts +240 -41
- package/src/internal/build-output.ts +79 -7
- package/src/internal/docs-elements.ts +10 -4
- package/src/internal/errors.ts +1 -1
- package/src/internal/parent-process.ts +110 -0
- package/src/internal/prepare-project.ts +9 -3
- package/src/vite-plugins/ensure-store.ts +2 -2
- package/src/vite-plugins/i18n.ts +30 -14
- package/src/vite-plugins/index.ts +8 -1
- package/src/vite-plugins/native.ts +0 -5
- package/src/vite-plugins/settings-worker-env.ts +2 -2
- package/src/vitest-plugin.ts +6 -6
package/src/commands/dev.ts
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
|
+
import { armParentDeath } from "@gtkx/native/internal";
|
|
2
|
+
import { reapStaleHeadlessDisplays } from "@gtkx/vitest/headless";
|
|
1
3
|
import { defineCommand } from "citty";
|
|
2
4
|
import { resolveConfigWatch } from "../codegen/run-codegen.js";
|
|
3
5
|
import { startHeadlessDevDisplay } from "../dev/headless.js";
|
|
4
6
|
import { type DevWatch, runDevSupervisor } from "../dev/supervisor.js";
|
|
5
7
|
import { splitApplicationArgs } from "../internal/application-args.js";
|
|
6
|
-
import { entryArg } from "../internal/entry-arg.js";
|
|
8
|
+
import { configArg, entryArg } from "../internal/entry-arg.js";
|
|
9
|
+
import { getInitialProcessGroupOwner, initialParentId } from "../internal/parent-process.js";
|
|
7
10
|
import { prepareProject } from "../internal/prepare-project.js";
|
|
8
11
|
|
|
9
12
|
const DEV_MODE = "development";
|
|
@@ -15,6 +18,7 @@ const dev = defineCommand({
|
|
|
15
18
|
},
|
|
16
19
|
args: {
|
|
17
20
|
...entryArg,
|
|
21
|
+
...configArg,
|
|
18
22
|
headless: {
|
|
19
23
|
type: "boolean",
|
|
20
24
|
description: "Run on an isolated headless Wayland display",
|
|
@@ -25,17 +29,35 @@ const dev = defineCommand({
|
|
|
25
29
|
},
|
|
26
30
|
},
|
|
27
31
|
async run({ args }) {
|
|
32
|
+
reapStaleHeadlessDisplays();
|
|
33
|
+
const initialProcessGroupOwner = getInitialProcessGroupOwner();
|
|
34
|
+
|
|
35
|
+
if (
|
|
36
|
+
!armParentDeath(
|
|
37
|
+
initialParentId,
|
|
38
|
+
initialProcessGroupOwner?.pid,
|
|
39
|
+
initialProcessGroupOwner?.startTime,
|
|
40
|
+
)
|
|
41
|
+
) {
|
|
42
|
+
throw new Error("The process that launched gtkx dev exited during startup");
|
|
43
|
+
}
|
|
44
|
+
|
|
28
45
|
if (args.size !== undefined && !args.headless) {
|
|
29
46
|
throw new Error("--size requires --headless");
|
|
30
47
|
}
|
|
31
48
|
|
|
32
|
-
const { cwd, entry: entryPath } = await prepareProject(args, DEV_MODE);
|
|
33
|
-
const watch: DevWatch | undefined = await resolveConfigWatch(
|
|
49
|
+
const { cwd, entry: entryPath, configFile, configDependencies } = await prepareProject(args, DEV_MODE);
|
|
50
|
+
const watch: DevWatch | undefined = await resolveConfigWatch(
|
|
51
|
+
cwd,
|
|
52
|
+
DEV_MODE,
|
|
53
|
+
configFile,
|
|
54
|
+
configDependencies,
|
|
55
|
+
);
|
|
34
56
|
const { applicationArgs } = splitApplicationArgs(process.argv.slice(2));
|
|
35
57
|
const stopHeadless = args.headless ? await startHeadlessDevDisplay(args.size) : undefined;
|
|
36
58
|
|
|
37
59
|
try {
|
|
38
|
-
await runDevSupervisor({ entryPath, cwd, args: applicationArgs, watch });
|
|
60
|
+
await runDevSupervisor({ entryPath, cwd, configFile, args: applicationArgs, watch });
|
|
39
61
|
} finally {
|
|
40
62
|
stopHeadless?.();
|
|
41
63
|
}
|
package/src/commands/docs.ts
CHANGED
|
@@ -68,6 +68,7 @@ const docs = defineCommand({
|
|
|
68
68
|
outDir,
|
|
69
69
|
basePath: args["base-path"],
|
|
70
70
|
props: builtin.props,
|
|
71
|
+
acceptedChildTypes: builtin.acceptedChildTypes,
|
|
71
72
|
omittedProps: mergeOmittedProps(builtin.omittedProps, resolveOmittedProps(config.elements)),
|
|
72
73
|
isForced: args.force,
|
|
73
74
|
});
|
|
@@ -12,6 +12,7 @@ type MetainfoResult = {
|
|
|
12
12
|
status: number;
|
|
13
13
|
errors: string[];
|
|
14
14
|
warnings: string[];
|
|
15
|
+
rules: string[];
|
|
15
16
|
areWarningsFatal: boolean;
|
|
16
17
|
};
|
|
17
18
|
|
|
@@ -25,6 +26,7 @@ const DIAGNOSTIC = /^(?<severity>[EIPW]): \S+ (?<rule>[\w-]+)/;
|
|
|
25
26
|
const ERROR_SEVERITY = "E";
|
|
26
27
|
const WARNING_SEVERITY = "W";
|
|
27
28
|
const INFO_SEVERITY = "I";
|
|
29
|
+
const FATAL_WARNING_RULES: Set<string> = new Set(["unknown-tag"]);
|
|
28
30
|
|
|
29
31
|
const REMEDY_FOR_RULE: Record<string, string> = {
|
|
30
32
|
"component-summary-missing": "set `deploy.summary`",
|
|
@@ -33,6 +35,7 @@ const REMEDY_FOR_RULE: Record<string, string> = {
|
|
|
33
35
|
"metainfo-legacy-path": "this file is generated; report it as a gtkx bug",
|
|
34
36
|
"summary-has-dot-suffix": "drop the trailing period from `deploy.summary`",
|
|
35
37
|
"summary-too-long": "shorten `deploy.summary`",
|
|
38
|
+
"unknown-tag": "remove the unsupported `deploy.metainfoExtra` element or use a `<custom>` value",
|
|
36
39
|
"url-homepage-missing": "set `deploy.homepage`, or `homepage` in package.json",
|
|
37
40
|
};
|
|
38
41
|
|
|
@@ -64,11 +67,15 @@ const remedyLines = (rules: string[]): string[] => {
|
|
|
64
67
|
const invalid = (subject: string, output: string, rules: string[]): Error =>
|
|
65
68
|
new Error([`${subject} is not valid:`, output.length > 0 ? output : "no output", ...remedyLines(rules)].join("\n"));
|
|
66
69
|
|
|
67
|
-
const isFatalResult = ({ status, errors, warnings, areWarningsFatal }: MetainfoResult): boolean => {
|
|
70
|
+
const isFatalResult = ({ status, errors, warnings, rules, areWarningsFatal }: MetainfoResult): boolean => {
|
|
68
71
|
if (errors.length > 0) {
|
|
69
72
|
return true;
|
|
70
73
|
}
|
|
71
74
|
|
|
75
|
+
if (rules.some((rule) => FATAL_WARNING_RULES.has(rule))) {
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
|
|
72
79
|
if (areWarningsFatal && warnings.length > 0) {
|
|
73
80
|
return true;
|
|
74
81
|
}
|
|
@@ -78,7 +85,7 @@ const isFatalResult = ({ status, errors, warnings, areWarningsFatal }: MetainfoR
|
|
|
78
85
|
|
|
79
86
|
const assertNotFatal = (result: MetainfoResult): void => {
|
|
80
87
|
if (isFatalResult(result)) {
|
|
81
|
-
throw invalid(result.subject, result.output,
|
|
88
|
+
throw invalid(result.subject, result.output, result.rules);
|
|
82
89
|
}
|
|
83
90
|
};
|
|
84
91
|
|
|
@@ -117,8 +124,10 @@ const validateMetainfo = (path: string, areWarningsFatal: boolean): void => {
|
|
|
117
124
|
|
|
118
125
|
const errors = rulesIn(output, [ERROR_SEVERITY]);
|
|
119
126
|
const warnings = rulesIn(output, [WARNING_SEVERITY]);
|
|
120
|
-
|
|
121
|
-
|
|
127
|
+
const infos = rulesIn(output, [INFO_SEVERITY]);
|
|
128
|
+
const rules = [...errors, ...warnings, ...infos];
|
|
129
|
+
assertNotFatal({ subject, output, status, errors, warnings, rules, areWarningsFatal });
|
|
130
|
+
reportDiagnostics(subject, [...warnings, ...infos]);
|
|
122
131
|
};
|
|
123
132
|
|
|
124
133
|
export { validateDesktopEntry, validateMetainfo };
|
|
@@ -114,6 +114,9 @@ const stagedFilesFor = (payload: DeployPayload, packager: NfpmPackager): StagedF
|
|
|
114
114
|
...payload.overlays[packager],
|
|
115
115
|
];
|
|
116
116
|
|
|
117
|
+
const glibcMinimumForPackage = (payload: DeployPayload, packager: NfpmPackager): string | null =>
|
|
118
|
+
glibcMinimumForFiles(stagedFilesFor(payload, packager).map((file) => file.abs));
|
|
119
|
+
|
|
117
120
|
const packagerSettings = (settings: DeploySettings, packager: NfpmPackager): NfpmConfig =>
|
|
118
121
|
packager === "rpm" ? rpmSettings(settings) : debSettings(settings);
|
|
119
122
|
|
|
@@ -123,11 +126,14 @@ const releaseFor = (settings: DeploySettings, packager: NfpmPackager): string =>
|
|
|
123
126
|
const descriptionFor = (settings: DeploySettings, packager: NfpmPackager): string =>
|
|
124
127
|
packager === "rpm" ? rpmDescription(settings) : debDescription(settings);
|
|
125
128
|
|
|
126
|
-
const renderNfpmConfig = (
|
|
129
|
+
const renderNfpmConfig = (
|
|
130
|
+
payload: DeployPayload,
|
|
131
|
+
packager: NfpmPackager,
|
|
132
|
+
glibcMinimum: string | null,
|
|
133
|
+
): NfpmConfig => {
|
|
127
134
|
const settings = payload.settings;
|
|
128
135
|
const isRpm = packager === "rpm";
|
|
129
136
|
const staged = stagedFilesFor(payload, packager);
|
|
130
|
-
const glibcMinimum = glibcMinimumForFiles(staged.map((file) => file.abs));
|
|
131
137
|
const depends = resolveDepends(settings, glibcMinimum);
|
|
132
138
|
|
|
133
139
|
return {
|
|
@@ -153,4 +159,4 @@ const renderNfpmConfig = (payload: DeployPayload, packager: NfpmPackager): NfpmC
|
|
|
153
159
|
};
|
|
154
160
|
};
|
|
155
161
|
|
|
156
|
-
export { type NfpmPackager, packageNameFor, renderNfpmConfig };
|
|
162
|
+
export { glibcMinimumForPackage, type NfpmPackager, packageNameFor, renderNfpmConfig };
|
|
@@ -178,7 +178,8 @@ const resolveNodeRuntime = async (settings: DeploySettings): Promise<NodeRuntime
|
|
|
178
178
|
const staged = await stageFromSource(settings, version, source);
|
|
179
179
|
const isStripped = node.shouldStrip === false ? false : didStripBinary(staged.path);
|
|
180
180
|
const elf = readElfInfo(staged.path);
|
|
181
|
-
|
|
181
|
+
const glibcMinimum = elf.glibcMinimum ?? "unknown";
|
|
182
|
+
info(`Bundled Node.js v${version} (${megabytes(staged.path)} MiB, runtime glibc >= ${glibcMinimum})`);
|
|
182
183
|
|
|
183
184
|
return { ...staged, version, glibcMinimum: elf.glibcMinimum, isStripped };
|
|
184
185
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { sortStringsBy } from "@gtkx/utils";
|
|
1
|
+
import { sortStringsBy, warn } from "@gtkx/utils";
|
|
2
2
|
import { existsSync, rmSync } from "node:fs";
|
|
3
3
|
import { join, resolve } from "node:path";
|
|
4
4
|
import type { DeploySettings, DeployTargetName, NodeRuntime, NoticeSection, StagedFile } from "../types.js";
|
|
@@ -82,9 +82,48 @@ const stageMetadata = (settings: DeploySettings, root: string, metadata: StagedM
|
|
|
82
82
|
: [writeInto(root, join(SHARE_MIME_PACKAGES, `${settings.applicationId}.xml`), metadata.mimePackage)]),
|
|
83
83
|
];
|
|
84
84
|
|
|
85
|
-
const
|
|
85
|
+
const generatedMetadataKind = (
|
|
86
|
+
settings: DeploySettings,
|
|
87
|
+
metadata: StagedMetadata,
|
|
88
|
+
destination: string,
|
|
89
|
+
): string | null => {
|
|
90
|
+
if (destination === join(SHARE_APPLICATIONS, `${settings.applicationId}.desktop`)) {
|
|
91
|
+
return "desktop entry";
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
if (destination === join(SHARE_METAINFO, `${settings.applicationId}.metainfo.xml`)) {
|
|
95
|
+
return "metainfo";
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
if (
|
|
99
|
+
metadata.mimePackage !== null &&
|
|
100
|
+
destination === join(SHARE_MIME_PACKAGES, `${settings.applicationId}.xml`)
|
|
101
|
+
) {
|
|
102
|
+
return "MIME package";
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
return null;
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
const warnMetadataCollision = (
|
|
109
|
+
settings: DeploySettings,
|
|
110
|
+
metadata: StagedMetadata,
|
|
111
|
+
file: DeploySettings["extraFiles"][number],
|
|
112
|
+
): void => {
|
|
113
|
+
const kind = generatedMetadataKind(settings, metadata, file.destination);
|
|
114
|
+
|
|
115
|
+
if (kind !== null) {
|
|
116
|
+
warn(
|
|
117
|
+
`extraFiles source "${file.source}" targeting "${file.destination}" is overridden by the ` +
|
|
118
|
+
`GTKX-generated ${kind}`,
|
|
119
|
+
);
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
const stageExtraFiles = (settings: DeploySettings, root: string, metadata: StagedMetadata): StagedFile[] =>
|
|
86
124
|
settings.extraFiles.map((file) => {
|
|
87
125
|
const source = resolve(settings.paths.root, file.source);
|
|
126
|
+
warnMetadataCollision(settings, metadata, file);
|
|
88
127
|
|
|
89
128
|
return copyInto(root, file.destination, source, file.mode ?? executableModeFor(source));
|
|
90
129
|
});
|
|
@@ -108,7 +147,7 @@ const stagePayload = ({ settings, node, metadata }: StageRequest): StagedFile[]
|
|
|
108
147
|
...stageNodeBinary(settings, root, node),
|
|
109
148
|
...stageRuntimeFiles(settings, root),
|
|
110
149
|
...stageCatalogs(settings, root),
|
|
111
|
-
...stageExtraFiles(settings, root),
|
|
150
|
+
...stageExtraFiles(settings, root, metadata),
|
|
112
151
|
...stageMetadata(settings, root, metadata),
|
|
113
152
|
...stageIcons(settings, root),
|
|
114
153
|
...stageSchemas(settings, root),
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { statSync } from "node:fs";
|
|
2
|
-
import { resolve } from "node:path";
|
|
2
|
+
import { normalize, resolve } from "node:path";
|
|
3
3
|
import type { DeployConfig, DeployExtraFile } from "../types.js";
|
|
4
4
|
|
|
5
5
|
type ExtraFiles = NonNullable<DeployConfig["extraFiles"]>;
|
|
@@ -22,13 +22,15 @@ const assertSourceFile = (root: string, file: DeployExtraFile): void => {
|
|
|
22
22
|
};
|
|
23
23
|
|
|
24
24
|
const resolveExtraFile = (destination: string, entry: ExtraFileEntry): DeployExtraFile => {
|
|
25
|
+
const normalizedDestination = normalize(destination);
|
|
26
|
+
|
|
25
27
|
if (typeof entry === "string") {
|
|
26
|
-
return { destination, source: entry, mode: null };
|
|
28
|
+
return { destination: normalizedDestination, source: entry, mode: null };
|
|
27
29
|
}
|
|
28
30
|
|
|
29
31
|
const mode = entry.mode === undefined ? null : Number.parseInt(entry.mode, OCTAL_RADIX);
|
|
30
32
|
|
|
31
|
-
return { destination, source: entry.source, mode };
|
|
33
|
+
return { destination: normalizedDestination, source: entry.source, mode };
|
|
32
34
|
};
|
|
33
35
|
|
|
34
36
|
const resolveExtraFiles = (root: string, deploy: DeployConfig): DeployExtraFile[] => {
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import { info } from "@gtkx/utils";
|
|
1
2
|
import { join } from "node:path";
|
|
2
3
|
import { stringify } from "yaml";
|
|
3
4
|
import type { DeployArtifact, DeployManifest, DeployPayload, DeployTarget } from "../types.js";
|
|
4
|
-
import { type NfpmPackager, renderNfpmConfig } from "../nfpm/config.js";
|
|
5
|
+
import { glibcMinimumForPackage, type NfpmPackager, renderNfpmConfig } from "../nfpm/config.js";
|
|
5
6
|
import { packWithNfpm } from "../nfpm/pack.js";
|
|
6
7
|
import { TAR } from "../tools.js";
|
|
7
8
|
|
|
@@ -11,12 +12,18 @@ const PREFIX = "/usr";
|
|
|
11
12
|
const manifestPathFor = (payload: DeployPayload, packager: NfpmPackager): string =>
|
|
12
13
|
join(payload.settings.paths.targets, packager, MANIFEST_FILENAME);
|
|
13
14
|
|
|
14
|
-
const renderManifests = (payload: DeployPayload, packager: NfpmPackager): DeployManifest[] =>
|
|
15
|
-
|
|
15
|
+
const renderManifests = (payload: DeployPayload, packager: NfpmPackager): DeployManifest[] => {
|
|
16
|
+
const glibcMinimum = glibcMinimumForPackage(payload, packager);
|
|
17
|
+
|
|
18
|
+
if (glibcMinimum !== null) {
|
|
19
|
+
info(`${packager} package requires glibc >= ${glibcMinimum}`);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
return [{
|
|
16
23
|
path: manifestPathFor(payload, packager),
|
|
17
|
-
contents: stringify(renderNfpmConfig(payload, packager), { lineWidth: 0 }),
|
|
18
|
-
}
|
|
19
|
-
|
|
24
|
+
contents: stringify(renderNfpmConfig(payload, packager, glibcMinimum), { lineWidth: 0 }),
|
|
25
|
+
}];
|
|
26
|
+
};
|
|
20
27
|
|
|
21
28
|
const packPackage = async (payload: DeployPayload, packager: NfpmPackager): Promise<DeployArtifact[]> => [
|
|
22
29
|
await packWithNfpm(payload, packager, manifestPathFor(payload, packager)),
|
package/src/dev/entry-env.ts
CHANGED
package/src/dev/runner-deps.ts
CHANGED
|
@@ -43,11 +43,11 @@ const waitForApplicationId = async (timeoutMs: number, shouldKeepWaiting: () =>
|
|
|
43
43
|
|
|
44
44
|
const readFileRevision = (path: string): Promise<string> => readFile(path, "utf8");
|
|
45
45
|
|
|
46
|
-
const defaultDevRunnerDeps = (): DevRunnerDeps => ({
|
|
46
|
+
const defaultDevRunnerDeps = (configFile: string): DevRunnerDeps => ({
|
|
47
47
|
createServer,
|
|
48
48
|
waitForApplicationId,
|
|
49
49
|
getConfiguredApplicationId: async (root: string) => {
|
|
50
|
-
const loaded = await loadConfig(root, { mode: DEV_MODE });
|
|
50
|
+
const loaded = await loadConfig(root, { mode: DEV_MODE, configFile });
|
|
51
51
|
|
|
52
52
|
return loaded.config.applicationId;
|
|
53
53
|
},
|
|
@@ -87,7 +87,7 @@ const defaultDevRunnerDeps = (): DevRunnerDeps => ({
|
|
|
87
87
|
staleExportName,
|
|
88
88
|
readFileRevision,
|
|
89
89
|
plugins: (entryPath) => [
|
|
90
|
-
...gtkxVitePlugins({ mode: DEV_MODE, entryPath }),
|
|
90
|
+
...gtkxVitePlugins({ mode: DEV_MODE, entryPath, configFile }),
|
|
91
91
|
...gtkxFastRefresh(),
|
|
92
92
|
gtkxReactDomPrebundle(),
|
|
93
93
|
],
|
package/src/dev/runner-main.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { loadConfig } from "@gtkx/config";
|
|
2
2
|
import { error } from "@gtkx/utils";
|
|
3
3
|
import { resolve } from "node:path";
|
|
4
|
-
import { DEV_ENTRY_ENV } from "./entry-env.js";
|
|
4
|
+
import { DEV_CONFIG_ENV, DEV_ENTRY_ENV } from "./entry-env.js";
|
|
5
5
|
import { prepareDevIconDir } from "./icon-dir.js";
|
|
6
6
|
import { prepareDevLocaleDir } from "./locale-dir.js";
|
|
7
7
|
import { createDevRunner } from "./runner.js";
|
|
@@ -22,13 +22,20 @@ const main = async (): Promise<void> => {
|
|
|
22
22
|
process.exit(1);
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
-
const
|
|
25
|
+
const configFile = process.env[DEV_CONFIG_ENV];
|
|
26
|
+
|
|
27
|
+
if (!configFile) {
|
|
28
|
+
error(`Missing ${DEV_CONFIG_ENV}`);
|
|
29
|
+
process.exit(1);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const { config, root } = await loadConfig(cwd, { mode: "development", configFile });
|
|
26
33
|
prepareDevLocaleDir(root, config.applicationId);
|
|
27
34
|
prepareDevSchemaDir(root);
|
|
28
35
|
prepareDevIconDir(root, config.applicationId, config.applicationIcon);
|
|
29
36
|
const entryPath = resolve(cwd, entryArg);
|
|
30
37
|
const { defaultDevRunnerDeps } = await import("./runner-deps.js");
|
|
31
|
-
const runner = createDevRunner(defaultDevRunnerDeps());
|
|
38
|
+
const runner = createDevRunner(defaultDevRunnerDeps(configFile));
|
|
32
39
|
await runner.run(entryPath);
|
|
33
40
|
};
|
|
34
41
|
|