Skip to content

Derive deploy identifiers from the active app version#8048

Closed
isaacroldan wants to merge 1 commit into
deploy-split/04-deploy-identifiers-shapefrom
deploy-split/05-active-app-version-classification
Closed

Derive deploy identifiers from the active app version#8048
isaacroldan wants to merge 1 commit into
deploy-split/04-deploy-identifiers-shapefrom
deploy-split/05-active-app-version-classification

Conversation

@isaacroldan

@isaacroldan isaacroldan commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

Part 5 of 6 — splitting #8040. This is the core behavior change.

WHY are these changes introduced?

deploy matched local extensions to remote registrations through the interactive Partners-era flow. On App Management, modules are identified deterministically by UID, so the matching can be derived from the app's active version instead of prompting the user.

WHAT is this pull request doing?

  • Adds the deploy-app-version module: classifies each local extension against the active version's modules — match by UID, with a legacy UUID fallback for un-migrated extensions — into created / updated / deleted / unchanged.
  • ensureDeployContext now returns DeployIdentifiers, and deploy no longer writes extension IDs back to .env.
  • Release reuses the same config breakdown via configExtensionsIdentifiersReleaseBreakdown.
  • The legacy matching modules are left in place but unused; removed in Remove the legacy extension identifier-matching code #8049.

⚠️ User-facing behavior change (deploy no longer persists identifiers; classification is non-interactive) — needs a changeset.

How to test your changes?

pnpm --filter @shopify/app exec vitest run src/cli/services/context/deploy-app-version.test.ts src/cli/services/deploy.test.ts src/cli/services/release.test.ts

Replaces the interactive extension-matching flow used by `deploy` with a
classification against the app's active version: each local extension is
matched to a remote module by UID (with a legacy UUID fallback for
un-migrated extensions), and created/updated/deleted/unchanged status is
derived from that. `ensureDeployContext` now returns `DeployIdentifiers`, and
`deploy` no longer writes identifiers back to the .env file. Release reuses
the same config breakdown via `configExtensionsIdentifiersReleaseBreakdown`.

The legacy matching modules remain in place but unused; they are removed in a
follow-up commit.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

isaacroldan commented Jul 9, 2026

Copy link
Copy Markdown
Contributor Author

@github-actions

github-actions Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

Differences in type declarations

We detected differences in the type declarations generated by Typescript for this branch compared to the baseline ('main' branch). Please, review them to ensure they are backward-compatible. Here are some important things to keep in mind:

  • Some seemingly private modules might be re-exported through public modules.
  • If the branch is behind main you might see odd diffs, rebase main into this branch.

New type declarations

We found no new type declarations in this PR

Existing type declarations

packages/cli-kit/dist/public/common/object.d.ts
@@ -38,6 +38,14 @@ export declare function mapValues<T extends object, TResult>(source: T | null |
  * @returns True if the objects are equal, false otherwise.
  */
 export declare function deepCompare(one: object, two: object): boolean;
+/**
+ * Deeply compares two values and treats arrays as order-insensitive.
+ *
+ * @param one - The first value to be compared.
+ * @param two - The second value to be compared.
+ * @returns True if the normalized values are equal, false otherwise.
+ */
+export declare function deepCompareWithOrderInsensitiveArrays(one: unknown, two: unknown): boolean;
 /**
  * Return the difference between two nested objects.
  *

@isaacroldan

Copy link
Copy Markdown
Contributor Author

Superseded — #8048 was split into #8054 (release config diff), #8055 (active-app-version classification module), and #8056 (wire deploy to it) for easier review.

@isaacroldan isaacroldan deleted the deploy-split/05-active-app-version-classification branch July 10, 2026 11:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

no-changelog This PR doesn't include a changeset entry. Is an internal only change not relevant to end users.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant