@shopify/oxygen-cli 4.7.1-unstable.202505231438.0 → 5.0.1-unstable.202506030945.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/CHANGELOG.md CHANGED
@@ -1,6 +1,10 @@
1
1
  # @shopify/oxygen-cli
2
2
 
3
- ## 4.7.0
3
+ ## 5.0.0
4
+
5
+ ### Major Changes
6
+
7
+ - 7372f1c: remove deployment verification step
4
8
 
5
9
  ### Minor Changes
6
10
 
package/README.md CHANGED
@@ -47,8 +47,6 @@ oxygen:deploy [options]
47
47
  - `-o`, `--workerOnly`: Worker only deployment.
48
48
  - `-s`, `--skipBuild`: Skip running build command.
49
49
  - `-b`, `--buildCommand`: Build command (default: `npm build`).
50
- - `-v`, `--skipVerification`: skip the worker deployment verification step
51
- - `-d`, `--verificationMaxDuration`: The maximum duration (in seconds) that the deployment verification is allowed to run before it is considered failed. Accepts values between 10 and 300.
52
50
  - `--metadataDescription`: A brief description of the deployment, typically the commit message associated with the changes being deployed.
53
51
  - `--metadataUrl`: URL linking to the workflow/pipeline run in the CI platform from which the deployment is performed.
54
52
  - `--metadataUser`: User that initiated the deployment.
