@omega.js/desktop 0.52.0 → 0.54.0
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/README.md +53 -48
- package/dist/assets/css/core/_initialize.scss +1 -1
- package/dist/assets/js/core/app-shell.js +14 -15
- package/dist/assets/themes/_template/_theme.js +6 -6
- package/dist/assets/themes/base/_includes/global/sections/account.html +4 -4
- package/dist/assets/themes/base/_includes/global/sections/app-sidebar.html +5 -5
- package/dist/assets/themes/base/_layouts/frontend/pages/account/index.html +3 -3
- package/dist/assets/themes/base/_layouts/frontend/pages/alternatives/index.html +1 -1
- package/dist/assets/themes/base/_layouts/frontend/pages/blog/tags/tag.html +1 -1
- package/dist/assets/themes/base/_layouts/frontend/pages/payment/confirmation.html +1 -1
- package/dist/assets/themes/base/_sections/marketing/newsletter-cta/section.js +2 -3
- package/dist/assets/themes/base/_sections/verts/unit/section.html +1 -1
- package/dist/assets/themes/base/_sections/verts/unit/section.js +3 -4
- package/dist/assets/themes/base/_theme.js +4 -3
- package/dist/assets/themes/bootstrap/_theme.js +2 -2
- package/dist/assets/themes/bootstrap/overrides/_links.scss +1 -1
- package/dist/assets/themes/classy/_theme.js +8 -6
- package/dist/assets/themes/classy/css/marketing/_sections.scss +1 -2
- package/dist/assets/themes/classy/js/hero-demo-form.js +3 -2
- package/dist/assets/themes/neobrutalism/_theme.js +5 -5
- package/dist/assets/themes/neobrutalism/js/pages/test/libraries/layers/index.js +1 -1
- package/dist/assets/themes/newsflash/_theme.js +6 -6
- package/dist/assets/themes/newsflash/js/pages/test/libraries/layers/index.js +1 -1
- package/dist/build.js +87 -111
- package/dist/cli-run.js +4 -1
- package/dist/cli.js +3 -3
- package/dist/commands/build.js +2 -2
- package/dist/commands/cdp/capture.js +2 -2
- package/dist/commands/cdp/client.js +1 -1
- package/dist/commands/cdp/quit.js +2 -2
- package/dist/commands/cdp/relaunch.js +2 -2
- package/dist/commands/cdp/theme.js +1 -1
- package/dist/commands/cdp.js +1 -1
- package/dist/commands/clean.js +4 -5
- package/dist/commands/deploy.js +4 -4
- package/dist/commands/dev.js +25 -0
- package/dist/commands/finalize-release.js +4 -4
- package/dist/commands/launch.js +2 -2
- package/dist/commands/lib/deploy-precheck.js +3 -3
- package/dist/commands/lib/ensure-target.js +18 -23
- package/dist/commands/lib/migrate.js +17 -0
- package/dist/commands/logs.js +1 -1
- package/dist/commands/package.js +2 -2
- package/dist/commands/publish.js +2 -2
- package/dist/commands/release.js +4 -4
- package/dist/commands/runner.js +11 -11
- package/dist/commands/sign-windows.js +5 -5
- package/dist/commands/test.js +8 -8
- package/dist/commands/update.js +7 -6
- package/dist/commands/validate-certs.js +4 -4
- package/dist/commands/version.js +3 -3
- package/dist/defaults/.github/workflows/build.yml +18 -18
- package/dist/defaults/_.gitignore +0 -2
- package/dist/defaults/_mas/README.md +3 -3
- package/dist/defaults/config/certs/README.md +1 -1
- package/dist/defaults/config/omega.json5 +43 -43
- package/dist/defaults/docs/README.md +3 -3
- package/dist/defaults/gulpfile.js +1 -1
- package/dist/defaults/hooks/build/post.js +2 -2
- package/dist/defaults/hooks/build/pre.js +2 -2
- package/dist/defaults/hooks/deploy/pre.js +1 -1
- package/dist/defaults/hooks/notarize/post.js +2 -2
- package/dist/defaults/hooks/release/post.js +2 -2
- package/dist/defaults/hooks/release/pre.js +2 -2
- package/dist/defaults/src/assets/js/components/about/index.js +3 -5
- package/dist/defaults/src/assets/js/components/main/index.js +3 -5
- package/dist/defaults/src/assets/js/components/settings/index.js +3 -5
- package/dist/defaults/src/assets/scss/pages/about.scss +1 -1
- package/dist/defaults/src/assets/scss/pages/main.scss +1 -1
- package/dist/defaults/src/assets/scss/pages/settings.scss +1 -1
- package/dist/defaults/src/integrations/context-menu/index.js +13 -13
- package/dist/defaults/src/integrations/menu/index.js +8 -8
- package/dist/defaults/src/integrations/tray/index.js +12 -12
- package/dist/defaults/src/main.js +5 -7
- package/dist/defaults/src/preload.js +4 -6
- package/dist/defaults/test/README.md +5 -5
- package/dist/defaults/test/_init.js +1 -1
- package/dist/gulp/main.js +9 -10
- package/dist/gulp/tasks/audit.js +11 -14
- package/dist/gulp/tasks/build-config.js +8 -8
- package/dist/gulp/tasks/bundle.js +16 -16
- package/dist/gulp/tasks/defaults.js +3 -3
- package/dist/gulp/tasks/distribute.js +2 -2
- package/dist/gulp/tasks/html.js +9 -9
- package/dist/gulp/tasks/package-quick.js +3 -3
- package/dist/gulp/tasks/package.js +3 -3
- package/dist/gulp/tasks/release.js +3 -3
- package/dist/gulp/tasks/sass.js +6 -6
- package/dist/gulp/tasks/serve.js +4 -4
- package/dist/hooks/notarize-artifacts.js +1 -1
- package/dist/hooks/notarize.js +1 -1
- package/dist/index.js +5 -8
- package/dist/lib/_environment-mixin.js +50 -0
- package/dist/lib/_lifecycle-mixin.js +45 -0
- package/dist/lib/analytics.js +33 -35
- package/dist/lib/app-state.js +14 -14
- package/dist/lib/auth-flow.js +18 -18
- package/dist/lib/auth-persistence.js +12 -12
- package/dist/lib/auth.js +421 -0
- package/dist/lib/auto-updater.js +49 -49
- package/dist/lib/context-menu.js +13 -13
- package/dist/lib/context.js +19 -19
- package/dist/lib/deep-link.js +34 -34
- package/dist/lib/fontawesome.js +5 -5
- package/dist/lib/ipc.js +4 -4
- package/dist/lib/menu.js +25 -25
- package/dist/lib/protocol.js +5 -5
- package/dist/lib/remote-config.js +22 -22
- package/dist/lib/remote-scripts.js +21 -21
- package/dist/lib/restart-manager/index.js +29 -29
- package/dist/lib/restart-manager/install.js +1 -1
- package/dist/lib/restart-manager/protocol.js +1 -1
- package/dist/lib/sign-helpers/exec-with-limit.js +1 -1
- package/dist/lib/sign-helpers/sign-events.js +1 -1
- package/dist/lib/startup.js +18 -13
- package/dist/lib/storage.js +10 -10
- package/dist/lib/templating.js +16 -16
- package/dist/lib/theme.js +10 -10
- package/dist/lib/tray.js +27 -27
- package/dist/lib/usage.js +11 -11
- package/dist/lib/window-manager.js +26 -26
- package/dist/main.js +399 -483
- package/dist/preload.js +236 -176
- package/dist/renderer.js +417 -391
- package/dist/test/fixtures/consumer-app/config/omega.json5 +1 -1
- package/dist/test/fixtures/consumer-app/src/assets/js/components/main/index.js +8 -11
- package/dist/test/fixtures/consumer-app/src/main.js +5 -7
- package/dist/test/fixtures/consumer-app/src/preload.js +2 -2
- package/dist/test/harness/boot-entry.js +22 -20
- package/dist/test/harness/main-entry.js +31 -30
- package/dist/test/harness/renderer-entry.js +5 -5
- package/dist/test/harness/renderer-preload.js +137 -141
- package/dist/test/index.js +10 -10
- package/dist/test/runner.js +2 -2
- package/dist/test/runners/boot.js +7 -6
- package/dist/test/runners/electron.js +3 -2
- package/dist/test/runners/render-event.js +2 -2
- package/dist/test/suites/boot/consumer-app-boots.test.js +57 -26
- package/dist/test/suites/boot/restart-manager.test.js +2 -2
- package/dist/test/suites/boot/storage-bundled.test.js +5 -5
- package/dist/test/suites/boot/theme.test.js +13 -13
- package/dist/test/suites/build/audit.test.js +21 -8
- package/dist/test/suites/build/auth-persistence-resolve.test.js +6 -6
- package/dist/test/suites/build/boot-fixture.test.js +2 -2
- package/dist/test/suites/build/boot-runner-timeout.test.js +6 -5
- package/dist/test/suites/build/brand-scss.test.js +1 -1
- package/dist/test/suites/build/build-json-bake.test.js +1 -1
- package/dist/test/suites/build/build-workflow-jobs.test.js +2 -2
- package/dist/test/suites/build/cli.test.js +30 -2
- package/dist/test/suites/build/config-schema.test.js +5 -5
- package/dist/test/suites/build/defaults-em-dash.test.js +22 -0
- package/dist/test/suites/build/defaults-scaffold.test.js +21 -7
- package/dist/test/suites/build/deploy-direct.test.js +7 -5
- package/dist/test/suites/build/deploy-dispatch.test.js +2 -1
- package/dist/test/suites/build/deploy-hook.test.js +7 -5
- package/dist/test/suites/build/dev-verb.test.js +67 -0
- package/dist/test/suites/build/ensure-target.test.js +13 -5
- package/dist/test/suites/build/env-delivery.test.js +2 -2
- package/dist/test/suites/build/esm-only-dependency.test.js +2 -2
- package/dist/test/suites/build/exports.test.js +9 -8
- package/dist/test/suites/build/get-config.test.js +4 -4
- package/dist/test/suites/build/manifest-deps.test.js +1 -1
- package/dist/test/suites/build/merge-line-files.test.js +7 -7
- package/dist/test/suites/build/migrate.test.js +29 -0
- package/dist/test/suites/build/omega-shell.test.js +34 -2
- package/dist/test/suites/build/omega.test.js +350 -0
- package/dist/test/suites/build/project-scripts-deps.test.js +6 -10
- package/dist/test/suites/build/renderer-auth-bridge.test.js +211 -78
- package/dist/test/suites/build/runner-env-write.test.js +73 -0
- package/dist/test/suites/build/runner.test.js +11 -10
- package/dist/test/suites/build/sentry.test.js +2 -2
- package/dist/test/suites/build/setup-scripts.test.js +27 -0
- package/dist/test/suites/build/sign-windows-e2e.test.js +2 -2
- package/dist/test/suites/build/templating.test.js +3 -3
- package/dist/test/suites/build/test-stealth.test.js +7 -9
- package/dist/test/suites/build/url-helpers.test.js +55 -56
- package/dist/test/suites/build/validate-config.test.js +15 -4
- package/dist/test/suites/build/verb-logs.test.js +20 -0
- package/dist/test/suites/build/wave5-pins.test.js +2 -2
- package/dist/test/suites/main/analytics.test.js +59 -59
- package/dist/test/suites/main/app-state.test.js +66 -66
- package/dist/test/suites/main/auth-flow.test.js +41 -41
- package/dist/test/suites/main/auth-persistence.test.js +54 -43
- package/dist/test/suites/main/{client-bridge.integration.test.js → auth.integration.test.js} +10 -9
- package/dist/test/suites/main/auth.test.js +336 -0
- package/dist/test/suites/main/auto-updater.test.js +134 -134
- package/dist/test/suites/main/boot-sequence.test.js +37 -49
- package/dist/test/suites/main/context-menu.test.js +51 -50
- package/dist/test/suites/main/context.test.js +25 -25
- package/dist/test/suites/main/deep-link.test.js +74 -74
- package/dist/test/suites/main/fontawesome.test.js +27 -27
- package/dist/test/suites/main/ipc.test.js +35 -35
- package/dist/test/suites/main/menu.test.js +101 -100
- package/dist/test/suites/main/protocol.test.js +19 -19
- package/dist/test/suites/main/remote-config.test.js +63 -63
- package/dist/test/suites/main/remote-scripts.test.js +103 -103
- package/dist/test/suites/main/request.test.js +71 -0
- package/dist/test/suites/main/restart-manager.test.js +33 -33
- package/dist/test/suites/main/startup-paths-and-ua.test.js +4 -4
- package/dist/test/suites/main/startup.test.js +26 -26
- package/dist/test/suites/main/stealth-window.test.js +1 -1
- package/dist/test/suites/main/storage.test.js +25 -25
- package/dist/test/suites/main/theme.test.js +34 -34
- package/dist/test/suites/main/tray.test.js +79 -79
- package/dist/test/suites/main/url-helpers.test.js +133 -133
- package/dist/test/suites/main/usage.test.js +25 -25
- package/dist/test/suites/main/window-bounds.test.js +27 -27
- package/dist/test/suites/main/window-manager.test.js +44 -44
- package/dist/test/suites/renderer/analytics-bridge.test.js +5 -5
- package/dist/test/suites/renderer/cross-context-helpers.test.js +37 -31
- package/dist/test/suites/renderer/round-trip.test.js +3 -3
- package/dist/test/suites/renderer/tooltips.test.js +15 -15
- package/dist/test/suites/renderer/{window-em-surface.test.js → window-desktop-surface.test.js} +28 -8
- package/dist/test/utils/extended-mode-warning.js +1 -1
- package/dist/utils/boot-harness.js +56 -0
- package/dist/utils/build-pipeline.js +4 -4
- package/dist/utils/mode-helpers.js +2 -15
- package/dist/utils/runner-env.js +13 -28
- package/dist/utils/ship-keys.js +3 -3
- package/dist/utils/signing-status.js +51 -0
- package/dist/utils/test-events.js +7 -0
- package/dist/utils/test-stealth.js +6 -6
- package/dist/utils/url-helpers.js +52 -42
- package/dist/utils/user-agent.js +44 -0
- package/dist/vendor/account/engine.js +3 -3
- package/dist/vendor/account/index.js +14 -45
- package/dist/vendor/account/resolve-account.js +44 -0
- package/dist/vendor/account/schema.js +1 -1
- package/dist/vendor/account/user.js +99 -0
- package/dist/vendor/config/client-config.js +1 -1
- package/dist/vendor/config/company.js +46 -14
- package/dist/vendor/config/defaults.js +30 -7
- package/dist/vendor/config/edit.js +25 -3
- package/dist/vendor/config/env-delivery.js +1 -1
- package/dist/vendor/config/env-schema.js +3 -6
- package/dist/vendor/config/env.js +34 -22
- package/dist/vendor/config/environment.js +11 -30
- package/dist/vendor/config/index.js +21 -28
- package/dist/vendor/config/load.js +16 -9
- package/dist/vendor/config/platforms.js +1 -1
- package/dist/vendor/config/repo.js +10 -27
- package/dist/vendor/config/schema-client.js +64 -0
- package/dist/vendor/config/schema-cloud.js +38 -0
- package/dist/vendor/config/schema-manager.js +118 -0
- package/dist/vendor/config/schema-overrides.js +68 -0
- package/dist/vendor/config/schema.js +104 -160
- package/dist/vendor/config/site-global.js +2 -3
- package/dist/vendor/config/validate.js +97 -78
- package/dist/vendor/config/winback.js +1 -1
- package/dist/vendor/devkit/actions-secrets.js +1 -1
- package/dist/vendor/devkit/agents-md.js +233 -0
- package/dist/vendor/devkit/attach-log-file.js +16 -2
- package/dist/vendor/devkit/build-json.js +1 -1
- package/dist/vendor/devkit/ci-workflows.js +30 -30
- package/dist/vendor/devkit/cli-router.js +16 -11
- package/dist/vendor/devkit/defaults-engine.js +15 -51
- package/dist/vendor/devkit/deploy-snapshot.js +44 -9
- package/dist/vendor/devkit/env-lines.js +183 -0
- package/dist/vendor/devkit/local.js +64 -10
- package/dist/vendor/devkit/lockfile.js +32 -13
- package/dist/vendor/devkit/logger.js +7 -2
- package/dist/vendor/devkit/merge-line-files.js +219 -177
- package/dist/vendor/devkit/omega-bin.js +208 -111
- package/dist/vendor/devkit/preludes/docs-sync.js +52 -0
- package/dist/vendor/devkit/preludes/index.js +1 -0
- package/dist/vendor/devkit/target-picker.js +45 -0
- package/dist/vendor/devkit/test/dashed-files.js +37 -0
- package/dist/vendor/devkit/test/run-verb-under-tee.js +71 -0
- package/dist/vendor/devkit/test/runner-core.js +6 -6
- package/dist/vendor/devkit/update.js +15 -15
- package/dist/vendor/devkit/verb-scripts.js +40 -0
- package/dist/vendor/devkit/verbs.js +170 -0
- package/dist/vendor/monitoring/env.js +2 -2
- package/dist/vendor/monitoring/index.js +1 -1
- package/dist/vendor/monitoring/main.js +1 -1
- package/dist/vendor/monitoring/preload.js +1 -1
- package/dist/vendor/monitoring/renderer.js +1 -1
- package/package.json +19 -26
- package/dist/commands/install.js +0 -37
- package/dist/defaults/AGENTS.md +0 -110
- package/dist/defaults/CLAUDE.md +0 -1
- package/dist/lib/client-bridge.js +0 -374
- package/dist/lib/logger.js +0 -4
- package/dist/test/suites/build/manager.test.js +0 -213
- package/dist/test/suites/main/client-bridge.test.js +0 -262
- package/dist/vendor/config/env-retired.js +0 -137
- package/dist/vendor/config/retired-keys.js +0 -635
- package/docs/analytics.md +0 -140
- package/docs/app-state.md +0 -92
- package/docs/audit.md +0 -69
- package/docs/auto-updater.md +0 -243
- package/docs/boot-sequence.md +0 -39
- package/docs/build-system.md +0 -169
- package/docs/cdp-debugging.md +0 -169
- package/docs/client-bridge.md +0 -269
- package/docs/common-mistakes.md +0 -21
- package/docs/config-schema.md +0 -120
- package/docs/context-menu.md +0 -112
- package/docs/context.md +0 -81
- package/docs/css.md +0 -90
- package/docs/deep-link.md +0 -186
- package/docs/environment-detection.md +0 -112
- package/docs/fontawesome.md +0 -107
- package/docs/hooks.md +0 -89
- package/docs/icons.md +0 -79
- package/docs/index.md +0 -317
- package/docs/installer-options.md +0 -165
- package/docs/ipc.md +0 -61
- package/docs/lib-modules.md +0 -53
- package/docs/logging.md +0 -229
- package/docs/menu.md +0 -160
- package/docs/releasing.md +0 -239
- package/docs/remote-config.md +0 -118
- package/docs/remote-scripts.md +0 -144
- package/docs/restart-manager.md +0 -144
- package/docs/runner.md +0 -290
- package/docs/sentry.md +0 -97
- package/docs/shared/agent-docs.md +0 -89
- package/docs/shared/analytics.md +0 -612
- package/docs/shared/brands.md +0 -57
- package/docs/shared/breaking-changes.md +0 -851
- package/docs/shared/config.md +0 -1952
- package/docs/shared/deploys.md +0 -341
- package/docs/shared/icons.md +0 -219
- package/docs/shared/local-dev.md +0 -167
- package/docs/shared/logging.md +0 -205
- package/docs/shared/monitoring.md +0 -167
- package/docs/shared/publishing.md +0 -187
- package/docs/shared/rulings.md +0 -34
- package/docs/shared/testing.md +0 -147
- package/docs/shared/theming.md +0 -629
- package/docs/shared/translation.md +0 -333
- package/docs/shared/updates.md +0 -61
- package/docs/signing.md +0 -293
- package/docs/startup.md +0 -142
- package/docs/storage.md +0 -59
- package/docs/templating.md +0 -101
- package/docs/test-boot-layer.md +0 -157
- package/docs/test-framework.md +0 -362
- package/docs/themes.md +0 -149
- package/docs/tooltips.md +0 -99
- package/docs/tray.md +0 -164
- package/docs/usage.md +0 -58
- package/docs/verts.md +0 -62
- package/docs/windows.md +0 -149
|
@@ -20,7 +20,8 @@
|
|
|
20
20
|
* peer dependencies installed when missing or behind (a satisfied target
|
|
21
21
|
* installs nothing)
|
|
22
22
|
* defaults tree src/defaults/** — copy-if-missing, marker merges for
|
|
23
|
-
* .env/.gitignore
|
|
23
|
+
* .env/.gitignore, workflows re-rendered
|
|
24
|
+
* AGENTS.md standalone only, through devkit's one builder
|
|
24
25
|
* locality a WARNING when the framework is a `file:` link
|
|
25
26
|
*
|
|
26
27
|
* Everything here is copy-if-missing, marker-merge or write-if-changed. What
|
|
@@ -31,14 +32,16 @@
|
|
|
31
32
|
const path = require('path');
|
|
32
33
|
const jetpack = require('fs-jetpack');
|
|
33
34
|
const version = require('wonderful-version');
|
|
34
|
-
const
|
|
35
|
+
const build = require('../../build.js');
|
|
35
36
|
const { ensurePeerDependencies, readProject } = require('./dependencies.js');
|
|
36
37
|
const { renderSecretsBlock } = require('../../vendor/config/env-delivery.js');
|
|
37
38
|
const { composeTargetWorkflows, renderInstallFirewall, renderInstallWorkspace } = require('../../vendor/devkit/ci-workflows.js');
|
|
38
39
|
const { assertScaffoldable } = require('../../vendor/devkit/scaffold-guard.js');
|
|
40
|
+
const { scaffoldAgentsMd } = require('../../vendor/devkit/agents-md.js');
|
|
41
|
+
const { projectScripts } = require('../../vendor/devkit/verb-scripts.js');
|
|
39
42
|
|
|
40
|
-
const logger =
|
|
41
|
-
const package =
|
|
43
|
+
const logger = build.logger('ensure-target');
|
|
44
|
+
const package = build.getPackage('main');
|
|
42
45
|
|
|
43
46
|
/**
|
|
44
47
|
* Sync the consumer manifest: the omega verb scripts, the npm-private latch,
|
|
@@ -47,16 +50,13 @@ const package = Manager.getPackage('main');
|
|
|
47
50
|
* Identical content is not a write (#590).
|
|
48
51
|
*/
|
|
49
52
|
function setupScripts(projectDir, result) {
|
|
50
|
-
projectDir = projectDir ||
|
|
53
|
+
projectDir = projectDir || build.getRootPath('project');
|
|
51
54
|
result = result || { changed: [] };
|
|
52
55
|
|
|
53
56
|
const project = readProject(projectDir);
|
|
54
57
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
Object.keys(package.projectScripts || {}).forEach((key) => {
|
|
58
|
-
project.scripts[key] = package.projectScripts[key];
|
|
59
|
-
});
|
|
58
|
+
// The verb table's scripts for this framework, the manifest's declarations over them
|
|
59
|
+
project.scripts = { ...project.scripts, ...projectScripts(package) };
|
|
60
60
|
|
|
61
61
|
// Electron consumer projects should not be published to npm
|
|
62
62
|
project.private = true;
|
|
@@ -128,7 +128,7 @@ function checkNodeVersion(projectDir, requiredMajor, warn) {
|
|
|
128
128
|
* @param {object} log - `{ log, warn, error }` handed to the engine.
|
|
129
129
|
*/
|
|
130
130
|
async function copyDefaults(projectDir, engineLogger) {
|
|
131
|
-
projectDir = projectDir ||
|
|
131
|
+
projectDir = projectDir || build.getRootPath('project');
|
|
132
132
|
engineLogger = engineLogger || logger;
|
|
133
133
|
|
|
134
134
|
const defaultsDir = path.resolve(__dirname, '..', '..', 'defaults');
|
|
@@ -195,18 +195,10 @@ async function copyDefaults(projectDir, engineLogger) {
|
|
|
195
195
|
// material really lives, so a target keeps the explanation that matches
|
|
196
196
|
// the ignore rules the scaffold just wrote, never an older one.
|
|
197
197
|
'config/certs/README.md': { overwrite: true },
|
|
198
|
-
//
|
|
199
|
-
//
|
|
200
|
-
//
|
|
201
|
-
'AGENTS.md': { mergeLines: true, template: templateContext },
|
|
202
|
-
// Brand doc unification (Ian 2026-07-20): inside a brand monorepo the
|
|
203
|
-
// BRAND ROOT is the one doc home — per-target AGENTS.md/CLAUDE.md/CHANGELOG.md/docs/
|
|
204
|
-
// never scaffold, and existing framework-owned-only copies are swept
|
|
205
|
-
// (retire rules; consumer content is never destroyed). Standalone projects
|
|
206
|
-
// keep them. Last-match-wins: these override the rules above.
|
|
198
|
+
// In a brand the BRAND ROOT is the one doc home: per-target CHANGELOG.md
|
|
199
|
+
// and docs/ never scaffold, and framework-owned copies are swept (consumer
|
|
200
|
+
// content is kept). Last-match-wins over the rules above.
|
|
207
201
|
...(isBrandTarget ? {
|
|
208
|
-
'AGENTS.md': { retire: true, template: templateContext },
|
|
209
|
-
'CLAUDE.md': { retire: true, template: templateContext },
|
|
210
202
|
'CHANGELOG.md': { retire: true },
|
|
211
203
|
'docs/**/*': { retire: true },
|
|
212
204
|
} : {}),
|
|
@@ -235,6 +227,9 @@ async function copyDefaults(projectDir, engineLogger) {
|
|
|
235
227
|
logger: engineLogger,
|
|
236
228
|
});
|
|
237
229
|
|
|
230
|
+
// The project-root AGENTS.md, through devkit's one builder.
|
|
231
|
+
scaffoldAgentsMd({ outputDir: projectDir, standalone: seed.standalone, result: applied, logger: engineLogger });
|
|
232
|
+
|
|
238
233
|
if (isBrandTarget) {
|
|
239
234
|
// The same templateContext the yml rule uses, so the composed copy carries
|
|
240
235
|
// the generated `githubSecrets` block — a composed workflow with the raw
|
|
@@ -311,7 +306,7 @@ function checkLocality(projectDir) {
|
|
|
311
306
|
*/
|
|
312
307
|
async function ensureTarget(options) {
|
|
313
308
|
options = options || {};
|
|
314
|
-
const projectDir = options.projectDir ||
|
|
309
|
+
const projectDir = options.projectDir || build.getRootPath('project');
|
|
315
310
|
const log = options.log || (() => {});
|
|
316
311
|
const warn = options.warn || (() => {});
|
|
317
312
|
const result = { written: [], merged: [], changed: [] };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* migrateTarget: the desktop leg of the brand root's `omega migrate`. No
|
|
3
|
+
* legacy electron-manager shape converts mechanically yet (the register's
|
|
4
|
+
* by-hand steps cover them), so it answers the shared shape with nothing due.
|
|
5
|
+
* Every framework exposes this entry, so the manager's walk never special-cases
|
|
6
|
+
* a framework name.
|
|
7
|
+
*
|
|
8
|
+
* @param {string} targetDir - the desktop target's root
|
|
9
|
+
* @param {object} [options]
|
|
10
|
+
* @param {boolean} [options.execute] - convert (default: report only)
|
|
11
|
+
* @returns {{ due: string[], changed: string[], errors: string[] }}
|
|
12
|
+
*/
|
|
13
|
+
function migrateTarget(targetDir, options = {}) {
|
|
14
|
+
return { due: [], changed: [], errors: [] };
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
module.exports = { migrateTarget };
|
package/dist/commands/logs.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
//
|
|
4
4
|
// The optional positional names the surface (default `runtime`) and resolves to
|
|
5
5
|
// <projectRoot>/logs/<surface>.log — the same four files documented in
|
|
6
|
-
// docs/logging.md. Every flag below works on whichever surface was named.
|
|
6
|
+
// docs/desktop/logging.md. Every flag below works on whichever surface was named.
|
|
7
7
|
//
|
|
8
8
|
// `runtime` resolves to the file the runtime logger writes to:
|
|
9
9
|
// - Dev (running from a project directory): <projectRoot>/logs/runtime.log
|
package/dist/commands/package.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Libraries
|
|
2
|
-
const
|
|
3
|
-
const logger =
|
|
2
|
+
const build = require('../build.js');
|
|
3
|
+
const logger = build.logger('package');
|
|
4
4
|
const { runPipeline } = require('../utils/build-pipeline.js');
|
|
5
5
|
|
|
6
6
|
// `npx omega package` (the consumer's `package` script) builds the full installer
|
package/dist/commands/publish.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Libraries
|
|
2
|
-
const
|
|
3
|
-
const logger =
|
|
2
|
+
const build = require('../build.js');
|
|
3
|
+
const logger = build.logger('publish');
|
|
4
4
|
const { runPipeline } = require('../utils/build-pipeline.js');
|
|
5
5
|
|
|
6
6
|
// `npx omega publish` publishes from an already-built tree (the CI lane calls it
|
package/dist/commands/release.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// run it started.
|
|
3
3
|
//
|
|
4
4
|
// Replaces the old "do it from my laptop" release flow with "let CI do it, but make it
|
|
5
|
-
// feel local." User runs `
|
|
5
|
+
// feel local." User runs `npx omega release` and gets:
|
|
6
6
|
// 1. The ONE deploy lane every target takes (`@omega.js/devkit/deploy`'s
|
|
7
7
|
// deployViaDispatch, #872, #915): the composed workflow files reach the
|
|
8
8
|
// default branch when they differ there (GitHub registers a workflow from
|
|
@@ -24,9 +24,9 @@ const attachLogFile = require('../utils/attach-log-file.js');
|
|
|
24
24
|
const { deployViaDispatch, dispatchTarget, laneLabel, resolveToken } = require('../vendor/devkit/deploy.js');
|
|
25
25
|
const { followRun } = require('../vendor/devkit/deploy-follow.js');
|
|
26
26
|
const { targetNameFromDir } = require('../vendor/config/index.js');
|
|
27
|
-
const
|
|
27
|
+
const build = require('../build.js');
|
|
28
28
|
|
|
29
|
-
const logger =
|
|
29
|
+
const logger = build.logger('release');
|
|
30
30
|
|
|
31
31
|
module.exports = async function release(options = {}) {
|
|
32
32
|
const projectRoot = process.cwd();
|
|
@@ -58,7 +58,7 @@ module.exports = async function release(options = {}) {
|
|
|
58
58
|
// `build.yml` standalone). ONE helper for all four targets
|
|
59
59
|
// ([#847](https://github.com/Omega-JS-Stack/omega/issues/847)), where this
|
|
60
60
|
// file used to keep desktop's own copy of it.
|
|
61
|
-
const { owner, repo, workflow: WORKFLOW_FILE } = dispatchTarget({ projectRoot, config:
|
|
61
|
+
const { owner, repo, workflow: WORKFLOW_FILE } = dispatchTarget({ projectRoot, config: build.getConfig(), workflow: 'build.yml' });
|
|
62
62
|
|
|
63
63
|
// Optional --platforms / --platform flag forwarded as a workflow input. Accepts a
|
|
64
64
|
// single value ('windows') or comma-separated list ('mac,linux'). Special value
|
package/dist/commands/runner.js
CHANGED
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
// stop Kill every Runner.Listener.exe under RUNNER_HOME.
|
|
25
25
|
// status Registered orgs, Startup shortcuts, live listeners.
|
|
26
26
|
// uninstall Remove everything — legacy services and tasks, and the
|
|
27
|
-
//
|
|
27
|
+
// legacy em-runner install, included.
|
|
28
28
|
// monitor Tail the JSONL signing event log, pretty-printed.
|
|
29
29
|
//
|
|
30
30
|
// Every subcommand except `monitor` refuses on non-Windows
|
|
@@ -35,8 +35,8 @@ const fs = require('fs');
|
|
|
35
35
|
const os = require('os');
|
|
36
36
|
const jetpack = require('fs-jetpack');
|
|
37
37
|
|
|
38
|
-
const
|
|
39
|
-
const logger =
|
|
38
|
+
const build = require('../build.js');
|
|
39
|
+
const logger = build.logger('runner');
|
|
40
40
|
|
|
41
41
|
const RUNNER_LABELS = ['self-hosted', 'windows', 'ev-token'];
|
|
42
42
|
|
|
@@ -63,7 +63,7 @@ const attachLogFile = require('../utils/attach-log-file.js');
|
|
|
63
63
|
const RUNNER_HOME = process.env.OMEGA_RUNNER_HOME || defaultRunnerHome();
|
|
64
64
|
loadRunnerEnv({ home: RUNNER_HOME });
|
|
65
65
|
|
|
66
|
-
// The
|
|
66
|
+
// The legacy generation of this command (`em runner`) laid the same design
|
|
67
67
|
// down under other names: the home was %LOCALAPPDATA%\em-runner (C:\actions-runners
|
|
68
68
|
// before that), and the Startup shortcuts and the GitHub-side runners were
|
|
69
69
|
// `em-runner-<host>-<org>`. An upgraded box still has all of it — live, and
|
|
@@ -207,7 +207,7 @@ async function install(options) {
|
|
|
207
207
|
// the calling terminal at normal user privilege.
|
|
208
208
|
|
|
209
209
|
// Idempotent by replacement: always tear down any prior install before starting —
|
|
210
|
-
// the omega one, or the
|
|
210
|
+
// the omega one, or the legacy em-runner one an upgraded box still runs.
|
|
211
211
|
if (jetpack.exists(home) || listLegacyRunnerHomes({ home }).length > 0 || listLegacyRunnerStartupShortcuts().length > 0) {
|
|
212
212
|
logger.log(`Existing runner installation detected — uninstalling first for a clean re-install...`);
|
|
213
213
|
try {
|
|
@@ -369,8 +369,8 @@ async function registerOrg(options) {
|
|
|
369
369
|
// THIS host. Without this, re-running install accumulates orphaned runners (one per
|
|
370
370
|
// failed/aborted install, one per host rename, etc.) which causes actions/runner to
|
|
371
371
|
// auto-suffix the new runner's name (e.g. `-2872`) and breaks our ability to predict
|
|
372
|
-
// service names. Match prefix is `omega-runner-<host>-<org>` — and the
|
|
373
|
-
//
|
|
372
|
+
// service names. Match prefix is `omega-runner-<host>-<org>` — and the legacy
|
|
373
|
+
// `em-runner-<host>-<org>`, the same box's older registration — so we never touch
|
|
374
374
|
// user-created runners or runners from other hosts.
|
|
375
375
|
//
|
|
376
376
|
// We do this BEFORE fetching the registration token because the token is one-shot
|
|
@@ -900,7 +900,7 @@ async function statusServices(options) {
|
|
|
900
900
|
}
|
|
901
901
|
}
|
|
902
902
|
|
|
903
|
-
// The
|
|
903
|
+
// The legacy install (`em runner`): its home, its Startup
|
|
904
904
|
// shortcuts, and any listener still running out of it. None of it answers to
|
|
905
905
|
// the omega names above, so it is named here and torn down by `uninstall`.
|
|
906
906
|
const legacyHomes = listLegacyRunnerHomes({ home });
|
|
@@ -989,7 +989,7 @@ async function uninstall(options) {
|
|
|
989
989
|
// handles asynchronously after stop).
|
|
990
990
|
await removeRunnerHomeWithRetry(new Set(failed.map((f) => f.dir)), home);
|
|
991
991
|
|
|
992
|
-
// The
|
|
992
|
+
// The legacy em-runner install, when this box still has one: the same
|
|
993
993
|
// teardown, org by org, so its GitHub-side registrations come off too.
|
|
994
994
|
const legacy = await uninstallLegacyRunnerInstalls(home);
|
|
995
995
|
const stillRegistered = [...failed, ...legacy.failed];
|
|
@@ -1002,7 +1002,7 @@ async function uninstall(options) {
|
|
|
1002
1002
|
logger.warn(` Their directories were kept — re-run 'npx omega runner uninstall' to retry, or delete them under each org's Settings → Actions → Runners.`);
|
|
1003
1003
|
}
|
|
1004
1004
|
|
|
1005
|
-
// Tear down the
|
|
1005
|
+
// Tear down the legacy runner install: its `em-runner-*`
|
|
1006
1006
|
// Startup shortcuts, then each legacy home — deregister every org dir through
|
|
1007
1007
|
// its own config.cmd, kill what runs out of it, remove it. A registration that
|
|
1008
1008
|
// did not come off keeps its directory, exactly as the omega home's does.
|
|
@@ -1657,7 +1657,7 @@ function listRunnerStartupShortcuts(startupDir) {
|
|
|
1657
1657
|
return listStartupShortcuts('omega-runner-', startupDir);
|
|
1658
1658
|
}
|
|
1659
1659
|
|
|
1660
|
-
// The
|
|
1660
|
+
// The legacy shortcuts: `em-runner-<host>-<org>`, which `status` names
|
|
1661
1661
|
// and `uninstall` removes — never anything `start` would launch.
|
|
1662
1662
|
function listLegacyRunnerStartupShortcuts(startupDir) {
|
|
1663
1663
|
return listStartupShortcuts(LEGACY_RUNNER_PREFIX, startupDir);
|
|
@@ -21,8 +21,8 @@ const os = require('os');
|
|
|
21
21
|
const jetpack = require('fs-jetpack');
|
|
22
22
|
const { execute } = require('node-powertools');
|
|
23
23
|
|
|
24
|
-
const
|
|
25
|
-
const logger =
|
|
24
|
+
const build = require('../build.js');
|
|
25
|
+
const logger = build.logger('sign-windows');
|
|
26
26
|
|
|
27
27
|
// The box's own signing configuration (`<runner home>\.env`: the cert, the PIN,
|
|
28
28
|
// signtool) is read before anything below looks at process.env, so a manual
|
|
@@ -90,9 +90,9 @@ async function runSignCommand(options) {
|
|
|
90
90
|
return smokeTest();
|
|
91
91
|
}
|
|
92
92
|
|
|
93
|
-
const strategy =
|
|
93
|
+
const strategy = build.getWindowsSignStrategy();
|
|
94
94
|
|
|
95
|
-
const config =
|
|
95
|
+
const config = build.getConfig();
|
|
96
96
|
const projectRoot = process.cwd();
|
|
97
97
|
|
|
98
98
|
// Resolve --in and --out (CLI flags) → directories of unsigned / signed artifacts.
|
|
@@ -441,7 +441,7 @@ async function signWithSigntool(targets, inDir, outDir, deps) {
|
|
|
441
441
|
// (mac/linux equivalents are produced by electron-builder during their publish step,
|
|
442
442
|
// but Windows is split into a post-build sign job so we have to write the yml here).
|
|
443
443
|
if (signedExes.length > 0) {
|
|
444
|
-
const pkg =
|
|
444
|
+
const pkg = build.getPackage('project') || {};
|
|
445
445
|
const version = pkg.version;
|
|
446
446
|
if (!version) {
|
|
447
447
|
log.warn('Could not determine version from package.json; skipping latest.yml generation.');
|
package/dist/commands/test.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// Libraries
|
|
2
2
|
const path = require('path');
|
|
3
3
|
const fs = require('fs');
|
|
4
|
-
const
|
|
5
|
-
const logger =
|
|
4
|
+
const build = require('../build.js');
|
|
5
|
+
const logger = build.logger('test');
|
|
6
6
|
const { run } = require('../test/runner.js');
|
|
7
7
|
const attachLogFile = require('../utils/attach-log-file.js');
|
|
8
8
|
const { EXTENDED_MODE_WARNING } = require('../test/utils/extended-mode-warning.js');
|
|
@@ -21,7 +21,7 @@ module.exports = async function (options) {
|
|
|
21
21
|
|
|
22
22
|
// Tee all test output to <projectRoot>/logs/test.log (ANSI-stripped) — mirrors
|
|
23
23
|
// @omega.js/backend's test.log and @omega.js/desktop's own dev.log pattern.
|
|
24
|
-
attachLogFile(path.join(process.cwd(), 'logs', 'test.log'));
|
|
24
|
+
const detachLog = attachLogFile(path.join(process.cwd(), 'logs', 'test.log'));
|
|
25
25
|
|
|
26
26
|
// The local half of the retired `omega setup` (#675) — idempotent, offline,
|
|
27
27
|
// and quiet on a converged target. The gulp verbs get it from the `defaults`
|
|
@@ -43,7 +43,7 @@ module.exports = async function (options) {
|
|
|
43
43
|
// Extended mode — opt into tests that hit REAL external services (Firebase, analytics,
|
|
44
44
|
// update feeds) instead of skipping them. Off by default so `npx omega test` stays fast and
|
|
45
45
|
// offline-safe. The canonical signal is the unprefixed `TEST_EXTENDED_MODE` env var — the
|
|
46
|
-
// SAME name
|
|
46
|
+
// SAME name on every framework (cross-framework parity); `--extended` is the CLI
|
|
47
47
|
// shorthand. Once set on process.env it propagates to every spawned child (electron
|
|
48
48
|
// main/renderer/boot, the gulp boot build) automatically via `{ ...process.env }`.
|
|
49
49
|
const extended = options.extended === true
|
|
@@ -58,7 +58,7 @@ module.exports = async function (options) {
|
|
|
58
58
|
// When @omega.js/desktop itself runs its own boot-layer tests (the cwd's package.json is @omega.js/desktop's), there's
|
|
59
59
|
// no real consumer app to boot. Point the boot runner at the fixture under
|
|
60
60
|
// dist/test/fixtures/consumer-app unless the caller has already set OMEGA_TEST_BOOT_PROJECT
|
|
61
|
-
// explicitly.
|
|
61
|
+
// explicitly.
|
|
62
62
|
if (!process.env.OMEGA_TEST_BOOT_PROJECT) {
|
|
63
63
|
try {
|
|
64
64
|
const cwdPkg = JSON.parse(fs.readFileSync(path.join(process.cwd(), 'package.json'), 'utf8'));
|
|
@@ -104,19 +104,19 @@ module.exports = async function (options) {
|
|
|
104
104
|
// ONE target to every target, so a distinct code lets it count this as a
|
|
105
105
|
// miss rather than a failure (#814).
|
|
106
106
|
process.exitCode = noMatchExitCode();
|
|
107
|
-
|
|
107
|
+
detachLog();
|
|
108
108
|
return;
|
|
109
109
|
}
|
|
110
110
|
|
|
111
111
|
if (result.failed > 0) {
|
|
112
112
|
process.exitCode = 1;
|
|
113
|
-
|
|
113
|
+
detachLog();
|
|
114
114
|
throw new Error(`${result.failed} test(s) failed`);
|
|
115
115
|
}
|
|
116
116
|
|
|
117
117
|
// Close test.log before exiting. Nothing to flush: every write already went
|
|
118
118
|
// to the fd synchronously (#197), so the Results block survives the exit
|
|
119
119
|
// below whatever happens — detach() just closes the handle.
|
|
120
|
-
|
|
120
|
+
detachLog();
|
|
121
121
|
process.exit(0);
|
|
122
122
|
};
|
package/dist/commands/update.js
CHANGED
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `omega update` — dependency freshness
|
|
2
|
+
* `omega update` — dependency freshness (npu-outdated semantics):
|
|
3
3
|
* installed/wanted/latest + patch/minor/major per dep, releases younger than
|
|
4
|
-
* --min-age days (default 7) QUARANTINED.
|
|
4
|
+
* --min-age days (default 7) QUARANTINED. A bare run installs the
|
|
5
5
|
* non-quarantined, non-breaking set (`--major` opts into breaking) through
|
|
6
|
-
* npu when present
|
|
6
|
+
* npu when present; `--dry-run` reports and installs nothing. The whole verb
|
|
7
|
+
* is the shared devkit implementation.
|
|
7
8
|
*/
|
|
8
|
-
const
|
|
9
|
-
const logger =
|
|
9
|
+
const build = require('../build.js');
|
|
10
|
+
const logger = build.logger('update');
|
|
10
11
|
const { runUpdate } = require('../vendor/devkit/update.js');
|
|
11
12
|
|
|
12
13
|
module.exports = async function (options) {
|
|
13
14
|
await runUpdate({
|
|
14
15
|
dir: process.cwd(),
|
|
15
|
-
|
|
16
|
+
dryRun: options.dryRun || options['dry-run'],
|
|
16
17
|
major: options.major,
|
|
17
18
|
minAge: options.minAge ?? options['min-age'],
|
|
18
19
|
forceFresh: options.forceFresh || options['force-fresh'],
|
|
@@ -38,8 +38,8 @@ const { certificateExpiry, EXPIRY_WARN_DAYS } = require('../vendor/devkit/certs.
|
|
|
38
38
|
const { signingPathCandidates } = require('../vendor/devkit/signing-env.js');
|
|
39
39
|
const { requiredWhenHolds } = require('../vendor/config/env-rules.js');
|
|
40
40
|
|
|
41
|
-
const
|
|
42
|
-
const logger =
|
|
41
|
+
const build = require('../build.js');
|
|
42
|
+
const logger = build.logger('validate-certs');
|
|
43
43
|
|
|
44
44
|
module.exports = async function (options) {
|
|
45
45
|
options = options || {};
|
|
@@ -48,8 +48,8 @@ module.exports = async function (options) {
|
|
|
48
48
|
logger.log('Validating signing prerequisites...');
|
|
49
49
|
|
|
50
50
|
const platform = process.platform;
|
|
51
|
-
const config =
|
|
52
|
-
const winStrategy =
|
|
51
|
+
const config = build.getConfig();
|
|
52
|
+
const winStrategy = build.getWindowsSignStrategy();
|
|
53
53
|
|
|
54
54
|
const issues = [];
|
|
55
55
|
|
package/dist/commands/version.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// Libraries
|
|
2
|
-
const
|
|
3
|
-
const logger =
|
|
2
|
+
const build = require('../build.js');
|
|
3
|
+
const logger = build.logger('version');
|
|
4
4
|
|
|
5
|
-
const package =
|
|
5
|
+
const package = build.getPackage('main');
|
|
6
6
|
|
|
7
7
|
module.exports = async function (options) {
|
|
8
8
|
logger.log(package.version);
|
|
@@ -27,7 +27,7 @@ env:
|
|
|
27
27
|
# `KEY: ${{ secrets.KEY }}` line per `delivery: { desktop: 'ci' | 'bake' }`
|
|
28
28
|
# entry (@omega.js/config's env-delivery.js), re-rendered by every verb's
|
|
29
29
|
# ensureTarget. Signing, notarization, store and analytics credentials all
|
|
30
|
-
# arrive here, workflow-wide
|
|
30
|
+
# arrive here, workflow-wide: the jobs and steps below consume them without
|
|
31
31
|
# restating one. Add a key to the schema, not to this file.
|
|
32
32
|
{{ githubSecrets }}
|
|
33
33
|
|
|
@@ -103,7 +103,7 @@ jobs:
|
|
|
103
103
|
|
|
104
104
|
{{ installFirewall }}
|
|
105
105
|
|
|
106
|
-
# On Windows, force cmd for every shell step in this job
|
|
106
|
+
# On Windows, force cmd for every shell step in this job: the runner's default
|
|
107
107
|
# is PowerShell 7 which has its own ExecutionPolicy/wrapping quirks that cause
|
|
108
108
|
# `npm ci` and similar to exit silently with no captured output. cmd has none
|
|
109
109
|
# of that. mac/linux use their default bash regardless of this flag (per
|
|
@@ -135,7 +135,7 @@ jobs:
|
|
|
135
135
|
echo "NPM: $(npm -v)"
|
|
136
136
|
echo "Omega: $(node "${{ github.workspace }}/node_modules/@omega.js/desktop/bin/omega" version)"
|
|
137
137
|
|
|
138
|
-
# macOS
|
|
138
|
+
# macOS: decode signing assets from secrets, then sign + notarize + publish.
|
|
139
139
|
# `npx omega deploy`'s precheck uploads .p12 / .p8 files as base64-encoded secrets;
|
|
140
140
|
# the workflow decodes them back to disk for electron-builder + notarytool to read.
|
|
141
141
|
# Each decode is gated on its secret EXISTING (#872): `base64 --decode` of an
|
|
@@ -150,13 +150,13 @@ jobs:
|
|
|
150
150
|
if [ -n "${{ secrets.CSC_LINK }}" ]; then
|
|
151
151
|
echo "${{ secrets.CSC_LINK }}" | base64 --decode > config/certs/dev-id.p12
|
|
152
152
|
else
|
|
153
|
-
echo "No CSC_LINK secret: run omega deploy
|
|
153
|
+
echo "No CSC_LINK secret: run omega deploy at the brand root (its precheck pushes them). A mac build must be signed."
|
|
154
154
|
exit 1
|
|
155
155
|
fi
|
|
156
156
|
if [ -n "${{ secrets.APPLE_API_KEY }}" ]; then
|
|
157
157
|
echo "${{ secrets.APPLE_API_KEY }}" | base64 --decode > config/certs/AuthKey.p8
|
|
158
158
|
else
|
|
159
|
-
echo "No APPLE_API_KEY secret: run omega deploy
|
|
159
|
+
echo "No APPLE_API_KEY secret: run omega deploy at the brand root (its precheck pushes them). A mac build must be notarized."
|
|
160
160
|
exit 1
|
|
161
161
|
fi
|
|
162
162
|
# The two file-path OVERRIDES of the workflow env: electron-builder and
|
|
@@ -176,7 +176,7 @@ jobs:
|
|
|
176
176
|
# Linux: install snapcraft when (a) the brand still SHIPS the snap format
|
|
177
177
|
# (`platforms.linux.formats.snap`, on unless dropped with `false`) AND
|
|
178
178
|
# (b) SNAPCRAFT_STORE_CREDENTIALS is set as a repo secret. Without the secret we
|
|
179
|
-
# skip snapcraft install entirely
|
|
179
|
+
# skip snapcraft install entirely: build-config.js auto-skips the snap target on
|
|
180
180
|
# the same condition, so the build still produces .deb + .AppImage cleanly with
|
|
181
181
|
# no snap publish attempt and no failure.
|
|
182
182
|
- name: Install Snapcraft (Linux, when snap enabled + creds present)
|
|
@@ -192,7 +192,7 @@ jobs:
|
|
|
192
192
|
CONFIG_OK=0
|
|
193
193
|
echo "platforms.linux.formats.snap is dropped, skipping snapcraft install."
|
|
194
194
|
fi
|
|
195
|
-
# (b) Credentials check
|
|
195
|
+
# (b) Credentials check: empty secret means no publish creds available.
|
|
196
196
|
if [ -n "$SNAPCRAFT_STORE_CREDENTIALS" ]; then
|
|
197
197
|
CREDS_OK=1
|
|
198
198
|
else
|
|
@@ -204,7 +204,7 @@ jobs:
|
|
|
204
204
|
echo "Snapcraft installed."
|
|
205
205
|
fi
|
|
206
206
|
|
|
207
|
-
# Linux
|
|
207
|
+
# Linux: no signing. The workflow env carries the mac credentials as the
|
|
208
208
|
# base64 secrets themselves (only the mac job decodes them to disk), and a
|
|
209
209
|
# leg that never signs for mac has no business holding them: empty reads as
|
|
210
210
|
# UNSET after the build's sanitize pass (#872).
|
|
@@ -215,18 +215,18 @@ jobs:
|
|
|
215
215
|
APPLE_API_KEY: ''
|
|
216
216
|
run: npm run release:local
|
|
217
217
|
|
|
218
|
-
# Windows
|
|
218
|
+
# Windows: package (build + electron-builder package) unsigned. We do NOT publish
|
|
219
219
|
# here. Mac/linux's `npm run release:local` step already created the GH Release via
|
|
220
220
|
# electron-builder publish; windows-sign uploads signed .exe to that same release.
|
|
221
|
-
# shell: cmd as above
|
|
221
|
+
# shell: cmd as above. PowerShell 7's wrapping breaks long-running npm scripts.
|
|
222
222
|
- if: matrix.os == 'windows-latest'
|
|
223
223
|
shell: cmd
|
|
224
224
|
env:
|
|
225
225
|
OMEGA_SKIP_WIN_SIGN: 'true'
|
|
226
226
|
# The workflow env carries the mac signing cert (CSC_LINK is the
|
|
227
227
|
# base64 .p12 the mac job decodes); electron-builder would otherwise
|
|
228
|
-
# try to sign the Windows build with it. Empty reads as UNSET
|
|
229
|
-
# build's sanitize pass drops it
|
|
228
|
+
# try to sign the Windows build with it. Empty reads as UNSET (the
|
|
229
|
+
# build's sanitize pass drops it), so this step packages unsigned, as
|
|
230
230
|
# it always did. windows-sign signs separately.
|
|
231
231
|
CSC_LINK: ''
|
|
232
232
|
CSC_KEY_PASSWORD: ''
|
|
@@ -276,9 +276,9 @@ jobs:
|
|
|
276
276
|
name: Sign Windows
|
|
277
277
|
needs: [setup, build, windows-strategy]
|
|
278
278
|
# Strategy comes from config platforms.windows.signing.strategy (read by windows-strategy job).
|
|
279
|
-
# self-hosted (default)
|
|
280
|
-
# cloud
|
|
281
|
-
# local
|
|
279
|
+
# self-hosted (default): runs on a self-hosted runner with EV USB token attached
|
|
280
|
+
# cloud: runs on hosted windows-latest, calls cloud signing provider
|
|
281
|
+
# local: skip this job; sign locally via `npx omega sign-windows`
|
|
282
282
|
# The trigger half of the signer guard (#875): only a DISPATCH may reach the
|
|
283
283
|
# box that holds the EV token, so a `pull_request` or `push` trigger added to
|
|
284
284
|
# this file later skips the sign job instead of signing a stray build. A skip,
|
|
@@ -298,7 +298,7 @@ jobs:
|
|
|
298
298
|
defaults:
|
|
299
299
|
run:
|
|
300
300
|
shell: cmd
|
|
301
|
-
# Signing credentials
|
|
301
|
+
# Signing credentials: self-hosted EV USB token (WIN_EV_TOKEN_PATH,
|
|
302
302
|
# WIN_CSC_KEY_PASSWORD, SIGNTOOL_PATH) and the cloud providers (only the set
|
|
303
303
|
# `platforms.windows.signing.cloud.provider` names is consumed), all arrive
|
|
304
304
|
# through the workflow's generated env block. Set them in the brand .env and
|
|
@@ -348,11 +348,11 @@ jobs:
|
|
|
348
348
|
{{ installFirewall }}
|
|
349
349
|
- run: sfw npm ci {{ installWorkspace }}
|
|
350
350
|
# Flip the releases-repo release from Draft to Published so electron-updater
|
|
351
|
-
# can read it. Idempotent
|
|
351
|
+
# can read it. Idempotent: safe to run even if already published. ONLY runs
|
|
352
352
|
# on all-platforms builds: a partial run (e.g. `--platforms windows`) leaves
|
|
353
353
|
# the release as a draft, so subsequent runs can fill in the missing platform
|
|
354
354
|
# assets before electron-updater starts seeing the version.
|
|
355
355
|
- if: needs.setup.outputs.mac == 'true' && needs.setup.outputs.linux == 'true' && needs.setup.outputs.windows == 'true'
|
|
356
356
|
run: node "${{ github.workspace }}/node_modules/@omega.js/desktop/bin/omega" finalize-release --publish
|
|
357
357
|
- if: needs.setup.outputs.mac != 'true' || needs.setup.outputs.linux != 'true' || needs.setup.outputs.windows != 'true'
|
|
358
|
-
run: echo "Partial-platform run (mac=${{ needs.setup.outputs.mac }} linux=${{ needs.setup.outputs.linux }} windows=${{ needs.setup.outputs.windows }})
|
|
358
|
+
run: echo "Partial-platform run (mac=${{ needs.setup.outputs.mac }} linux=${{ needs.setup.outputs.linux }} windows=${{ needs.setup.outputs.windows }}), leaving release as draft. Run with --platforms all to publish."
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# MAS (Mac App Store) Reference Plists
|
|
1
|
+
# MAS (Mac App Store) Reference Plists (ARCHIVED)
|
|
2
2
|
|
|
3
3
|
These entitlement plists are reference material for a future Mac App Store
|
|
4
4
|
distribution implementation. They are **NOT** part of the active scaffold copied
|
|
@@ -24,7 +24,7 @@ Team ID + appId at build time.
|
|
|
24
24
|
## Roadmap
|
|
25
25
|
|
|
26
26
|
When MAS support is implemented (currently stubbed in
|
|
27
|
-
`config.targets.mac.mas
|
|
27
|
+
`config.targets.mac.mas`, see `node_modules/@omega.js/manager/docs/desktop/installer-options.md`), this folder will be
|
|
28
28
|
the starting point for the entitlements @omega.js/desktop auto-generates into `dist/config/`
|
|
29
29
|
when `mac.mas.enabled === true`. The structure should be similar to the existing
|
|
30
30
|
`writeMacEntitlements` flow but with separate output files for `mas`, `mas.inherit`,
|
|
@@ -42,7 +42,7 @@ The other MAS-specific concerns:
|
|
|
42
42
|
MAS distribution adds significant non-trivial complexity (sandboxed app, App Store
|
|
43
43
|
review cycle, separate provisioning profile per app, manual submission to App
|
|
44
44
|
Store Connect via Transporter or Xcode). It's the right move only for apps that
|
|
45
|
-
genuinely benefit from App Store distribution
|
|
45
|
+
genuinely benefit from App Store distribution: most consumer apps ship via DMG
|
|
46
46
|
download from a website, not the Mac App Store.
|
|
47
47
|
|
|
48
48
|
If you need MAS now, the legacy @omega.js/desktop (pre-v1) had support that you
|
|
@@ -37,4 +37,4 @@ These are values, not files, and live in the brand `.env` (never here):
|
|
|
37
37
|
|
|
38
38
|
Windows keeps no file here at all: the self-hosted EV USB token is addressed by `WIN_EV_TOKEN_PATH` / `WIN_CSC_KEY_PASSWORD`, and each cloud provider by its own env set.
|
|
39
39
|
|
|
40
|
-
For the whole picture see
|
|
40
|
+
For the whole picture see `node_modules/@omega.js/manager/docs/desktop/signing.md`.
|