@essential-apps/shopify-test-runner 1.0.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/dist/contracts/normalize.d.ts +61 -0
- package/dist/contracts/normalize.d.ts.map +1 -0
- package/dist/contracts/normalize.js +99 -0
- package/dist/contracts/normalize.js.map +1 -0
- package/dist/contracts/normalizeHtml.d.ts +37 -0
- package/dist/contracts/normalizeHtml.d.ts.map +1 -0
- package/dist/contracts/normalizeHtml.js +89 -0
- package/dist/contracts/normalizeHtml.js.map +1 -0
- package/dist/edge/cert.d.ts +44 -0
- package/dist/edge/cert.d.ts.map +1 -0
- package/dist/edge/cert.js +117 -0
- package/dist/edge/cert.js.map +1 -0
- package/dist/edge/edgeProxy.d.ts +43 -0
- package/dist/edge/edgeProxy.d.ts.map +1 -0
- package/dist/edge/edgeProxy.js +297 -0
- package/dist/edge/edgeProxy.js.map +1 -0
- package/dist/edge/nodeShim.d.ts +2 -0
- package/dist/edge/nodeShim.d.ts.map +1 -0
- package/dist/edge/nodeShim.js +217 -0
- package/dist/edge/nodeShim.js.map +1 -0
- package/dist/index.d.ts +39 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +36 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/buildSourceBundle.d.ts +56 -0
- package/dist/lib/buildSourceBundle.d.ts.map +1 -0
- package/dist/lib/buildSourceBundle.js +153 -0
- package/dist/lib/buildSourceBundle.js.map +1 -0
- package/dist/lib/freePort.d.ts +5 -0
- package/dist/lib/freePort.d.ts.map +1 -0
- package/dist/lib/freePort.js +33 -0
- package/dist/lib/freePort.js.map +1 -0
- package/dist/lib/functionBuild.d.ts +99 -0
- package/dist/lib/functionBuild.d.ts.map +1 -0
- package/dist/lib/functionBuild.js +413 -0
- package/dist/lib/functionBuild.js.map +1 -0
- package/dist/lib/neonWsProxy.d.ts +41 -0
- package/dist/lib/neonWsProxy.d.ts.map +1 -0
- package/dist/lib/neonWsProxy.js +101 -0
- package/dist/lib/neonWsProxy.js.map +1 -0
- package/dist/lib/sourceZipUpload.d.ts +45 -0
- package/dist/lib/sourceZipUpload.d.ts.map +1 -0
- package/dist/lib/sourceZipUpload.js +129 -0
- package/dist/lib/sourceZipUpload.js.map +1 -0
- package/dist/lib/stealthLaunch.d.ts +35 -0
- package/dist/lib/stealthLaunch.d.ts.map +1 -0
- package/dist/lib/stealthLaunch.js +46 -0
- package/dist/lib/stealthLaunch.js.map +1 -0
- package/dist/lib/storeAutomation.d.ts +22 -0
- package/dist/lib/storeAutomation.d.ts.map +1 -0
- package/dist/lib/storeAutomation.js +85 -0
- package/dist/lib/storeAutomation.js.map +1 -0
- package/dist/playwright/baseConfig.d.ts +62 -0
- package/dist/playwright/baseConfig.d.ts.map +1 -0
- package/dist/playwright/baseConfig.js +68 -0
- package/dist/playwright/baseConfig.js.map +1 -0
- package/dist/playwright/globalSetup.d.ts +2 -0
- package/dist/playwright/globalSetup.d.ts.map +1 -0
- package/dist/playwright/globalSetup.js +139 -0
- package/dist/playwright/globalSetup.js.map +1 -0
- package/dist/playwright/index.d.ts +9 -0
- package/dist/playwright/index.d.ts.map +1 -0
- package/dist/playwright/index.js +9 -0
- package/dist/playwright/index.js.map +1 -0
- package/dist/probes/fonts.d.ts +4 -0
- package/dist/probes/fonts.d.ts.map +1 -0
- package/dist/probes/fonts.js +255 -0
- package/dist/probes/fonts.js.map +1 -0
- package/dist/probes/mirror.d.ts +4 -0
- package/dist/probes/mirror.d.ts.map +1 -0
- package/dist/probes/mirror.js +260 -0
- package/dist/probes/mirror.js.map +1 -0
- package/dist/probes/runProbe.d.ts +3 -0
- package/dist/probes/runProbe.d.ts.map +1 -0
- package/dist/probes/runProbe.js +219 -0
- package/dist/probes/runProbe.js.map +1 -0
- package/dist/probes/types.d.ts +72 -0
- package/dist/probes/types.d.ts.map +1 -0
- package/dist/probes/types.js +2 -0
- package/dist/probes/types.js.map +1 -0
- package/dist/scripts/_probeSourceUrl.d.ts +3 -0
- package/dist/scripts/_probeSourceUrl.d.ts.map +1 -0
- package/dist/scripts/_probeSourceUrl.js +119 -0
- package/dist/scripts/_probeSourceUrl.js.map +1 -0
- package/dist/scripts/addStore.d.ts +3 -0
- package/dist/scripts/addStore.d.ts.map +1 -0
- package/dist/scripts/addStore.js +46 -0
- package/dist/scripts/addStore.js.map +1 -0
- package/dist/scripts/buildDockerImage.d.ts +3 -0
- package/dist/scripts/buildDockerImage.d.ts.map +1 -0
- package/dist/scripts/buildDockerImage.js +60 -0
- package/dist/scripts/buildDockerImage.js.map +1 -0
- package/dist/scripts/captureAuth.d.ts +3 -0
- package/dist/scripts/captureAuth.d.ts.map +1 -0
- package/dist/scripts/captureAuth.js +124 -0
- package/dist/scripts/captureAuth.js.map +1 -0
- package/dist/scripts/captureContracts.d.ts +3 -0
- package/dist/scripts/captureContracts.d.ts.map +1 -0
- package/dist/scripts/captureContracts.js +517 -0
- package/dist/scripts/captureContracts.js.map +1 -0
- package/dist/scripts/captureRestContracts.d.ts +3 -0
- package/dist/scripts/captureRestContracts.d.ts.map +1 -0
- package/dist/scripts/captureRestContracts.js +245 -0
- package/dist/scripts/captureRestContracts.js.map +1 -0
- package/dist/scripts/checkOperationCoverage.d.ts +3 -0
- package/dist/scripts/checkOperationCoverage.d.ts.map +1 -0
- package/dist/scripts/checkOperationCoverage.js +302 -0
- package/dist/scripts/checkOperationCoverage.js.map +1 -0
- package/dist/scripts/cleanupStores.d.ts +3 -0
- package/dist/scripts/cleanupStores.d.ts.map +1 -0
- package/dist/scripts/cleanupStores.js +77 -0
- package/dist/scripts/cleanupStores.js.map +1 -0
- package/dist/scripts/createStores.d.ts +3 -0
- package/dist/scripts/createStores.d.ts.map +1 -0
- package/dist/scripts/createStores.js +66 -0
- package/dist/scripts/createStores.js.map +1 -0
- package/dist/scripts/deployAppVersion.d.ts +3 -0
- package/dist/scripts/deployAppVersion.d.ts.map +1 -0
- package/dist/scripts/deployAppVersion.js +591 -0
- package/dist/scripts/deployAppVersion.js.map +1 -0
- package/dist/scripts/devE2eBackend.d.ts +3 -0
- package/dist/scripts/devE2eBackend.d.ts.map +1 -0
- package/dist/scripts/devE2eBackend.js +117 -0
- package/dist/scripts/devE2eBackend.js.map +1 -0
- package/dist/scripts/devOnlineBackend.d.ts +3 -0
- package/dist/scripts/devOnlineBackend.d.ts.map +1 -0
- package/dist/scripts/devOnlineBackend.js +117 -0
- package/dist/scripts/devOnlineBackend.js.map +1 -0
- package/dist/scripts/installApp.d.ts +3 -0
- package/dist/scripts/installApp.d.ts.map +1 -0
- package/dist/scripts/installApp.js +163 -0
- package/dist/scripts/installApp.js.map +1 -0
- package/dist/scripts/listStores.d.ts +3 -0
- package/dist/scripts/listStores.d.ts.map +1 -0
- package/dist/scripts/listStores.js +18 -0
- package/dist/scripts/listStores.js.map +1 -0
- package/dist/scripts/runDocker.d.ts +3 -0
- package/dist/scripts/runDocker.d.ts.map +1 -0
- package/dist/scripts/runDocker.js +88 -0
- package/dist/scripts/runDocker.js.map +1 -0
- package/dist/scripts/runDockerAuth.d.ts +3 -0
- package/dist/scripts/runDockerAuth.d.ts.map +1 -0
- package/dist/scripts/runDockerAuth.js +108 -0
- package/dist/scripts/runDockerAuth.js.map +1 -0
- package/dist/scripts/runDockerOffline.d.ts +3 -0
- package/dist/scripts/runDockerOffline.d.ts.map +1 -0
- package/dist/scripts/runDockerOffline.js +129 -0
- package/dist/scripts/runDockerOffline.js.map +1 -0
- package/dist/scripts/runDockerOfflineExplore.d.ts +3 -0
- package/dist/scripts/runDockerOfflineExplore.d.ts.map +1 -0
- package/dist/scripts/runDockerOfflineExplore.js +116 -0
- package/dist/scripts/runDockerOfflineExplore.js.map +1 -0
- package/dist/scripts/runIsolatedDockerOffline.d.ts +3 -0
- package/dist/scripts/runIsolatedDockerOffline.d.ts.map +1 -0
- package/dist/scripts/runIsolatedDockerOffline.js +351 -0
- package/dist/scripts/runIsolatedDockerOffline.js.map +1 -0
- package/dist/scripts/runOffline.d.ts +3 -0
- package/dist/scripts/runOffline.d.ts.map +1 -0
- package/dist/scripts/runOffline.js +521 -0
- package/dist/scripts/runOffline.js.map +1 -0
- package/dist/scripts/runOfflineE2e.d.ts +3 -0
- package/dist/scripts/runOfflineE2e.d.ts.map +1 -0
- package/dist/scripts/runOfflineE2e.js +408 -0
- package/dist/scripts/runOfflineE2e.js.map +1 -0
- package/dist/scripts/runOfflineFullTests.d.ts +3 -0
- package/dist/scripts/runOfflineFullTests.d.ts.map +1 -0
- package/dist/scripts/runOfflineFullTests.js +1456 -0
- package/dist/scripts/runOfflineFullTests.js.map +1 -0
- package/dist/scripts/runSupermachine.d.ts +3 -0
- package/dist/scripts/runSupermachine.d.ts.map +1 -0
- package/dist/scripts/runSupermachine.js +474 -0
- package/dist/scripts/runSupermachine.js.map +1 -0
- package/dist/scripts/runSupermachineAuth.d.ts +3 -0
- package/dist/scripts/runSupermachineAuth.d.ts.map +1 -0
- package/dist/scripts/runSupermachineAuth.js +454 -0
- package/dist/scripts/runSupermachineAuth.js.map +1 -0
- package/dist/scripts/runTests.d.ts +3 -0
- package/dist/scripts/runTests.d.ts.map +1 -0
- package/dist/scripts/runTests.js +278 -0
- package/dist/scripts/runTests.js.map +1 -0
- package/dist/scripts/runVm.d.ts +3 -0
- package/dist/scripts/runVm.d.ts.map +1 -0
- package/dist/scripts/runVm.js +524 -0
- package/dist/scripts/runVm.js.map +1 -0
- package/dist/scripts/runVmAuth.d.ts +3 -0
- package/dist/scripts/runVmAuth.d.ts.map +1 -0
- package/dist/scripts/runVmAuth.js +475 -0
- package/dist/scripts/runVmAuth.js.map +1 -0
- package/dist/scripts/runVmScript.d.ts +3 -0
- package/dist/scripts/runVmScript.d.ts.map +1 -0
- package/dist/scripts/runVmScript.js +242 -0
- package/dist/scripts/runVmScript.js.map +1 -0
- package/dist/scripts/setupTestDb.d.ts +3 -0
- package/dist/scripts/setupTestDb.d.ts.map +1 -0
- package/dist/scripts/setupTestDb.js +61 -0
- package/dist/scripts/setupTestDb.js.map +1 -0
- package/dist/scripts/verifyContracts.d.ts +3 -0
- package/dist/scripts/verifyContracts.d.ts.map +1 -0
- package/dist/scripts/verifyContracts.js +258 -0
- package/dist/scripts/verifyContracts.js.map +1 -0
- package/dist/scripts/verifyRestContracts.d.ts +3 -0
- package/dist/scripts/verifyRestContracts.d.ts.map +1 -0
- package/dist/scripts/verifyRestContracts.js +237 -0
- package/dist/scripts/verifyRestContracts.js.map +1 -0
- package/dist/vite/offlineConfig.d.ts +34 -0
- package/dist/vite/offlineConfig.d.ts.map +1 -0
- package/dist/vite/offlineConfig.js +61 -0
- package/dist/vite/offlineConfig.js.map +1 -0
- package/dist/vite/onlineConfig.d.ts +42 -0
- package/dist/vite/onlineConfig.d.ts.map +1 -0
- package/dist/vite/onlineConfig.js +56 -0
- package/dist/vite/onlineConfig.js.map +1 -0
- package/docker/Dockerfile +67 -0
- package/docker/Dockerfile.vm +137 -0
- package/docker/README.md +50 -0
- package/docker/entrypoint.sh +198 -0
- package/package.json +85 -0
- package/src/contracts/normalize.ts +96 -0
- package/src/contracts/normalizeHtml.ts +98 -0
- package/src/edge/ca.cnf +14 -0
- package/src/edge/ca.crt +22 -0
- package/src/edge/ca.key +28 -0
- package/src/edge/cert.ts +117 -0
- package/src/edge/edgeProxy.ts +390 -0
- package/src/edge/server.cnf +28 -0
- package/src/edge/server.crt +26 -0
- package/src/edge/server.key +28 -0
- package/src/index.ts +67 -0
- package/src/lib/buildSourceBundle.ts +197 -0
- package/src/lib/freePort.ts +33 -0
- package/src/lib/functionBuild.ts +490 -0
- package/src/lib/neonWsProxy.ts +124 -0
- package/src/lib/sourceZipUpload.ts +168 -0
- package/src/lib/stealthLaunch.ts +57 -0
- package/src/lib/storeAutomation.ts +110 -0
- package/src/playwright/baseConfig.ts +120 -0
- package/src/playwright/globalSetup.ts +179 -0
- package/src/playwright/index.ts +11 -0
- package/src/probes/fonts.ts +279 -0
- package/src/probes/mirror.ts +283 -0
- package/src/probes/runProbe.ts +257 -0
- package/src/probes/types.ts +73 -0
- package/src/scripts/addStore.ts +59 -0
- package/src/scripts/buildDockerImage.ts +66 -0
- package/src/scripts/captureAuth.ts +145 -0
- package/src/scripts/captureContracts.ts +675 -0
- package/src/scripts/captureRestContracts.ts +319 -0
- package/src/scripts/checkOperationCoverage.ts +365 -0
- package/src/scripts/cleanupStores.ts +91 -0
- package/src/scripts/createStores.ts +77 -0
- package/src/scripts/deployAppVersion.ts +692 -0
- package/src/scripts/devOnlineBackend.ts +141 -0
- package/src/scripts/installApp.ts +188 -0
- package/src/scripts/listStores.ts +19 -0
- package/src/scripts/runDockerAuth.ts +120 -0
- package/src/scripts/runOffline.ts +577 -0
- package/src/scripts/runOfflineFullTests.ts +1634 -0
- package/src/scripts/runTests.ts +306 -0
- package/src/scripts/runVm.ts +562 -0
- package/src/scripts/runVmAuth.ts +541 -0
- package/src/scripts/runVmScript.ts +282 -0
- package/src/scripts/setupTestDb.ts +71 -0
- package/src/scripts/verifyContracts.ts +310 -0
- package/src/scripts/verifyRestContracts.ts +275 -0
- package/src/vite/onlineConfig.ts +60 -0
|
@@ -0,0 +1,591 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Deploys an app version to any Partner app via the App Management API.
|
|
4
|
+
*
|
|
5
|
+
* Generalization of `deployConformanceExtension.ts`. Where that script
|
|
6
|
+
* was hardcoded to the conformance Partner account / app / extension,
|
|
7
|
+
* this one is parameterized:
|
|
8
|
+
*
|
|
9
|
+
* --app-id numeric Partner-app ID (e.g. 366427176961)
|
|
10
|
+
* --workspace repo containing `shopify.app.<config>.toml` +
|
|
11
|
+
* `app_extensions/<name>/` dirs (e.g. essential-upsell)
|
|
12
|
+
* --config which toml variant (default: `test-online` →
|
|
13
|
+
* reads `shopify.app.test-online.toml`)
|
|
14
|
+
* --org-id Partner org ID (numeric). Required when
|
|
15
|
+
* deploying a function — `appRequestSourceUploadUrl`
|
|
16
|
+
* needs it. Defaults to env
|
|
17
|
+
* `SHOPIFY_ORGANIZATION_ID`.
|
|
18
|
+
*
|
|
19
|
+
* Token comes from env (`SHOPIFY_APP_AUTOMATION_TOKEN`, `atkn_…`),
|
|
20
|
+
* exchanged the same way as conformance.
|
|
21
|
+
*
|
|
22
|
+
* Why this exists when `shopify app deploy` works: tests must never
|
|
23
|
+
* depend on the Shopify CLI (binary mismatch across dev machines,
|
|
24
|
+
* interactive prompts, version drift). This script uses ONLY the
|
|
25
|
+
* App Management GraphQL endpoint — same one the CLI ultimately
|
|
26
|
+
* calls — but skips bundling/Vite/prompts so it's deterministic and
|
|
27
|
+
* scriptable from CI.
|
|
28
|
+
*
|
|
29
|
+
* Two deploy paths
|
|
30
|
+
* ----------------
|
|
31
|
+
* The script picks one of two paths based on what extensions are
|
|
32
|
+
* present:
|
|
33
|
+
*
|
|
34
|
+
* • **Inline `source` path** — fits the whole module list (theme
|
|
35
|
+
* files base64'd inline) into a single GraphQL request. Used
|
|
36
|
+
* when no function/post-purchase is being deployed.
|
|
37
|
+
*
|
|
38
|
+
* • **`sourceUrl` tar+brotli path** — bundles everything into a
|
|
39
|
+
* `.tar.br` archive, uploads to a signed GCS URL, then passes
|
|
40
|
+
* the URL to `appVersionCreate`. Required when a function or
|
|
41
|
+
* post-purchase extension is present.
|
|
42
|
+
*
|
|
43
|
+
* Both formats are accepted by App Management `/unstable/`. The
|
|
44
|
+
* sourceUrl path is what `shopify app deploy` itself uses — see
|
|
45
|
+
* `lib/buildSourceBundle.ts` for the byte-level details (it took
|
|
46
|
+
* a few iterations to discover: the archive format is tar+brotli
|
|
47
|
+
* NOT zip, the WASM is base64-encoded as text NOT raw binary,
|
|
48
|
+
* module entries need `assets`+`target` fields, and function
|
|
49
|
+
* config has specific required keys).
|
|
50
|
+
*
|
|
51
|
+
* Current support matrix:
|
|
52
|
+
* ✅ app_home — application_url + embedded, from the toml
|
|
53
|
+
* ✅ branding — display name, from the toml
|
|
54
|
+
* ✅ app_access — scopes, from the toml
|
|
55
|
+
* ✅ theme_app_extension — `app_extensions/upsells/` (or any
|
|
56
|
+
* `type = "theme"` extension)
|
|
57
|
+
* ✅ function — auto-built via Javy (see
|
|
58
|
+
* lib/functionBuild.ts) and deployed
|
|
59
|
+
* via the sourceUrl path. Requires
|
|
60
|
+
* --org-id and --include-function.
|
|
61
|
+
* ⚠️ checkout_post_purchase — Skipped with a warning (the esbuild
|
|
62
|
+
* step needs extension-specific config;
|
|
63
|
+
* not implemented yet).
|
|
64
|
+
*
|
|
65
|
+
* Usage:
|
|
66
|
+
* node --import tsx packages/runner/src/scripts/deployAppVersion.ts \\
|
|
67
|
+
* --app-id 366427176961 \\
|
|
68
|
+
* --workspace /Users/domas/Developer/supercorp/essential-upsell \\
|
|
69
|
+
* --config test-online \\
|
|
70
|
+
* --org-id 217838969 \\
|
|
71
|
+
* [--include-function]
|
|
72
|
+
*/
|
|
73
|
+
import { createHash, randomUUID } from 'node:crypto';
|
|
74
|
+
import { readFileSync, readdirSync, statSync } from 'node:fs';
|
|
75
|
+
import { resolve } from 'node:path';
|
|
76
|
+
import { appManagementGraphQL, exchangeAutomationToken, } from '@essential-apps/shopify-test-core';
|
|
77
|
+
import { tmpdir } from 'node:os';
|
|
78
|
+
import { join } from 'node:path';
|
|
79
|
+
import { buildSourceBundle, readExtensionFilesAsBuffers, } from '../lib/buildSourceBundle.js';
|
|
80
|
+
import { requestSourceUploadUrl, uploadSourceToSignedUrl, } from '../lib/sourceZipUpload.js';
|
|
81
|
+
// NOTE: buildFunctionWasm is imported dynamically inside main() so
|
|
82
|
+
// the script still typechecks/runs even on hosts without esbuild
|
|
83
|
+
// available (e.g. Docker images that don't ship the build deps).
|
|
84
|
+
/** UUID v5 of `subject` under the OID namespace. Stable across runs
|
|
85
|
+
* so re-deploying with the same handle reuses the same uid (Shopify
|
|
86
|
+
* treats uid as the stable per-module identity). Matches the
|
|
87
|
+
* algorithm used in `deployConformanceExtension.ts`. */
|
|
88
|
+
function stableUuid(subject) {
|
|
89
|
+
const namespace = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';
|
|
90
|
+
return createHash('sha1')
|
|
91
|
+
.update(Buffer.from(namespace.replace(/-/g, ''), 'hex'))
|
|
92
|
+
.update(subject)
|
|
93
|
+
.digest()
|
|
94
|
+
.toString('hex')
|
|
95
|
+
.replace(/(.{8})(.{4})(.{4})(.{4})(.{12})/, '$1-$2-$3-$4-$5');
|
|
96
|
+
}
|
|
97
|
+
function parseArgs(argv) {
|
|
98
|
+
const args = {
|
|
99
|
+
appId: '',
|
|
100
|
+
workspace: '',
|
|
101
|
+
config: 'test-online',
|
|
102
|
+
orgId: process.env['SHOPIFY_ORGANIZATION_ID'] ?? '',
|
|
103
|
+
nameOverride: null,
|
|
104
|
+
themeOnly: false,
|
|
105
|
+
includeFunction: false,
|
|
106
|
+
help: false,
|
|
107
|
+
};
|
|
108
|
+
for (let i = 0; i < argv.length; i++) {
|
|
109
|
+
const a = argv[i];
|
|
110
|
+
const next = () => {
|
|
111
|
+
const v = argv[++i];
|
|
112
|
+
if (v === undefined)
|
|
113
|
+
throw new Error(`${a} requires a value`);
|
|
114
|
+
return v;
|
|
115
|
+
};
|
|
116
|
+
switch (a) {
|
|
117
|
+
case '--app-id':
|
|
118
|
+
args.appId = next();
|
|
119
|
+
break;
|
|
120
|
+
case '--workspace':
|
|
121
|
+
args.workspace = next();
|
|
122
|
+
break;
|
|
123
|
+
case '--config':
|
|
124
|
+
args.config = next();
|
|
125
|
+
break;
|
|
126
|
+
case '--org-id':
|
|
127
|
+
args.orgId = next();
|
|
128
|
+
break;
|
|
129
|
+
case '--name':
|
|
130
|
+
args.nameOverride = next();
|
|
131
|
+
break;
|
|
132
|
+
case '--theme-only':
|
|
133
|
+
args.themeOnly = true;
|
|
134
|
+
break;
|
|
135
|
+
case '--include-function':
|
|
136
|
+
// Opt-in experimental flag. Currently runs the Javy build but
|
|
137
|
+
// does not attempt the deploy (server rejects with "Wasm file
|
|
138
|
+
// is not present" — undiscovered manifest convention).
|
|
139
|
+
args.includeFunction = true;
|
|
140
|
+
break;
|
|
141
|
+
case '--help':
|
|
142
|
+
case '-h':
|
|
143
|
+
args.help = true;
|
|
144
|
+
break;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return args;
|
|
148
|
+
}
|
|
149
|
+
const USAGE = `Usage: deployAppVersion --app-id <id> --workspace <path> [--config test-online] [--org-id <id>]
|
|
150
|
+
|
|
151
|
+
--app-id Numeric Partner-app ID (required). The token in
|
|
152
|
+
$SHOPIFY_APP_AUTOMATION_TOKEN must belong to this app.
|
|
153
|
+
--workspace Repo root containing shopify.app.<config>.toml +
|
|
154
|
+
app_extensions/<name>/ (required).
|
|
155
|
+
--config Which toml variant. Default: test-online → reads
|
|
156
|
+
shopify.app.test-online.toml from the workspace.
|
|
157
|
+
--org-id Numeric Partner-org ID. Required when deploying a
|
|
158
|
+
function (needed to mint a source-upload URL).
|
|
159
|
+
Defaults to $SHOPIFY_ORGANIZATION_ID.
|
|
160
|
+
--theme-only Skip app_home/branding/app_access — push only the
|
|
161
|
+
theme extension. Useful for iterating on storefront
|
|
162
|
+
blocks without touching backend config.
|
|
163
|
+
--skip-function Don't build/deploy the function module even if
|
|
164
|
+
app_extensions/discounts is present.
|
|
165
|
+
`;
|
|
166
|
+
// -----------------------------------------------------------------
|
|
167
|
+
// TOML helpers (top-level config, NOT extension toml — that's parsed
|
|
168
|
+
// in lib/functionBuild.ts).
|
|
169
|
+
// -----------------------------------------------------------------
|
|
170
|
+
/** Minimal TOML reader — handles the subset shopify.app.*.toml uses
|
|
171
|
+
* (top-level keys, [section.name] tables, arrays). Avoids a runtime
|
|
172
|
+
* dep; full TOML compliance not needed. */
|
|
173
|
+
function readShopifyAppToml(path) {
|
|
174
|
+
const txt = readFileSync(path, 'utf8');
|
|
175
|
+
const root = {};
|
|
176
|
+
let current = root;
|
|
177
|
+
for (const rawLine of txt.split('\n')) {
|
|
178
|
+
const line = rawLine.replace(/#.*$/, '').trim();
|
|
179
|
+
if (!line)
|
|
180
|
+
continue;
|
|
181
|
+
const tableMatch = line.match(/^\[([a-z0-9_.]+)\]$/i);
|
|
182
|
+
if (tableMatch) {
|
|
183
|
+
const segments = tableMatch[1].split('.');
|
|
184
|
+
current = root;
|
|
185
|
+
for (const seg of segments) {
|
|
186
|
+
current[seg] ??= {};
|
|
187
|
+
current = current[seg];
|
|
188
|
+
}
|
|
189
|
+
continue;
|
|
190
|
+
}
|
|
191
|
+
const kvMatch = line.match(/^([a-z0-9_]+)\s*=\s*(.+)$/i);
|
|
192
|
+
if (kvMatch) {
|
|
193
|
+
const key = kvMatch[1];
|
|
194
|
+
const rawVal = kvMatch[2].trim();
|
|
195
|
+
current[key] = parseTomlValue(rawVal);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
return root;
|
|
199
|
+
}
|
|
200
|
+
function parseTomlValue(raw) {
|
|
201
|
+
if (raw.startsWith('"') && raw.endsWith('"'))
|
|
202
|
+
return raw.slice(1, -1);
|
|
203
|
+
if (raw === 'true')
|
|
204
|
+
return true;
|
|
205
|
+
if (raw === 'false')
|
|
206
|
+
return false;
|
|
207
|
+
if (/^-?\d+(\.\d+)?$/.test(raw))
|
|
208
|
+
return Number(raw);
|
|
209
|
+
if (raw.startsWith('[') && raw.endsWith(']')) {
|
|
210
|
+
const inner = raw.slice(1, -1).trim();
|
|
211
|
+
if (!inner)
|
|
212
|
+
return [];
|
|
213
|
+
return inner.split(',').map((s) => parseTomlValue(s.trim()));
|
|
214
|
+
}
|
|
215
|
+
return raw;
|
|
216
|
+
}
|
|
217
|
+
// -----------------------------------------------------------------
|
|
218
|
+
// Inline file reader for the theme extension (used in `source` path).
|
|
219
|
+
// -----------------------------------------------------------------
|
|
220
|
+
/** Read every file under `dir` recursively, return `{ rel: base64 }`. */
|
|
221
|
+
function readExtensionFilesBase64(extensionDir) {
|
|
222
|
+
const out = {};
|
|
223
|
+
const SKIP_DIRS = new Set([
|
|
224
|
+
'node_modules',
|
|
225
|
+
'.git',
|
|
226
|
+
'src',
|
|
227
|
+
'dist',
|
|
228
|
+
'frontend',
|
|
229
|
+
'generated',
|
|
230
|
+
]);
|
|
231
|
+
function walk(dir, rel) {
|
|
232
|
+
for (const name of readdirSync(dir)) {
|
|
233
|
+
const full = resolve(dir, name);
|
|
234
|
+
const relPath = rel ? `${rel}/${name}` : name;
|
|
235
|
+
const st = statSync(full);
|
|
236
|
+
if (st.isDirectory()) {
|
|
237
|
+
if (SKIP_DIRS.has(name) || name.startsWith('.'))
|
|
238
|
+
continue;
|
|
239
|
+
walk(full, relPath);
|
|
240
|
+
continue;
|
|
241
|
+
}
|
|
242
|
+
if (name === 'shopify.extension.toml')
|
|
243
|
+
continue;
|
|
244
|
+
if (name === 'package.json')
|
|
245
|
+
continue;
|
|
246
|
+
if (name === 'tsconfig.json')
|
|
247
|
+
continue;
|
|
248
|
+
if (name === '.shopifyignore' || name === '.gitignore')
|
|
249
|
+
continue;
|
|
250
|
+
if (name.endsWith('.config.ts') || name.endsWith('.config.mts'))
|
|
251
|
+
continue;
|
|
252
|
+
out[relPath] = readFileSync(full).toString('base64');
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
walk(extensionDir, '');
|
|
256
|
+
return out;
|
|
257
|
+
}
|
|
258
|
+
const CREATE_APP_VERSION_MUTATION = `
|
|
259
|
+
mutation CreateAppVersion(
|
|
260
|
+
$appId: ID!
|
|
261
|
+
$version: AppVersionInput!
|
|
262
|
+
$metadata: VersionMetadataInput
|
|
263
|
+
) {
|
|
264
|
+
appVersionCreate(appId: $appId, version: $version, metadata: $metadata) {
|
|
265
|
+
version {
|
|
266
|
+
id
|
|
267
|
+
metadata { versionTag message }
|
|
268
|
+
appModules { uuid handle specification { identifier name } }
|
|
269
|
+
}
|
|
270
|
+
userErrors { field message category code on }
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
`;
|
|
274
|
+
const RELEASE_APP_VERSION_MUTATION = `
|
|
275
|
+
mutation ReleaseAppVersion($appId: ID!, $versionId: ID!) {
|
|
276
|
+
appReleaseCreate(appId: $appId, versionId: $versionId) {
|
|
277
|
+
userErrors { field message }
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
`;
|
|
281
|
+
async function main() {
|
|
282
|
+
const args = parseArgs(process.argv.slice(2));
|
|
283
|
+
if (args.help) {
|
|
284
|
+
console.log(USAGE);
|
|
285
|
+
return;
|
|
286
|
+
}
|
|
287
|
+
if (!args.appId || !args.workspace) {
|
|
288
|
+
console.error(USAGE);
|
|
289
|
+
throw new Error('--app-id and --workspace are required');
|
|
290
|
+
}
|
|
291
|
+
const token = process.env['SHOPIFY_APP_AUTOMATION_TOKEN'] ?? '';
|
|
292
|
+
if (!token) {
|
|
293
|
+
throw new Error(`SHOPIFY_APP_AUTOMATION_TOKEN env var is required. Mint one at:\n` +
|
|
294
|
+
` Dev Dashboard → app → Settings → App automation tokens`);
|
|
295
|
+
}
|
|
296
|
+
const tomlPath = resolve(args.workspace, `shopify.app.${args.config}.toml`);
|
|
297
|
+
console.log(`\n› Reading app config from ${tomlPath}`);
|
|
298
|
+
const toml = readShopifyAppToml(tomlPath);
|
|
299
|
+
const name = args.nameOverride ?? toml['name'] ?? 'Untitled App';
|
|
300
|
+
const handle = toml['handle'] ?? 'untitled-app';
|
|
301
|
+
const applicationUrl = toml['application_url'] ?? '';
|
|
302
|
+
const embedded = toml['embedded'] !== false;
|
|
303
|
+
const scopes = toml['access_scopes']?.['scopes'] ?? '';
|
|
304
|
+
const redirectUrls = toml['auth']?.['redirect_urls'] ?? [];
|
|
305
|
+
console.log(` name : ${name}`);
|
|
306
|
+
console.log(` handle : ${handle}`);
|
|
307
|
+
console.log(` application_url : ${applicationUrl}`);
|
|
308
|
+
console.log(` embedded : ${embedded}`);
|
|
309
|
+
console.log(` scopes : ${scopes}`);
|
|
310
|
+
console.log(` redirect_urls : ${redirectUrls.length} entry(ies)`);
|
|
311
|
+
// -------------------------------------------------------------
|
|
312
|
+
// Detect what extensions are present in the workspace.
|
|
313
|
+
// -------------------------------------------------------------
|
|
314
|
+
const themeDir = resolve(args.workspace, 'app_extensions/upsells');
|
|
315
|
+
const functionDir = resolve(args.workspace, 'app_extensions/discounts');
|
|
316
|
+
const postPurchaseDir = resolve(args.workspace, 'app_extensions/post-purchase-ui');
|
|
317
|
+
const hasTheme = exists(themeDir);
|
|
318
|
+
const hasFunctionDir = exists(functionDir);
|
|
319
|
+
const hasPostPurchase = exists(postPurchaseDir);
|
|
320
|
+
const includeFunction = hasFunctionDir && args.includeFunction;
|
|
321
|
+
if (hasFunctionDir && !args.includeFunction) {
|
|
322
|
+
console.warn(`\n⚠ Function extension at ${functionDir} — SKIPPING the deploy.\n` +
|
|
323
|
+
` Pass --include-function to build the WASM (via Javy) and deploy\n` +
|
|
324
|
+
` it via the sourceUrl tar+brotli path.`);
|
|
325
|
+
}
|
|
326
|
+
if (hasPostPurchase) {
|
|
327
|
+
console.warn(`\n⚠ Post-purchase extension at ${postPurchaseDir} — SKIPPING (the\n` +
|
|
328
|
+
` esbuild bundling step is extension-specific and not yet\n` +
|
|
329
|
+
` implemented in this script).`);
|
|
330
|
+
}
|
|
331
|
+
// Function ⇒ must use sourceUrl tar+brotli path; the WASM doesn't
|
|
332
|
+
// fit cleanly into an inline source manifest. Theme alone can stay
|
|
333
|
+
// inline.
|
|
334
|
+
const useSourceUrl = includeFunction;
|
|
335
|
+
console.log(`\n› Deploy path: ${useSourceUrl ? 'sourceUrl (tar+brotli, signed-URL upload)' : 'inline source'}`);
|
|
336
|
+
if (useSourceUrl && !args.orgId) {
|
|
337
|
+
throw new Error(`--org-id (or SHOPIFY_ORGANIZATION_ID env) is required when deploying\n` +
|
|
338
|
+
` a function — appRequestSourceUploadUrl needs the org ID.`);
|
|
339
|
+
}
|
|
340
|
+
// -------------------------------------------------------------
|
|
341
|
+
// Build the base module list (same in both paths).
|
|
342
|
+
// -------------------------------------------------------------
|
|
343
|
+
const baseModules = [];
|
|
344
|
+
if (!args.themeOnly) {
|
|
345
|
+
baseModules.push({
|
|
346
|
+
uid: stableUuid(`${handle}:app_home`),
|
|
347
|
+
type: 'app_home',
|
|
348
|
+
handle: 'app-home',
|
|
349
|
+
config: { app_url: applicationUrl, embedded },
|
|
350
|
+
});
|
|
351
|
+
baseModules.push({
|
|
352
|
+
uid: stableUuid(`${handle}:branding`),
|
|
353
|
+
type: 'branding',
|
|
354
|
+
handle: 'branding',
|
|
355
|
+
config: { name },
|
|
356
|
+
});
|
|
357
|
+
baseModules.push({
|
|
358
|
+
uid: stableUuid(`${handle}:app_access`),
|
|
359
|
+
type: 'app_access',
|
|
360
|
+
handle: 'app-access',
|
|
361
|
+
// ONLY `scopes` — `redirect_url_allowlist` and other nested
|
|
362
|
+
// keys are rejected by the App Management /unstable/ endpoint.
|
|
363
|
+
// See deployConformanceExtension.ts for the historical record.
|
|
364
|
+
config: { scopes },
|
|
365
|
+
});
|
|
366
|
+
}
|
|
367
|
+
// -------------------------------------------------------------
|
|
368
|
+
// Exchange the automation token. We need this regardless of path.
|
|
369
|
+
// -------------------------------------------------------------
|
|
370
|
+
console.log(`\n› Exchanging automation token for App Management bearer…`);
|
|
371
|
+
const { accessToken, expiresInSeconds, scope: tokenScope } = await exchangeAutomationToken(token);
|
|
372
|
+
console.log(` ✓ token (${expiresInSeconds}s, scope: ${tokenScope})`);
|
|
373
|
+
const versionInput = useSourceUrl
|
|
374
|
+
? await prepareSourceUrlPath({
|
|
375
|
+
accessToken,
|
|
376
|
+
orgId: args.orgId,
|
|
377
|
+
appClientId: toml['client_id'] ?? '',
|
|
378
|
+
name,
|
|
379
|
+
handle,
|
|
380
|
+
baseModules,
|
|
381
|
+
themeDir: hasTheme ? themeDir : null,
|
|
382
|
+
functionDir,
|
|
383
|
+
})
|
|
384
|
+
: prepareInlineSourcePath({
|
|
385
|
+
name,
|
|
386
|
+
handle,
|
|
387
|
+
baseModules,
|
|
388
|
+
themeDir: hasTheme ? themeDir : null,
|
|
389
|
+
});
|
|
390
|
+
// -------------------------------------------------------------
|
|
391
|
+
// appVersionCreate + appReleaseCreate.
|
|
392
|
+
// -------------------------------------------------------------
|
|
393
|
+
const versionTag = `test-${new Date().toISOString().replace(/[:.]/g, '').slice(0, 15)}`;
|
|
394
|
+
console.log(`\n› Creating app version appId=gid://shopify/App/${args.appId} versionTag=${versionTag}`);
|
|
395
|
+
const createResp = await appManagementGraphQL(accessToken, CREATE_APP_VERSION_MUTATION, {
|
|
396
|
+
appId: `gid://shopify/App/${args.appId}`,
|
|
397
|
+
version: versionInput,
|
|
398
|
+
metadata: { versionTag, message: `Test-online deploy via deployAppVersion` },
|
|
399
|
+
});
|
|
400
|
+
const errs = createResp.appVersionCreate.userErrors ?? [];
|
|
401
|
+
if (errs.length > 0) {
|
|
402
|
+
throw new Error(`appVersionCreate userErrors:\n` +
|
|
403
|
+
errs
|
|
404
|
+
.map((e) => ` • ${(e.field ?? []).join('.')}: ${e.message}${e.category ? ` (${e.category})` : ''}`)
|
|
405
|
+
.join('\n'));
|
|
406
|
+
}
|
|
407
|
+
const versionId = createResp.appVersionCreate.version?.id;
|
|
408
|
+
if (!versionId)
|
|
409
|
+
throw new Error('appVersionCreate returned no version.id');
|
|
410
|
+
console.log(` ✓ version created: ${versionId} (${createResp.appVersionCreate.version.metadata.versionTag})`);
|
|
411
|
+
console.log(`\n› Releasing version ${versionId}…`);
|
|
412
|
+
const releaseResp = await appManagementGraphQL(accessToken, RELEASE_APP_VERSION_MUTATION, {
|
|
413
|
+
appId: `gid://shopify/App/${args.appId}`,
|
|
414
|
+
versionId,
|
|
415
|
+
});
|
|
416
|
+
const releaseErrs = releaseResp.appReleaseCreate.userErrors ?? [];
|
|
417
|
+
if (releaseErrs.length > 0) {
|
|
418
|
+
throw new Error(`appReleaseCreate userErrors:\n` +
|
|
419
|
+
releaseErrs.map((e) => ` • ${(e.field ?? []).join('.')}: ${e.message}`).join('\n'));
|
|
420
|
+
}
|
|
421
|
+
console.log(` ✓ released — version is now live for installed stores.`);
|
|
422
|
+
}
|
|
423
|
+
// -----------------------------------------------------------------
|
|
424
|
+
// Inline-source path: theme files base64'd into the manifest. No
|
|
425
|
+
// zip, no GCS round-trip.
|
|
426
|
+
// -----------------------------------------------------------------
|
|
427
|
+
function prepareInlineSourcePath(opts) {
|
|
428
|
+
const modules = [...opts.baseModules];
|
|
429
|
+
if (opts.themeDir) {
|
|
430
|
+
const themeFiles = readExtensionFilesBase64(opts.themeDir);
|
|
431
|
+
console.log(`\n› Bundling theme extension from ${opts.themeDir}`);
|
|
432
|
+
for (const [p, b64] of Object.entries(themeFiles)) {
|
|
433
|
+
console.log(` • ${p} (${Math.ceil((b64.length * 3) / 4 / 1024)}KB)`);
|
|
434
|
+
}
|
|
435
|
+
modules.push({
|
|
436
|
+
uid: stableUuid(`${opts.handle}:theme_app_extension:upsells`),
|
|
437
|
+
type: 'theme_app_extension',
|
|
438
|
+
handle: 'upsells',
|
|
439
|
+
config: { theme_extension: { files: themeFiles } },
|
|
440
|
+
});
|
|
441
|
+
}
|
|
442
|
+
if (modules.length === 0) {
|
|
443
|
+
throw new Error('No modules to deploy.');
|
|
444
|
+
}
|
|
445
|
+
return {
|
|
446
|
+
source: { name: opts.name, handle: '', modules },
|
|
447
|
+
};
|
|
448
|
+
}
|
|
449
|
+
// -----------------------------------------------------------------
|
|
450
|
+
// sourceUrl path: tar+brotli archive, signed-URL PUT to GCS,
|
|
451
|
+
// `appVersionCreate(version: { sourceUrl })`.
|
|
452
|
+
//
|
|
453
|
+
// Reverse-engineered from Shopify/cli's `bundle.ts` + `app.ts`. The
|
|
454
|
+
// key non-obvious bits:
|
|
455
|
+
// 1. The archive is tar+brotli (`.tar.br`), NOT zip.
|
|
456
|
+
// `appRequestSourceUploadUrl` is called with `sourceExtension: BR`.
|
|
457
|
+
// 2. Function WASM goes at `<module_uid>/dist/index.wasm` and the
|
|
458
|
+
// file contents are BASE64-ENCODED TEXT (not raw binary bytes).
|
|
459
|
+
// The CLI does this in `bundleFunctionExtension(path, path)`
|
|
460
|
+
// which is a base64-encode-in-place.
|
|
461
|
+
// 3. Manifest module entries for functions are
|
|
462
|
+
// { type: 'function', handle, uid, assets: uid,
|
|
463
|
+
// target: <singleTarget or ''>, config }
|
|
464
|
+
// where `config` MUST include `app_key` (= client_id), `title`,
|
|
465
|
+
// `module_id` (random UUID), `description`, `api_version`,
|
|
466
|
+
// `enable_creation_ui`, `targets: [{handle, export, input_query}]`.
|
|
467
|
+
// -----------------------------------------------------------------
|
|
468
|
+
async function prepareSourceUrlPath(opts) {
|
|
469
|
+
// 1. Build the function WASM via Javy.
|
|
470
|
+
const { buildFunctionWasm } = await import('../lib/functionBuild.js');
|
|
471
|
+
console.log(`\n› Building function WASM from ${opts.functionDir}`);
|
|
472
|
+
const fn = await buildFunctionWasm({ functionDir: opts.functionDir });
|
|
473
|
+
console.log(` ✓ ${fn.wasmPath}`);
|
|
474
|
+
// 2. Read the wasm + input-query files. WASM gets base64-encoded
|
|
475
|
+
// NOW (text content inside the tar). Input-query contents go
|
|
476
|
+
// inline in the manifest's config.targets[].input_query.
|
|
477
|
+
const wasmBytes = readFileSync(fn.wasmPath);
|
|
478
|
+
const wasmB64Text = wasmBytes.toString('base64');
|
|
479
|
+
// 3. Folder names inside the archive. Match the CLI: uid string IS
|
|
480
|
+
// the folder name (so `assets: uid` in the manifest points at it).
|
|
481
|
+
const functionUid = fn.parsedToml.uid;
|
|
482
|
+
const themeUid = opts.themeDir
|
|
483
|
+
? stableUuid(`${opts.handle}:theme_app_extension:upsells`)
|
|
484
|
+
: null;
|
|
485
|
+
// 4. Assemble archive contents.
|
|
486
|
+
const files = {};
|
|
487
|
+
// WASM at <uid>/dist/index.wasm as base64 text.
|
|
488
|
+
files[`${functionUid}/dist/index.wasm`] = wasmB64Text;
|
|
489
|
+
// Theme files (raw bytes) under <theme_uid>/...
|
|
490
|
+
if (opts.themeDir && themeUid) {
|
|
491
|
+
const themeFiles = readExtensionFilesAsBuffers(opts.themeDir);
|
|
492
|
+
for (const [rel, buf] of Object.entries(themeFiles)) {
|
|
493
|
+
files[`${themeUid}/${rel}`] = buf;
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
// 5. Build the manifest's modules[] list.
|
|
497
|
+
const modules = [...opts.baseModules];
|
|
498
|
+
if (opts.themeDir && themeUid) {
|
|
499
|
+
// Theme module via sourceUrl: the server reads files from the
|
|
500
|
+
// <themeUid>/ folder inside the archive (similar to function
|
|
501
|
+
// module, no inline files in config).
|
|
502
|
+
modules.push({
|
|
503
|
+
type: 'theme_app_extension',
|
|
504
|
+
handle: 'upsells',
|
|
505
|
+
uid: themeUid,
|
|
506
|
+
assets: themeUid,
|
|
507
|
+
target: '',
|
|
508
|
+
config: {},
|
|
509
|
+
});
|
|
510
|
+
}
|
|
511
|
+
modules.push({
|
|
512
|
+
type: 'function',
|
|
513
|
+
handle: fn.parsedToml.handle,
|
|
514
|
+
uid: functionUid,
|
|
515
|
+
assets: functionUid,
|
|
516
|
+
// `target` is the singleTarget handle for single-target functions,
|
|
517
|
+
// '' for multi-target. We compute it from the toml.
|
|
518
|
+
target: fn.parsedToml.targets.length === 1 ? fn.parsedToml.targets[0].target : '',
|
|
519
|
+
config: {
|
|
520
|
+
// Mirrors the CLI's function.ts `deployConfig` output.
|
|
521
|
+
title: fn.parsedToml.handle, // toml has `name = "t:name"`; the
|
|
522
|
+
// i18n token isn't useful as the
|
|
523
|
+
// server-side title — use the handle.
|
|
524
|
+
module_id: randomUUID(),
|
|
525
|
+
description: `Function ${fn.parsedToml.handle}`,
|
|
526
|
+
app_key: opts.appClientId,
|
|
527
|
+
api_version: fn.parsedToml.apiVersion,
|
|
528
|
+
enable_creation_ui: true,
|
|
529
|
+
// Each target carries its own input_query content. The CLI
|
|
530
|
+
// reads each `input_query` file from the toml-declared path
|
|
531
|
+
// and inlines the contents here.
|
|
532
|
+
targets: fn.parsedToml.targets.map((t) => ({
|
|
533
|
+
handle: t.target,
|
|
534
|
+
export: t.export,
|
|
535
|
+
input_query: readFileSync(resolve(opts.functionDir, t.inputQueryPath), 'utf8'),
|
|
536
|
+
})),
|
|
537
|
+
},
|
|
538
|
+
});
|
|
539
|
+
// 6. Build the tar+brotli archive on disk.
|
|
540
|
+
const archivePath = join(tmpdir(), `essential-apps-source-${Date.now()}.tar.br`);
|
|
541
|
+
console.log(`\n› Building source archive at ${archivePath}`);
|
|
542
|
+
let totalBytes = 0;
|
|
543
|
+
for (const [p, content] of Object.entries(files)) {
|
|
544
|
+
const len = typeof content === 'string' ? Buffer.byteLength(content) : content.length;
|
|
545
|
+
console.log(` • ${p} (${Math.ceil(len / 1024)}KB)`);
|
|
546
|
+
totalBytes += len;
|
|
547
|
+
}
|
|
548
|
+
console.log(` Σ ${Math.ceil(totalBytes / 1024)}KB uncompressed`);
|
|
549
|
+
await buildSourceBundle({
|
|
550
|
+
name: opts.name,
|
|
551
|
+
modules,
|
|
552
|
+
files,
|
|
553
|
+
outPath: archivePath,
|
|
554
|
+
});
|
|
555
|
+
const archiveSize = statSync(archivePath).size;
|
|
556
|
+
console.log(` ✓ tar+br: ${Math.ceil(archiveSize / 1024)}KB compressed`);
|
|
557
|
+
// 7. Mint signed upload URL + PUT the archive.
|
|
558
|
+
console.log(`\n› Minting signed upload URL (org ${opts.orgId}, BR)…`);
|
|
559
|
+
const uploadUrl = await requestSourceUploadUrl({
|
|
560
|
+
accessToken: opts.accessToken,
|
|
561
|
+
organizationId: opts.orgId,
|
|
562
|
+
sourceExtension: 'BR',
|
|
563
|
+
});
|
|
564
|
+
// Log just the path component to avoid leaking the GCS signature
|
|
565
|
+
// in logs (CI artifacts often capture stdout).
|
|
566
|
+
console.log(` ✓ ${new URL(uploadUrl).pathname}`);
|
|
567
|
+
console.log(`\n› Uploading archive…`);
|
|
568
|
+
await uploadSourceToSignedUrl({ uploadUrl, archivePath });
|
|
569
|
+
console.log(` ✓ uploaded`);
|
|
570
|
+
return { sourceUrl: uploadUrl };
|
|
571
|
+
}
|
|
572
|
+
// -----------------------------------------------------------------
|
|
573
|
+
// Small utilities.
|
|
574
|
+
// -----------------------------------------------------------------
|
|
575
|
+
// -----------------------------------------------------------------
|
|
576
|
+
// Small utilities.
|
|
577
|
+
// -----------------------------------------------------------------
|
|
578
|
+
function exists(p) {
|
|
579
|
+
try {
|
|
580
|
+
statSync(p);
|
|
581
|
+
return true;
|
|
582
|
+
}
|
|
583
|
+
catch {
|
|
584
|
+
return false;
|
|
585
|
+
}
|
|
586
|
+
}
|
|
587
|
+
main().catch((err) => {
|
|
588
|
+
console.error(`\n✗ ${err.message}\n`);
|
|
589
|
+
process.exit(1);
|
|
590
|
+
});
|
|
591
|
+
//# sourceMappingURL=deployAppVersion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deployAppVersion.js","sourceRoot":"","sources":["../../src/scripts/deployAppVersion.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"devE2eBackend.d.ts","sourceRoot":"","sources":["../../src/scripts/devE2eBackend.ts"],"names":[],"mappings":""}
|