@@ -9,11 +9,9 @@ declare class Deploy extends Command {
9
9
  buildCommand: _oclif_core_lib_interfaces_parser_js.OptionFlag<string, _oclif_core_lib_interfaces_parser_js.CustomOptions>;
10
10
  disableBugsnag: _oclif_core_lib_interfaces_parser_js.BooleanFlag<boolean>;
11
11
  environmentTag: _oclif_core_lib_interfaces_parser_js.OptionFlag<string | undefined, _oclif_core_lib_interfaces_parser_js.CustomOptions>;
12
- verificationMaxDuration: _oclif_core_lib_interfaces_parser_js.OptionFlag<number, _oclif_core_lib_interfaces_parser_js.CustomOptions>;
13
12
  path: _oclif_core_lib_interfaces_parser_js.OptionFlag<string, _oclif_core_lib_interfaces_parser_js.CustomOptions>;
14
13
  defaultEnvironment: _oclif_core_lib_interfaces_parser_js.BooleanFlag<boolean>;
15
14
  skipBuild: _oclif_core_lib_interfaces_parser_js.BooleanFlag<boolean>;
16
- skipVerification: _oclif_core_lib_interfaces_parser_js.BooleanFlag<boolean>;
17
15
  token: _oclif_core_lib_interfaces_parser_js.OptionFlag<string, _oclif_core_lib_interfaces_parser_js.CustomOptions>;
18
16
  workerFolder: _oclif_core_lib_interfaces_parser_js.OptionFlag<string, _oclif_core_lib_interfaces_parser_js.CustomOptions>;
19
17
  workerOnly: _oclif_core_lib_interfaces_parser_js.BooleanFlag<boolean>;
@@ -5,7 +5,6 @@ import { readAndParseDotEnv } from '@shopify/cli-kit/node/dot-env';
5
5
  import { initializeBugsnag, getBugsnag } from '../../utils/bugsnag.js';
6
6
  import { createDeploy } from '../../deploy/index.js';
7
7
  import { deployDefaults, parseToken, verifyConfig, getBuildCommandFromLockFile } from '../../utils/utils.js';
8
- import { VerificationError } from '../../deploy/types.js';
9
8
 
10
9
  class Deploy extends Command {
11
10
  static description = "Creates a deployment to Oxygen";
@@ -37,14 +36,6 @@ class Deploy extends Command {
37
36
  description: "Tag of the environment to deploy to",
38
37
  required: false
39
38
  }),
40
- verificationMaxDuration: Flags.integer({
41
- char: "d",
42
- description: "the maximum duration (in seconds) that the deployment verification step is allowed to run before it is considered failed.",
43
- min: 10,
44
- max: 300,
45
- required: false,
46
- default: deployDefaults.verificationMaxDurationDefault
47
- }),
48
39
  path: Flags.string({
49
40
  char: "p",
50
41
  description: "Root path",
@@ -63,12 +54,6 @@ class Deploy extends Command {
63
54
  required: false,
64
55
  default: false
65
56
  }),
66
- skipVerification: Flags.boolean({
67
- char: "v",
68
- description: "Skip running deployment verification step",
69
- required: false,
70
- default: false
71
- }),
72
57
  token: Flags.string({
73
58
  char: "t",
74
59
  description: "Oxygen deployment token",
@@ -160,7 +145,6 @@ class Deploy extends Command {
160
145
  deploymentToken: parseToken(flags.token),
161
146
  environmentTag: flags.environmentTag,
162
147
  deploymentUrl,
163
- verificationMaxDuration: flags.verificationMaxDuration,
164
148
  metadata: {
165
149
  description: flags.metadataDescription,
166
150
  hydrogenVersion: flags.metadataHydrogenVersion,
@@ -171,7 +155,6 @@ class Deploy extends Command {
171
155
  defaultEnvironment: flags.defaultEnvironment,
172
156
  rootPath,
173
157
  skipBuild: flags.skipBuild,
174
- skipVerification: flags.skipVerification,
175
158
  workerDir: normalizePath(flags.workerFolder),
176
159
  workerOnly: flags.workerOnly,
177
160
  generateAuthBypassToken: flags.generateAuthBypassToken,
@@ -188,10 +171,10 @@ class Deploy extends Command {
188
171
  if (Bugsnag && (error instanceof Error || typeof error === "string")) {
189
172
  Bugsnag.notify(error);
190
173
  }
191
- if (!(error instanceof Error)) {
192
- consoleError(error);
193
- } else if (!(error instanceof VerificationError)) {
174
+ if (error instanceof Error) {
194
175
  consoleError(error.message);
176
+ } else {
177
+ consoleError(error);
195
178
  }
196
179
  this.exit(1);
197
180
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/commands/oxygen/deploy.ts"],"names":[],"mappings":"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","file":"deploy.js","sourcesContent":["import {Command, Flags} from '@oclif/core';\nimport {consoleError} from '@shopify/cli-kit/node/output';\nimport {normalizePath} from '@shopify/cli-kit/node/path';\nimport {readAndParseDotEnv} from '@shopify/cli-kit/node/dot-env';\n\nimport {getBugsnag, initializeBugsnag} from '../../utils/bugsnag.js';\nimport {createDeploy} from '../../deploy/index.js';\nimport {\n deployDefaults,\n getBuildCommandFromLockFile,\n parseToken,\n verifyConfig,\n} from '../../utils/utils.js';\nimport type {\n DeploymentConfig,\n EnvironmentVariable,\n} from '../../deploy/types.js';\nimport {VerificationError} from '../../deploy/types.js';\n\nexport class Deploy extends Command {\n static description = 'Creates a deployment to Oxygen';\n static hidden = false;\n static flags = {\n assetsFolder: Flags.string({\n char: 'a',\n description: 'Assets folder',\n default: String(deployDefaults.assetsDirDefault),\n required: false,\n }),\n buildCommand: Flags.string({\n char: 'b',\n description: 'Build command',\n required: false,\n default: String(deployDefaults.buildCommandDefault!),\n parse: (input): Promise<string> => {\n this.hasCustomBuildCommand = true;\n return Promise.resolve(input);\n },\n }),\n disableBugsnag: Flags.boolean({\n description: 'Disable Bugsnag error reporting',\n required: false,\n default: false,\n }),\n environmentTag: Flags.string({\n char: 'e',\n description: 'Tag of the environment to deploy to',\n required: false,\n }),\n verificationMaxDuration: Flags.integer({\n char: 'd',\n description:\n 'the maximum duration (in seconds) that the deployment verification step is allowed to run before it is considered failed.',\n min: 10,\n max: 300,\n required: false,\n default: deployDefaults.verificationMaxDurationDefault as number,\n }),\n path: Flags.string({\n char: 'p',\n description: 'Root path',\n default: './',\n required: false,\n }),\n defaultEnvironment: Flags.boolean({\n env: 'OXYGEN_DEFAULT_ENVIRONMENT',\n description: 'Deploys to the default environment of the app',\n required: false,\n default: false,\n }),\n skipBuild: Flags.boolean({\n char: 's',\n description: 'Skip running build command',\n required: false,\n default: false,\n }),\n skipVerification: Flags.boolean({\n char: 'v',\n description: 'Skip running deployment verification step',\n required: false,\n default: false,\n }),\n token: Flags.string({\n char: 't',\n description: 'Oxygen deployment token',\n env: 'OXYGEN_DEPLOYMENT_TOKEN',\n required: true,\n }),\n workerFolder: Flags.string({\n char: 'w',\n description: 'Worker folder',\n default: String(deployDefaults.workerDirDefault),\n required: false,\n }),\n workerOnly: Flags.boolean({\n char: 'o',\n description: 'Worker only deployment',\n default: false,\n required: false,\n }),\n metadataDescription: Flags.string({\n description:\n 'Description of the deployment. Will be saved and displayed in the Shopify admin',\n required: false,\n env: 'OXYGEN_METADATA_DESCRIPTION',\n }),\n metadataHydrogenVersion: Flags.string({\n description: 'The Hydrogen version of the deployment from package.json',\n required: false,\n env: 'OXYGEN_METADATA_HYDROGEN_VERSION',\n }),\n metadataUrl: Flags.string({\n description:\n 'URL that links to the deployment. Will be saved and displayed in the Shopify admin',\n required: false,\n env: 'OXYGEN_METADATA_URL',\n }),\n metadataUser: Flags.string({\n description:\n 'User that initiated the deployment. Will be saved and displayed in the Shopify admin',\n required: false,\n env: 'OXYGEN_METADATA_USER',\n }),\n metadataVersion: Flags.string({\n description:\n 'A version identifier for the deployment. Will be saved and displayed in the Shopify admin',\n required: false,\n env: 'OXYGEN_METADATA_VERSION',\n }),\n generateAuthBypassToken: Flags.boolean({\n description:\n 'Generate an auth bypass token used to perform end-to-end testing against the deployment.',\n required: false,\n default: false,\n }),\n authBypassTokenDuration: Flags.string({\n description:\n 'Specify the duration (in hours) up to 12 hours for the authentication bypass token. Defaults to `2`.',\n required: false,\n dependsOn: ['generateAuthBypassToken'],\n }),\n environmentFile: Flags.string({\n description:\n 'Path to an environment file to override existing environment variables for the deployment.',\n required: false,\n }),\n };\n\n static hasCustomBuildCommand = false;\n\n async run() {\n try {\n const {flags} = await this.parse(Deploy);\n const rootPath = normalizePath(flags.path);\n\n let overriddenEnvironmentVariables: EnvironmentVariable[] | undefined;\n\n if (flags.environmentFile) {\n const file = await readAndParseDotEnv(flags.environmentFile);\n\n overriddenEnvironmentVariables = Object.entries(file.variables).map(\n ([key, value]) => ({\n isSecret: true,\n key,\n value,\n }),\n );\n }\n\n initializeBugsnag(flags.disableBugsnag);\n const Bugsnag = getBugsnag();\n\n const deploymentUrl =\n // eslint-disable-next-line no-process-env\n process.env.UNSAFE_OXYGEN_DEPLOYMENT_URL ||\n 'https://oxygen.shopifyapps.com';\n Bugsnag?.addMetadata('flags', {\n flags: {...flags, token: '***'},\n deploymentUrl,\n });\n\n const config: DeploymentConfig = {\n assetsDir: normalizePath(flags.assetsFolder),\n bugsnag: !flags.disableBugsnag,\n buildCommand: flags.buildCommand!,\n deploymentToken: parseToken(flags.token!),\n environmentTag: flags.environmentTag,\n deploymentUrl,\n verificationMaxDuration: flags.verificationMaxDuration,\n metadata: {\n description: flags.metadataDescription,\n hydrogenVersion: flags.metadataHydrogenVersion,\n url: flags.metadataUrl,\n user: flags.metadataUser,\n version: flags.metadataVersion,\n },\n defaultEnvironment: flags.defaultEnvironment,\n rootPath,\n skipBuild: flags.skipBuild,\n skipVerification: flags.skipVerification,\n workerDir: normalizePath(flags.workerFolder),\n workerOnly: flags.workerOnly,\n generateAuthBypassToken: flags.generateAuthBypassToken,\n authBypassTokenDuration: flags.authBypassTokenDuration,\n overriddenEnvironmentVariables,\n };\n\n await verifyConfig({config});\n if (!Deploy.hasCustomBuildCommand && !config.skipBuild) {\n config.buildCommand = getBuildCommandFromLockFile(config);\n }\n await createDeploy({config});\n } catch (error) {\n const Bugsnag = getBugsnag();\n if (Bugsnag && (error instanceof Error || typeof error === 'string')) {\n Bugsnag.notify(error);\n }\n\n if (!(error instanceof Error)) {\n consoleError(error as string);\n } else if (!(error instanceof VerificationError)) {\n consoleError(error.message);\n }\n\n this.exit(1);\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["../../../src/commands/oxygen/deploy.ts"],"names":[],"mappings":"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","file":"deploy.js","sourcesContent":["import {Command, Flags} from '@oclif/core';\nimport {consoleError} from '@shopify/cli-kit/node/output';\nimport {normalizePath} from '@shopify/cli-kit/node/path';\nimport {readAndParseDotEnv} from '@shopify/cli-kit/node/dot-env';\n\nimport {getBugsnag, initializeBugsnag} from '../../utils/bugsnag.js';\nimport {createDeploy} from '../../deploy/index.js';\nimport {\n deployDefaults,\n getBuildCommandFromLockFile,\n parseToken,\n verifyConfig,\n} from '../../utils/utils.js';\nimport type {\n DeploymentConfig,\n EnvironmentVariable,\n} from '../../deploy/types.js';\n\nexport class Deploy extends Command {\n static description = 'Creates a deployment to Oxygen';\n static hidden = false;\n static flags = {\n assetsFolder: Flags.string({\n char: 'a',\n description: 'Assets folder',\n default: String(deployDefaults.assetsDirDefault),\n required: false,\n }),\n buildCommand: Flags.string({\n char: 'b',\n description: 'Build command',\n required: false,\n default: String(deployDefaults.buildCommandDefault!),\n parse: (input): Promise<string> => {\n this.hasCustomBuildCommand = true;\n return Promise.resolve(input);\n },\n }),\n disableBugsnag: Flags.boolean({\n description: 'Disable Bugsnag error reporting',\n required: false,\n default: false,\n }),\n environmentTag: Flags.string({\n char: 'e',\n description: 'Tag of the environment to deploy to',\n required: false,\n }),\n path: Flags.string({\n char: 'p',\n description: 'Root path',\n default: './',\n required: false,\n }),\n defaultEnvironment: Flags.boolean({\n env: 'OXYGEN_DEFAULT_ENVIRONMENT',\n description: 'Deploys to the default environment of the app',\n required: false,\n default: false,\n }),\n skipBuild: Flags.boolean({\n char: 's',\n description: 'Skip running build command',\n required: false,\n default: false,\n }),\n token: Flags.string({\n char: 't',\n description: 'Oxygen deployment token',\n env: 'OXYGEN_DEPLOYMENT_TOKEN',\n required: true,\n }),\n workerFolder: Flags.string({\n char: 'w',\n description: 'Worker folder',\n default: String(deployDefaults.workerDirDefault),\n required: false,\n }),\n workerOnly: Flags.boolean({\n char: 'o',\n description: 'Worker only deployment',\n default: false,\n required: false,\n }),\n metadataDescription: Flags.string({\n description:\n 'Description of the deployment. Will be saved and displayed in the Shopify admin',\n required: false,\n env: 'OXYGEN_METADATA_DESCRIPTION',\n }),\n metadataHydrogenVersion: Flags.string({\n description: 'The Hydrogen version of the deployment from package.json',\n required: false,\n env: 'OXYGEN_METADATA_HYDROGEN_VERSION',\n }),\n metadataUrl: Flags.string({\n description:\n 'URL that links to the deployment. Will be saved and displayed in the Shopify admin',\n required: false,\n env: 'OXYGEN_METADATA_URL',\n }),\n metadataUser: Flags.string({\n description:\n 'User that initiated the deployment. Will be saved and displayed in the Shopify admin',\n required: false,\n env: 'OXYGEN_METADATA_USER',\n }),\n metadataVersion: Flags.string({\n description:\n 'A version identifier for the deployment. Will be saved and displayed in the Shopify admin',\n required: false,\n env: 'OXYGEN_METADATA_VERSION',\n }),\n generateAuthBypassToken: Flags.boolean({\n description:\n 'Generate an auth bypass token used to perform end-to-end testing against the deployment.',\n required: false,\n default: false,\n }),\n authBypassTokenDuration: Flags.string({\n description:\n 'Specify the duration (in hours) up to 12 hours for the authentication bypass token. Defaults to `2`.',\n required: false,\n dependsOn: ['generateAuthBypassToken'],\n }),\n environmentFile: Flags.string({\n description:\n 'Path to an environment file to override existing environment variables for the deployment.',\n required: false,\n }),\n };\n\n static hasCustomBuildCommand = false;\n\n async run() {\n try {\n const {flags} = await this.parse(Deploy);\n const rootPath = normalizePath(flags.path);\n\n let overriddenEnvironmentVariables: EnvironmentVariable[] | undefined;\n\n if (flags.environmentFile) {\n const file = await readAndParseDotEnv(flags.environmentFile);\n\n overriddenEnvironmentVariables = Object.entries(file.variables).map(\n ([key, value]) => ({\n isSecret: true,\n key,\n value,\n }),\n );\n }\n\n initializeBugsnag(flags.disableBugsnag);\n const Bugsnag = getBugsnag();\n\n const deploymentUrl =\n // eslint-disable-next-line no-process-env\n process.env.UNSAFE_OXYGEN_DEPLOYMENT_URL ||\n 'https://oxygen.shopifyapps.com';\n Bugsnag?.addMetadata('flags', {\n flags: {...flags, token: '***'},\n deploymentUrl,\n });\n\n const config: DeploymentConfig = {\n assetsDir: normalizePath(flags.assetsFolder),\n bugsnag: !flags.disableBugsnag,\n buildCommand: flags.buildCommand!,\n deploymentToken: parseToken(flags.token!),\n environmentTag: flags.environmentTag,\n deploymentUrl,\n metadata: {\n description: flags.metadataDescription,\n hydrogenVersion: flags.metadataHydrogenVersion,\n url: flags.metadataUrl,\n user: flags.metadataUser,\n version: flags.metadataVersion,\n },\n defaultEnvironment: flags.defaultEnvironment,\n rootPath,\n skipBuild: flags.skipBuild,\n workerDir: normalizePath(flags.workerFolder),\n workerOnly: flags.workerOnly,\n generateAuthBypassToken: flags.generateAuthBypassToken,\n authBypassTokenDuration: flags.authBypassTokenDuration,\n overriddenEnvironmentVariables,\n };\n\n await verifyConfig({config});\n if (!Deploy.hasCustomBuildCommand && !config.skipBuild) {\n config.buildCommand = getBuildCommandFromLockFile(config);\n }\n await createDeploy({config});\n } catch (error) {\n const Bugsnag = getBugsnag();\n if (Bugsnag && (error instanceof Error || typeof error === 'string')) {\n Bugsnag.notify(error);\n }\n\n if (error instanceof Error) {\n consoleError(error.message);\n } else {\n consoleError(error as string);\n }\n\n this.exit(1);\n }\n }\n}\n"]}
@@ -8,11 +8,10 @@ import { buildCancel } from './build-cancel.js';
8
8
  import { getUploadFiles } from './get-upload-files.js';
9
9
  import { deploymentInitiate } from './deployment-initiate.js';
10
10
  import { deploymentComplete } from './deployment-complete.js';
11
- import { verifyDeployment } from './verify-deployment.js';
12
11
  import { deploymentCancel } from './deployment-cancel.js';
13
12
  import { uploadFiles } from './upload-files.js';
14
13
  import { verifyDeploymentCompleted } from './verify-deployment-completed.js';
15
- import { VerificationError, DeploymentCompletedVerificationError } from './types.js';
14
+ import { DeploymentCompletedVerificationError } from './types.js';
16
15
  import { buildProject } from './build-project.js';
17
16
  import { getMetadata, createLabels, getEnvironmentInput } from './metadata.js';
18
17
 
@@ -98,18 +97,6 @@ async function createDeploy(options) {
98
97
  MetricName.DeploymentCompletedTime,
99
98
  performance.now() - deploymentCompleteRequestStartTime
100
99
  );
101
- if (!config.skipVerification) {
102
- await verifyDeployment({
103
- config,
104
- url: deploymentCompleteOp.deployment.url,
105
- logger,
106
- hooks
107
- });
108
- metricsExporter.add(
109
- MetricName.DeploymentRoutableTime,
110
- performance.now() - deploymentCompleteRequestStartTime
111
- );
112
- }
113
100
  const completedDeployment = {
114
101
  url: deploymentCompleteOp.deployment.url
115
102
  };
@@ -129,7 +116,7 @@ The deployment can be reached at the ${completedDeployment.url} preview URL`;
129
116
  console.error("Unknown error", error);
130
117
  return Promise.reject(new Error("Unknown error"));
131
118
  }
132
- if (error instanceof VerificationError || error instanceof DeploymentCompletedVerificationError) {
119
+ if (error instanceof DeploymentCompletedVerificationError) {
133
120
  outputWarn(error.message, logger);
134
121
  } else if (build.id && !buildCompleted) {
135
122
  outputWarn(
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/deploy/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import {Logger, outputSuccess, outputWarn} from '@shopify/cli-kit/node/output';\n\nimport {stderrLogger, verifyConfig} from '../utils/utils.js';\nimport {\n getBugsnag,\n initializeBugsnag,\n sanitizeError,\n} from '../utils/bugsnag.js';\nimport {MetricsExporter, MetricName} from '../utils/metrics-exporter.js';\n\nimport {buildInitiate} from './build-initiate.js';\nimport {buildCancel} from './build-cancel.js';\nimport {getUploadFiles} from './get-upload-files.js';\nimport {deploymentInitiate} from './deployment-initiate.js';\nimport {deploymentComplete} from './deployment-complete.js';\nimport {verifyDeployment} from './verify-deployment.js';\nimport {deploymentCancel} from './deployment-cancel.js';\nimport {uploadFiles} from './upload-files.js';\nimport {verifyDeploymentCompleted} from './verify-deployment-completed.js';\nimport {\n Build,\n DeploymentCompletedVerificationError,\n DeploymentConfig,\n DeploymentHooks,\n VerificationError,\n} from './types.js';\nimport {buildProject} from './build-project.js';\nimport {createLabels, getMetadata, getEnvironmentInput} from './metadata.js';\n\ninterface CreateDeployOptions {\n config: DeploymentConfig;\n hooks?: DeploymentHooks;\n logger?: Logger;\n}\n\ninterface CompletedDeployment {\n url: string;\n authBypassToken?: string;\n}\n\nexport async function createDeploy(\n options: CreateDeployOptions,\n): Promise<CompletedDeployment | undefined> {\n const cliStartTime = performance.now();\n initializeBugsnag(!options.config.bugsnag);\n const Bugsnag = getBugsnag();\n Bugsnag?.addMetadata('config', {\n ...options.config,\n deploymentToken: {...options.config.deploymentToken, accessToken: '***'},\n rootPath: '***',\n });\n\n const {config, hooks} = options;\n const logger = options.logger ?? stderrLogger;\n const build = {} as Build;\n let buildCompleted;\n let deployment;\n let metricsExporter;\n\n try {\n const metadata = await getMetadata(config, logger);\n const labels = createLabels(metadata);\n const environment = getEnvironmentInput(config, metadata);\n Bugsnag?.addMetadata('metadata', {\n environment,\n labels,\n metadata,\n });\n metricsExporter = new MetricsExporter({\n ciProvider: metadata.name || 'unknown',\n rootPath: config.rootPath!,\n });\n\n if (!config.workerOnly && !config.skipBuild) {\n const buildInitiateResponse = await buildInitiate({\n config,\n environment,\n labels,\n logger,\n });\n build.id = buildInitiateResponse.build.id;\n build.assetPath = buildInitiateResponse.build.assetPath;\n }\n\n if (!config.skipBuild) {\n await buildProject({\n config,\n assetPath: build.assetPath,\n hooks,\n metricsExporter,\n });\n await verifyConfig({config, performedBuild: true});\n }\n buildCompleted = true;\n\n const manifest = await getUploadFiles(config, metricsExporter);\n Bugsnag?.addMetadata('manifest', manifest);\n const deploymentInitiateInput = build.id\n ? {buildId: build.id, manifest}\n : {environment, manifest, labels};\n\n deployment = await deploymentInitiate({\n config,\n input: deploymentInitiateInput,\n logger,\n });\n\n await uploadFiles({\n config,\n targets: deployment.deploymentTargets,\n hooks,\n logger,\n metricsExporter,\n });\n\n const deploymentCompleteRequestStartTime = performance.now();\n\n const deploymentCompleteOp = await deploymentComplete(\n config,\n deployment.deployment.id,\n );\n metricsExporter.add(MetricName.TotalTime, performance.now() - cliStartTime);\n\n await verifyDeploymentCompleted(\n {\n config,\n hooks,\n logger,\n timeoutInSeconds: deployment.deploymentConfiguration.timeoutInSeconds,\n },\n deployment.deployment.id,\n );\n\n metricsExporter.add(\n MetricName.DeploymentCompletedTime,\n performance.now() - deploymentCompleteRequestStartTime,\n );\n\n if (!config.skipVerification) {\n await verifyDeployment({\n config,\n url: deploymentCompleteOp.deployment.url,\n logger,\n hooks,\n });\n\n metricsExporter.add(\n MetricName.DeploymentRoutableTime,\n performance.now() - deploymentCompleteRequestStartTime,\n );\n }\n\n const completedDeployment: CompletedDeployment = {\n url: deploymentCompleteOp.deployment.url,\n };\n\n let successMessage = `\\nThe deployment can be reached at the ${completedDeployment.url} preview URL`;\n\n if (deploymentCompleteOp.authBypassToken) {\n completedDeployment.authBypassToken =\n deploymentCompleteOp.authBypassToken;\n\n successMessage += `. The auth bypass token for the deployment is ${completedDeployment.authBypassToken}`;\n }\n\n outputSuccess(successMessage, logger);\n\n return completedDeployment;\n } catch (error) {\n if (\n config.bugsnag &&\n Bugsnag &&\n (error instanceof Error || typeof error === 'string')\n ) {\n Bugsnag.notify(sanitizeError(error, config.rootPath));\n }\n\n if (!(error instanceof Error)) {\n // eslint-disable-next-line no-console\n console.error('Unknown error', error);\n return Promise.reject(new Error('Unknown error'));\n }\n\n if (\n error instanceof VerificationError ||\n error instanceof DeploymentCompletedVerificationError\n ) {\n outputWarn(error.message, logger);\n } else if (build.id && !buildCompleted) {\n outputWarn(\n `Build failed with: ${error.message}, cancelling build.`,\n logger,\n );\n\n await buildCancel({\n config,\n buildId: build.id!,\n reason: error.message,\n logger,\n }).catch((err) => {\n if (err instanceof Error) {\n outputWarn(`Failed to cancel build: ${err.message}`, logger);\n }\n });\n } else if (deployment?.deployment.id) {\n outputWarn(\n `Deployment failed with: ${error.message}, cancelling deployment.`,\n logger,\n );\n await deploymentCancel({\n config,\n deploymentId: deployment.deployment.id,\n reason: error.message,\n logger,\n }).catch((err) => {\n if (err instanceof Error) {\n outputWarn(`Failed to cancel deployment: ${err.message}`, logger);\n }\n });\n }\n return Promise.reject(error);\n } finally {\n metricsExporter?.export();\n }\n}\n\nexport type {DeploymentConfig, DeploymentHooks, CompletedDeployment};\nexport {parseToken} from '../utils/utils.js';\nexport type {DeploymentVerificationDetailsResponse} from './graphql/deployment-verification-details.js';\n"]}
1
+ {"version":3,"sources":["../../src/deploy/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import {Logger, outputSuccess, outputWarn} from '@shopify/cli-kit/node/output';\n\nimport {stderrLogger, verifyConfig} from '../utils/utils.js';\nimport {\n getBugsnag,\n initializeBugsnag,\n sanitizeError,\n} from '../utils/bugsnag.js';\nimport {MetricsExporter, MetricName} from '../utils/metrics-exporter.js';\n\nimport {buildInitiate} from './build-initiate.js';\nimport {buildCancel} from './build-cancel.js';\nimport {getUploadFiles} from './get-upload-files.js';\nimport {deploymentInitiate} from './deployment-initiate.js';\nimport {deploymentComplete} from './deployment-complete.js';\nimport {deploymentCancel} from './deployment-cancel.js';\nimport {uploadFiles} from './upload-files.js';\nimport {verifyDeploymentCompleted} from './verify-deployment-completed.js';\nimport {\n Build,\n DeploymentCompletedVerificationError,\n DeploymentConfig,\n DeploymentHooks,\n} from './types.js';\nimport {buildProject} from './build-project.js';\nimport {createLabels, getMetadata, getEnvironmentInput} from './metadata.js';\n\ninterface CreateDeployOptions {\n config: DeploymentConfig;\n hooks?: DeploymentHooks;\n logger?: Logger;\n}\n\ninterface CompletedDeployment {\n url: string;\n authBypassToken?: string;\n}\n\nexport async function createDeploy(\n options: CreateDeployOptions,\n): Promise<CompletedDeployment | undefined> {\n const cliStartTime = performance.now();\n initializeBugsnag(!options.config.bugsnag);\n const Bugsnag = getBugsnag();\n Bugsnag?.addMetadata('config', {\n ...options.config,\n deploymentToken: {...options.config.deploymentToken, accessToken: '***'},\n rootPath: '***',\n });\n\n const {config, hooks} = options;\n const logger = options.logger ?? stderrLogger;\n const build = {} as Build;\n let buildCompleted;\n let deployment;\n let metricsExporter;\n\n try {\n const metadata = await getMetadata(config, logger);\n const labels = createLabels(metadata);\n const environment = getEnvironmentInput(config, metadata);\n Bugsnag?.addMetadata('metadata', {\n environment,\n labels,\n metadata,\n });\n metricsExporter = new MetricsExporter({\n ciProvider: metadata.name || 'unknown',\n rootPath: config.rootPath!,\n });\n\n if (!config.workerOnly && !config.skipBuild) {\n const buildInitiateResponse = await buildInitiate({\n config,\n environment,\n labels,\n logger,\n });\n build.id = buildInitiateResponse.build.id;\n build.assetPath = buildInitiateResponse.build.assetPath;\n }\n\n if (!config.skipBuild) {\n await buildProject({\n config,\n assetPath: build.assetPath,\n hooks,\n metricsExporter,\n });\n await verifyConfig({config, performedBuild: true});\n }\n buildCompleted = true;\n\n const manifest = await getUploadFiles(config, metricsExporter);\n Bugsnag?.addMetadata('manifest', manifest);\n const deploymentInitiateInput = build.id\n ? {buildId: build.id, manifest}\n : {environment, manifest, labels};\n\n deployment = await deploymentInitiate({\n config,\n input: deploymentInitiateInput,\n logger,\n });\n\n await uploadFiles({\n config,\n targets: deployment.deploymentTargets,\n hooks,\n logger,\n metricsExporter,\n });\n\n const deploymentCompleteRequestStartTime = performance.now();\n\n const deploymentCompleteOp = await deploymentComplete(\n config,\n deployment.deployment.id,\n );\n metricsExporter.add(MetricName.TotalTime, performance.now() - cliStartTime);\n\n await verifyDeploymentCompleted(\n {\n config,\n hooks,\n logger,\n timeoutInSeconds: deployment.deploymentConfiguration.timeoutInSeconds,\n },\n deployment.deployment.id,\n );\n\n metricsExporter.add(\n MetricName.DeploymentCompletedTime,\n performance.now() - deploymentCompleteRequestStartTime,\n );\n\n const completedDeployment: CompletedDeployment = {\n url: deploymentCompleteOp.deployment.url,\n };\n\n let successMessage = `\\nThe deployment can be reached at the ${completedDeployment.url} preview URL`;\n\n if (deploymentCompleteOp.authBypassToken) {\n completedDeployment.authBypassToken =\n deploymentCompleteOp.authBypassToken;\n\n successMessage += `. The auth bypass token for the deployment is ${completedDeployment.authBypassToken}`;\n }\n\n outputSuccess(successMessage, logger);\n\n return completedDeployment;\n } catch (error) {\n if (\n config.bugsnag &&\n Bugsnag &&\n (error instanceof Error || typeof error === 'string')\n ) {\n Bugsnag.notify(sanitizeError(error, config.rootPath));\n }\n\n if (!(error instanceof Error)) {\n // eslint-disable-next-line no-console\n console.error('Unknown error', error);\n return Promise.reject(new Error('Unknown error'));\n }\n\n if (error instanceof DeploymentCompletedVerificationError) {\n outputWarn(error.message, logger);\n } else if (build.id && !buildCompleted) {\n outputWarn(\n `Build failed with: ${error.message}, cancelling build.`,\n logger,\n );\n\n await buildCancel({\n config,\n buildId: build.id!,\n reason: error.message,\n logger,\n }).catch((err) => {\n if (err instanceof Error) {\n outputWarn(`Failed to cancel build: ${err.message}`, logger);\n }\n });\n } else if (deployment?.deployment.id) {\n outputWarn(\n `Deployment failed with: ${error.message}, cancelling deployment.`,\n logger,\n );\n await deploymentCancel({\n config,\n deploymentId: deployment.deployment.id,\n reason: error.message,\n logger,\n }).catch((err) => {\n if (err instanceof Error) {\n outputWarn(`Failed to cancel deployment: ${err.message}`, logger);\n }\n });\n }\n return Promise.reject(error);\n } finally {\n metricsExporter?.export();\n }\n}\n\nexport type {DeploymentConfig, DeploymentHooks, CompletedDeployment};\nexport {parseToken} from '../utils/utils.js';\nexport type {DeploymentVerificationDetailsResponse} from './graphql/deployment-verification-details.js';\n"]}
@@ -37,8 +37,6 @@ interface DeploymentConfig {
37
37
  defaultEnvironment: boolean;
38
38
  rootPath?: string;
39
39
  skipBuild: boolean;
40
- skipVerification: boolean;
41
- verificationMaxDuration: number;
42
40
  workerDir?: string;
43
41
  workerOnly: boolean;
44
42
  generateAuthBypassToken: boolean;
@@ -77,9 +75,7 @@ declare enum FileType {
77
75
  interface OxygenError {
78
76
  message: string;
79
77
  }
80
- declare class VerificationError extends Error {
81
- }
82
78
  declare class DeploymentCompletedVerificationError extends Error {
83
79
  }
84
80
 
85
- export { type Build, type ClientError, DeploymentCompletedVerificationError, type DeploymentConfig, type DeploymentHooks, type DeploymentManifestFile, type DeploymentToken, type EnvironmentInput, type EnvironmentVariable, FileType, type OxygenError, VerificationError };
81
+ export { type Build, type ClientError, DeploymentCompletedVerificationError, type DeploymentConfig, type DeploymentHooks, type DeploymentManifestFile, type DeploymentToken, type EnvironmentInput, type EnvironmentVariable, FileType, type OxygenError };
@@ -3,11 +3,9 @@ var FileType = /* @__PURE__ */ ((FileType2) => {
3
3
  FileType2["Asset"] = "ASSET";
4
4
  return FileType2;
5
5
  })(FileType || {});
6
- class VerificationError extends Error {
7
- }
8
6
  class DeploymentCompletedVerificationError extends Error {
9
7
  }
10
8
 
11
- export { DeploymentCompletedVerificationError, FileType, VerificationError };
9
+ export { DeploymentCompletedVerificationError, FileType };
12
10
  //# sourceMappingURL=types.js.map
13
11
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/deploy/types.ts"],"names":["FileType"],"mappings":"AAkFY,IAAA,QAAA,qBAAAA,SAAL,KAAA;AACL,EAAAA,UAAA,QAAS,CAAA,GAAA,QAAA;AACT,EAAAA,UAAA,OAAQ,CAAA,GAAA,OAAA;AAFE,EAAAA,OAAAA,SAAAA;AAAA,CAAA,EAAA,QAAA,IAAA,EAAA;AASL,MAAM,0BAA0B,KAAM,CAAA;AAAC;AAEvC,MAAM,6CAA6C,KAAM,CAAA;AAAC","file":"types.js","sourcesContent":["import {DeploymentVerificationDetailsResponse} from './graphql/deployment-verification-details.js';\n\nexport interface Build {\n id: string;\n assetPath: string;\n}\n\nexport interface ClientError extends Error {\n statusCode: number;\n}\n\nexport interface DeploymentHooks {\n buildFunction?: (urlPath?: string) => Promise<void>;\n onDeploymentCompletedVerificationStart?: () => void;\n onDeploymentCompletedVerificationError?: () => void;\n onDeploymentFailed?: (\n responseData: DeploymentVerificationDetailsResponse,\n ) => void;\n onDeploymentCompleted?: () => void;\n onVerificationStart?: () => void;\n onVerificationComplete?: () => void;\n onVerificationError?: (error: Error) => void;\n onUploadFilesStart?: () => void;\n onUploadFilesError?: (error: Error) => void;\n onUploadFilesComplete?: () => void;\n}\n\nexport interface DeploymentConfig {\n assetsDir?: string;\n bugsnag: boolean;\n buildCommand?: string;\n deploymentToken: DeploymentToken;\n deploymentUrl: string;\n environmentTag?: string;\n metadata: {\n description?: string;\n hydrogenVersion?: string;\n user?: string;\n version?: string;\n url?: string;\n };\n defaultEnvironment: boolean;\n rootPath?: string;\n skipBuild: boolean;\n skipVerification: boolean;\n verificationMaxDuration: number;\n workerDir?: string;\n workerOnly: boolean;\n generateAuthBypassToken: boolean;\n authBypassTokenDuration?: string;\n overriddenEnvironmentVariables?: EnvironmentVariable[];\n}\n\nexport interface EnvironmentVariable {\n isSecret: boolean;\n key: string;\n value: string;\n}\n\nexport interface DeploymentToken {\n accessToken: string;\n allowedResource: string;\n appId: string;\n client: string;\n expiresAt: string;\n namespace: string;\n namespaceId: string;\n}\n\nexport interface DeploymentManifestFile {\n filePath: string;\n fileSize: number;\n mimeType: string;\n fileHash: string;\n fileType: string;\n}\n\nexport interface EnvironmentInput {\n handle?: string;\n tag?: string;\n}\n\nexport enum FileType {\n Worker = 'WORKER',\n Asset = 'ASSET',\n}\n\nexport interface OxygenError {\n message: string;\n}\n\nexport class VerificationError extends Error {}\n\nexport class DeploymentCompletedVerificationError extends Error {}\n"]}
1
+ {"version":3,"sources":["../../src/deploy/types.ts"],"names":["FileType"],"mappings":"AAgFY,IAAA,QAAA,qBAAAA,SAAL,KAAA;AACL,EAAAA,UAAA,QAAS,CAAA,GAAA,QAAA;AACT,EAAAA,UAAA,OAAQ,CAAA,GAAA,OAAA;AAFE,EAAAA,OAAAA,SAAAA;AAAA,CAAA,EAAA,QAAA,IAAA,EAAA;AASL,MAAM,6CAA6C,KAAM,CAAA;AAAC","file":"types.js","sourcesContent":["import {DeploymentVerificationDetailsResponse} from './graphql/deployment-verification-details.js';\n\nexport interface Build {\n id: string;\n assetPath: string;\n}\n\nexport interface ClientError extends Error {\n statusCode: number;\n}\n\nexport interface DeploymentHooks {\n buildFunction?: (urlPath?: string) => Promise<void>;\n onDeploymentCompletedVerificationStart?: () => void;\n onDeploymentCompletedVerificationError?: () => void;\n onDeploymentFailed?: (\n responseData: DeploymentVerificationDetailsResponse,\n ) => void;\n onDeploymentCompleted?: () => void;\n onVerificationStart?: () => void;\n onVerificationComplete?: () => void;\n onVerificationError?: (error: Error) => void;\n onUploadFilesStart?: () => void;\n onUploadFilesError?: (error: Error) => void;\n onUploadFilesComplete?: () => void;\n}\n\nexport interface DeploymentConfig {\n assetsDir?: string;\n bugsnag: boolean;\n buildCommand?: string;\n deploymentToken: DeploymentToken;\n deploymentUrl: string;\n environmentTag?: string;\n metadata: {\n description?: string;\n hydrogenVersion?: string;\n user?: string;\n version?: string;\n url?: string;\n };\n defaultEnvironment: boolean;\n rootPath?: string;\n skipBuild: boolean;\n workerDir?: string;\n workerOnly: boolean;\n generateAuthBypassToken: boolean;\n authBypassTokenDuration?: string;\n overriddenEnvironmentVariables?: EnvironmentVariable[];\n}\n\nexport interface EnvironmentVariable {\n isSecret: boolean;\n key: string;\n value: string;\n}\n\nexport interface DeploymentToken {\n accessToken: string;\n allowedResource: string;\n appId: string;\n client: string;\n expiresAt: string;\n namespace: string;\n namespaceId: string;\n}\n\nexport interface DeploymentManifestFile {\n filePath: string;\n fileSize: number;\n mimeType: string;\n fileHash: string;\n fileType: string;\n}\n\nexport interface EnvironmentInput {\n handle?: string;\n tag?: string;\n}\n\nexport enum FileType {\n Worker = 'WORKER',\n Asset = 'ASSET',\n}\n\nexport interface OxygenError {\n message: string;\n}\n\nexport class DeploymentCompletedVerificationError extends Error {}\n"]}
@@ -18,11 +18,9 @@ function createTestConfig(rootFolder) {
18
18
  deploymentToken: testToken,
19
19
  environmentTag: "environment",
20
20
  deploymentUrl: "https://localhost:3000",
21
- verificationMaxDuration: 300,
22
21
  metadata: {},
23
22
  rootPath: rootFolder,
24
23
  skipBuild: false,
25
- skipVerification: false,
26
24
  workerDir: "/worker/",
27
25
  workerOnly: false,
28
26
  generateAuthBypassToken: false
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/test-helper.ts"],"names":[],"mappings":";;AAIO,MAAM,SAAY,GAAA;AAAA,EACvB,WAAa,EAAA,YAAA;AAAA,EACb,eAAiB,EAAA,8BAAA;AAAA,EACjB,KAAO,EAAA,wBAAA;AAAA,EACP,MAAQ,EAAA,2BAAA;AAAA,EACR,SAAW,EAAA,0BAAA;AAAA,EACX,SAAW,EAAA,iBAAA;AAAA,EACX,WAAa,EAAA;AACf;AAEO,SAAS,iBAAiB,UAAsC,EAAA;AACrE,EAAO,OAAA;AAAA,IACL,SAAW,EAAA,UAAA;AAAA,IACX,OAAS,EAAA,KAAA;AAAA,IACT,YAAA,EAAc,MAAO,CAAA,cAAA,CAAe,mBAAoB,CAAA;AAAA,IACxD,kBAAoB,EAAA,KAAA;AAAA,IACpB,eAAiB,EAAA,SAAA;AAAA,IACjB,cAAgB,EAAA,aAAA;AAAA,IAChB,aAAe,EAAA,wBAAA;AAAA,IACf,uBAAyB,EAAA,GAAA;AAAA,IACzB,UAAU,EAAC;AAAA,IACX,QAAU,EAAA,UAAA;AAAA,IACV,SAAW,EAAA,KAAA;AAAA,IACX,gBAAkB,EAAA,KAAA;AAAA,IAClB,SAAW,EAAA,UAAA;AAAA,IACX,UAAY,EAAA,KAAA;AAAA,IACZ,uBAAyB,EAAA;AAAA,GAC3B;AACF","file":"test-helper.js","sourcesContent":["import type {DeploymentConfig} from '../deploy/types.js';\n\nimport {deployDefaults} from './utils.js';\n\nexport const testToken = {\n accessToken: 'some_token',\n allowedResource: 'gid://oxygen-hub/Namespace/1',\n appId: 'gid://oxygen-hub/App/1',\n client: 'gid://oxygen-hub/Client/1',\n expiresAt: '2023-04-08T09:38:50.368Z',\n namespace: 'fresh-namespace',\n namespaceId: 'gid://oxygen-hub/Namespace/1',\n};\n\nexport function createTestConfig(rootFolder: string): DeploymentConfig {\n return {\n assetsDir: '/assets/',\n bugsnag: false,\n buildCommand: String(deployDefaults.buildCommandDefault!),\n defaultEnvironment: false,\n deploymentToken: testToken,\n environmentTag: 'environment',\n deploymentUrl: 'https://localhost:3000',\n verificationMaxDuration: 300,\n metadata: {},\n rootPath: rootFolder,\n skipBuild: false,\n skipVerification: false,\n workerDir: '/worker/',\n workerOnly: false,\n generateAuthBypassToken: false,\n };\n}\n"]}
1
+ {"version":3,"sources":["../../src/utils/test-helper.ts"],"names":[],"mappings":";;AAIO,MAAM,SAAY,GAAA;AAAA,EACvB,WAAa,EAAA,YAAA;AAAA,EACb,eAAiB,EAAA,8BAAA;AAAA,EACjB,KAAO,EAAA,wBAAA;AAAA,EACP,MAAQ,EAAA,2BAAA;AAAA,EACR,SAAW,EAAA,0BAAA;AAAA,EACX,SAAW,EAAA,iBAAA;AAAA,EACX,WAAa,EAAA;AACf;AAEO,SAAS,iBAAiB,UAAsC,EAAA;AACrE,EAAO,OAAA;AAAA,IACL,SAAW,EAAA,UAAA;AAAA,IACX,OAAS,EAAA,KAAA;AAAA,IACT,YAAA,EAAc,MAAO,CAAA,cAAA,CAAe,mBAAoB,CAAA;AAAA,IACxD,kBAAoB,EAAA,KAAA;AAAA,IACpB,eAAiB,EAAA,SAAA;AAAA,IACjB,cAAgB,EAAA,aAAA;AAAA,IAChB,aAAe,EAAA,wBAAA;AAAA,IACf,UAAU,EAAC;AAAA,IACX,QAAU,EAAA,UAAA;AAAA,IACV,SAAW,EAAA,KAAA;AAAA,IACX,SAAW,EAAA,UAAA;AAAA,IACX,UAAY,EAAA,KAAA;AAAA,IACZ,uBAAyB,EAAA;AAAA,GAC3B;AACF","file":"test-helper.js","sourcesContent":["import type {DeploymentConfig} from '../deploy/types.js';\n\nimport {deployDefaults} from './utils.js';\n\nexport const testToken = {\n accessToken: 'some_token',\n allowedResource: 'gid://oxygen-hub/Namespace/1',\n appId: 'gid://oxygen-hub/App/1',\n client: 'gid://oxygen-hub/Client/1',\n expiresAt: '2023-04-08T09:38:50.368Z',\n namespace: 'fresh-namespace',\n namespaceId: 'gid://oxygen-hub/Namespace/1',\n};\n\nexport function createTestConfig(rootFolder: string): DeploymentConfig {\n return {\n assetsDir: '/assets/',\n bugsnag: false,\n buildCommand: String(deployDefaults.buildCommandDefault!),\n defaultEnvironment: false,\n deploymentToken: testToken,\n environmentTag: 'environment',\n deploymentUrl: 'https://localhost:3000',\n metadata: {},\n rootPath: rootFolder,\n skipBuild: false,\n workerDir: '/worker/',\n workerOnly: false,\n generateAuthBypassToken: false,\n };\n}\n"]}
@@ -41,15 +41,6 @@
41
41
  "multiple": false,
42
42
  "type": "option"
43
43
  },
44
- "verificationMaxDuration": {
45
- "char": "d",
46
- "description": "the maximum duration (in seconds) that the deployment verification step is allowed to run before it is considered failed.",
47
- "name": "verificationMaxDuration",
48
- "required": false,
49
- "hasDynamicHelp": false,
50
- "multiple": false,
51
- "type": "option"
52
- },
53
44
  "path": {
54
45
  "char": "p",
55
46
  "description": "Root path",
@@ -76,14 +67,6 @@
76
67
  "allowNo": false,
77
68
  "type": "boolean"
78
69
  },
79
- "skipVerification": {
80
- "char": "v",
81
- "description": "Skip running deployment verification step",
82
- "name": "skipVerification",
83
- "required": false,
84
- "allowNo": false,
85
- "type": "boolean"
86
- },
87
70
  "token": {
88
71
  "char": "t",
89
72
  "description": "Oxygen deployment token",
@@ -203,5 +186,5 @@
203
186
  ]
204
187
  }
205
188
  },
206
- "version": "4.7.1-unstable.202505231438.0"
189
+ "version": "5.0.1-unstable.202506030945.0"
207
190
  }
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "@shopify:registry": "https://registry.npmjs.org"
6
6
  },
7
7
  "license": "MIT",
8
- "version": "4.7.1-unstable.202505231438.0",
8
+ "version": "5.0.1-unstable.202506030945.0",
9
9
  "type": "module",
10
10
  "scripts": {
11
11
  "build": "tsup --sourcemap --clean --config ./tsup.config.ts && oclif manifest",
@@ -1,13 +0,0 @@
1
- import { Logger } from '@shopify/cli-kit/node/output';
2
- import { DeploymentConfig, DeploymentHooks } from './types.js';
3
- import './graphql/deployment-verification-details.js';
4
-
5
- interface VerificationOptions {
6
- config: DeploymentConfig;
7
- hooks?: DeploymentHooks;
8
- logger: Logger;
9
- url: string;
10
- }
11
- declare function verifyDeployment(options: VerificationOptions): Promise<void>;
12
-
13
- export { verifyDeployment };
@@ -1,54 +0,0 @@
1
- import { fetch } from '@shopify/cli-kit/node/http';
2
- import { outputInfo } from '@shopify/cli-kit/node/output';
3
- import { VerificationError } from './types.js';
4
-
5
- async function verifyDeployment(options) {
6
- const { config, url, logger, hooks } = options;
7
- hooks?.onVerificationStart?.();
8
- outputInfo("Verifying worker deployment is routable...", logger);
9
- let attempts = 0;
10
- let delay = 0;
11
- let calledVerificationError = false;
12
- const startTime = Date.now();
13
- const handleInterval = async () => {
14
- if (attempts < 10) {
15
- delay = 500;
16
- } else if (attempts % 5 === 0) {
17
- delay += 5e3;
18
- }
19
- const elapsedTime = (Date.now() - startTime) / 1e3;
20
- if (elapsedTime + delay / 1e3 > config.verificationMaxDuration) {
21
- const error = new VerificationError(
22
- "Unable to verify that the worker is accessible."
23
- );
24
- if (!calledVerificationError) {
25
- calledVerificationError = true;
26
- hooks?.onVerificationError?.(error);
27
- }
28
- throw error;
29
- }
30
- attempts++;
31
- await new Promise((resolve) => setTimeout(resolve, delay));
32
- await check();
33
- };
34
- const check = async () => {
35
- try {
36
- const response = await fetch(`${url}/.oxygen/deployment`, {
37
- method: "HEAD"
38
- });
39
- if (response.status === 200) {
40
- outputInfo("Deployment verification check passed", logger);
41
- hooks?.onVerificationComplete?.();
42
- return Promise.resolve();
43
- }
44
- await handleInterval();
45
- } catch {
46
- await handleInterval();
47
- }
48
- };
49
- await check();
50
- }
51
-
52
- export { verifyDeployment };
53
- //# sourceMappingURL=verify-deployment.js.map
54
- //# sourceMappingURL=verify-deployment.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/deploy/verify-deployment.ts"],"names":[],"mappings":";;;;AAYA,eAAsB,iBACpB,OACe,EAAA;AACf,EAAA,MAAM,EAAC,MAAA,EAAQ,GAAK,EAAA,MAAA,EAAQ,OAAS,GAAA,OAAA;AACrC,EAAA,KAAA,EAAO,mBAAsB,IAAA;AAC7B,EAAA,UAAA,CAAW,8CAA8C,MAAM,CAAA;AAE/D,EAAA,IAAI,QAAW,GAAA,CAAA;AACf,EAAA,IAAI,KAAQ,GAAA,CAAA;AACZ,EAAA,IAAI,uBAA0B,GAAA,KAAA;AAC9B,EAAM,MAAA,SAAA,GAAY,KAAK,GAAI,EAAA;AAE3B,EAAA,MAAM,iBAAiB,YAAY;AACjC,IAAA,IAAI,WAAW,EAAI,EAAA;AACjB,MAAQ,KAAA,GAAA,GAAA;AAAA,KACV,MAAA,IAAW,QAAW,GAAA,CAAA,KAAM,CAAG,EAAA;AAC7B,MAAS,KAAA,IAAA,GAAA;AAAA;AAEX,IAAA,MAAM,WAAe,GAAA,CAAA,IAAA,CAAK,GAAI,EAAA,GAAI,SAAa,IAAA,GAAA;AAC/C,IAAA,IAAI,WAAc,GAAA,KAAA,GAAQ,GAAO,GAAA,MAAA,CAAO,uBAAyB,EAAA;AAC/D,MAAA,MAAM,QAAQ,IAAI,iBAAA;AAAA,QAChB;AAAA,OACF;AACA,MAAA,IAAI,CAAC,uBAAyB,EAAA;AAC5B,QAA0B,uBAAA,GAAA,IAAA;AAC1B,QAAA,KAAA,EAAO,sBAAsB,KAAK,CAAA;AAAA;AAEpC,MAAM,MAAA,KAAA;AAAA;AAER,IAAA,QAAA,EAAA;AACA,IAAA,MAAM,IAAI,OAAQ,CAAA,CAAC,YAAY,UAAW,CAAA,OAAA,EAAS,KAAK,CAAC,CAAA;AACzD,IAAA,MAAM,KAAM,EAAA;AAAA,GACd;AAEA,EAAA,MAAM,QAAQ,YAAY;AACxB,IAAI,IAAA;AACF,MAAA,MAAM,QAAW,GAAA,MAAM,KAAM,CAAA,CAAA,EAAG,GAAG,CAAuB,mBAAA,CAAA,EAAA;AAAA,QACxD,MAAQ,EAAA;AAAA,OACT,CAAA;AACD,MAAI,IAAA,QAAA,CAAS,WAAW,GAAK,EAAA;AAC3B,QAAA,UAAA,CAAW,wCAAwC,MAAM,CAAA;AACzD,QAAA,KAAA,EAAO,sBAAyB,IAAA;AAChC,QAAA,OAAO,QAAQ,OAAQ,EAAA;AAAA;AAEzB,MAAA,MAAM,cAAe,EAAA;AAAA,KACf,CAAA,MAAA;AACN,MAAA,MAAM,cAAe,EAAA;AAAA;AACvB,GACF;AAEA,EAAA,MAAM,KAAM,EAAA;AACd","file":"verify-deployment.js","sourcesContent":["import {fetch} from '@shopify/cli-kit/node/http';\nimport {Logger, outputInfo} from '@shopify/cli-kit/node/output';\n\nimport {DeploymentConfig, DeploymentHooks, VerificationError} from './types.js';\n\ninterface VerificationOptions {\n config: DeploymentConfig;\n hooks?: DeploymentHooks;\n logger: Logger;\n url: string;\n}\n\nexport async function verifyDeployment(\n options: VerificationOptions,\n): Promise<void> {\n const {config, url, logger, hooks} = options;\n hooks?.onVerificationStart?.();\n outputInfo('Verifying worker deployment is routable...', logger);\n\n let attempts = 0;\n let delay = 0;\n let calledVerificationError = false;\n const startTime = Date.now();\n\n const handleInterval = async () => {\n if (attempts < 10) {\n delay = 500;\n } else if (attempts % 5 === 0) {\n delay += 5000;\n }\n const elapsedTime = (Date.now() - startTime) / 1000;\n if (elapsedTime + delay / 1000 > config.verificationMaxDuration) {\n const error = new VerificationError(\n 'Unable to verify that the worker is accessible.',\n );\n if (!calledVerificationError) {\n calledVerificationError = true;\n hooks?.onVerificationError?.(error);\n }\n throw error;\n }\n attempts++;\n await new Promise((resolve) => setTimeout(resolve, delay));\n await check();\n };\n\n const check = async () => {\n try {\n const response = await fetch(`${url}/.oxygen/deployment`, {\n method: 'HEAD',\n });\n if (response.status === 200) {\n outputInfo('Deployment verification check passed', logger);\n hooks?.onVerificationComplete?.();\n return Promise.resolve();\n }\n await handleInterval();\n } catch {\n await handleInterval();\n }\n };\n\n await check();\n}\n"]}