E2E: per-test store isolation with automatic teardown#7279
Open
phyllis-sy-wu wants to merge 2 commits intopsyw-0413-E2E-temporary-time-limit-bumpfrom
Open
E2E: per-test store isolation with automatic teardown#7279phyllis-sy-wu wants to merge 2 commits intopsyw-0413-E2E-temporary-time-limit-bumpfrom
phyllis-sy-wu wants to merge 2 commits intopsyw-0413-E2E-temporary-time-limit-bumpfrom
Conversation
Contributor
Author
|
Warning This pull request is not mergeable via GitHub because a downstack PR is open. Once all requirements are satisfied, merge this PR as a stack on Graphite.
This stack of pull requests is managed by Graphite. Learn more about stacking. |
4 tasks
a47982f to
d6a4e19
Compare
4 tasks
d6a4e19 to
9659cf3
Compare
94f4908 to
d872975
Compare
9659cf3 to
2bb6ce4
Compare
4 tasks
e5289d3 to
5c0d260
Compare
77e5ea0 to
5765d59
Compare
5765d59 to
f45019e
Compare
5c0d260 to
0e615ef
Compare
c7ad615 to
75f05bf
Compare
f45019e to
16b2f4d
Compare
75f05bf to
dbcae8d
Compare
16b2f4d to
e673884
Compare
dbcae8d to
898e174
Compare
e673884 to
dffff76
Compare
dffff76 to
6ee7257
Compare
898e174 to
fd1b216
Compare
Contributor
Differences in type declarationsWe 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:
New type declarationsWe found no new type declarations in this PR Existing type declarationspackages/cli-kit/dist/private/node/analytics.d.ts@@ -23,7 +23,6 @@ interface EnvironmentData {
env_auth_method: string;
env_is_wsl: boolean;
env_build_repository: string;
- env_auto_upgrade_enabled: boolean | null;
}
export declare function getEnvironmentData(config: Interfaces.Config): Promise<EnvironmentData>;
export declare function getSensitiveEnvironmentData(config: Interfaces.Config): Promise<{
packages/cli-kit/dist/public/node/metadata.d.ts@@ -34,7 +34,7 @@ export type SensitiveSchema<T> = T extends RuntimeMetadataManager<infer _TPublic
* @returns A container for the metadata.
*/
export declare function createRuntimeMetadataContainer<TPublic extends AnyJson, TSensitive extends AnyJson = Record<string, never>>(defaultPublicMetadata?: Partial<TPublic>): RuntimeMetadataManager<TPublic, TSensitive>;
-type CmdFieldsFromMonorail = PickByPrefix<MonorailEventPublic, 'cmd_all_'> & PickByPrefix<MonorailEventPublic, 'cmd_app_'> & PickByPrefix<MonorailEventPublic, 'cmd_create_app_'> & PickByPrefix<MonorailEventPublic, 'cmd_theme_'> & PickByPrefix<MonorailEventPublic, 'store_'> & PickByPrefix<MonorailEventPublic, 'env_auto_upgrade_'>;
+type CmdFieldsFromMonorail = PickByPrefix<MonorailEventPublic, 'cmd_all_'> & PickByPrefix<MonorailEventPublic, 'cmd_app_'> & PickByPrefix<MonorailEventPublic, 'cmd_create_app_'> & PickByPrefix<MonorailEventPublic, 'cmd_theme_'> & PickByPrefix<MonorailEventPublic, 'store_'>;
declare const coreData: RuntimeMetadataManager<CmdFieldsFromMonorail, {
commandStartOptions: {
startTime: number;
packages/cli-kit/dist/public/node/monorail.d.ts@@ -2,7 +2,7 @@ import { JsonMap } from '../../private/common/json.js';
import { DeepRequired } from '../common/ts/deep-required.js';
export { DeepRequired };
type Optional<T> = T | null;
-export declare const MONORAIL_COMMAND_TOPIC = "app_cli3_command/1.21";
+export declare const MONORAIL_COMMAND_TOPIC = "app_cli3_command/1.20";
export interface Schemas {
[MONORAIL_COMMAND_TOPIC]: {
sensitive: {
@@ -46,10 +46,6 @@ export interface Schemas {
cmd_all_timing_network_ms?: Optional<number>;
cmd_all_timing_prompts_ms?: Optional<number>;
cmd_all_timing_active_ms?: Optional<number>;
- env_auto_upgrade_enabled?: Optional<boolean>;
- env_auto_upgrade_accepted?: Optional<boolean>;
- env_auto_upgrade_skipped_reason?: Optional<string>;
- env_auto_upgrade_success?: Optional<boolean>;
cmd_extensions_binary_from_source?: Optional<boolean>;
cmd_scaffold_required_auth?: Optional<boolean>;
cmd_scaffold_template_custom?: Optional<boolean>;
packages/cli-kit/dist/public/node/upgrade.d.ts@@ -2,7 +2,7 @@
* Utility function for generating an install command for the user to run
* to install an updated version of Shopify CLI.
*
- * @returns A string with the command to run, or undefined if the package manager cannot be determined.
+ * @returns A string with the command to run.
*/
export declare function cliInstallCommand(): string | undefined;
/**
|
This was
linked to
issues
Apr 15, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Addressed #7269
WHY are these changes introduced?
E2E tests currently share a single pre-existing dev store configured via
E2E_STORE_FQDN. This causes:teardownAppsilently skips steps, doesn't verify success, and a single failure blocks later cleanupThis PR also lays the foundation for parallel workers (future PR), where shared stores would be impossible since multiple tests run simultaneously.
WHAT is this pull request doing?
Per-test store isolation:
app dev,hot reload,multi-config dev,toml-config dev) create a fresh store via browser automation onadmin.shopify.com/store-create/organization/{orgId}Robust teardown with escalating retry (
setup/teardown.ts):Three independent phases — failure in one never blocks the next:
Phase 1: Uninstall app from store (3 attempts)
/settings/apps, finds app by name, clicks uninstallh2:has-text("Dev Console")→button[aria-label="hide"]Phase 2: Delete store (3 attempts)
/settings/appsto check stateaccess_accountredirect)isStoreAppsEmpty(reloads once if stale)/settings/plan, clicks delete, checkbox, confirmaccess_accountURLPhase 3: Delete app from dashboard (3 attempts, always runs)
button.critical[type="submit"]refreshIfPageErrordetects error pages and refreshesServer error handling (
setup/browser.ts):refreshIfPageError(page)detects 500/502 error pages and auto-refreshesTagged logging (
setup/env.ts):createLogger(tag)produces[e2e][w0][browser],[e2e][w0][cli]formate2eSection()prints section headers:----- SETUP: store ... -----,----- TEARDOWN: app ... -----Exported building blocks (
setup/store.ts):uninstallAppFromStore(page, storeSlug, appName)→ booleandeleteStore(page, storeSlug)→ booleanisStoreAppsEmpty(page)→ boolean (pure page checker, caller navigates)dismissDevConsole(page)→ voidFiles changed:
setup/store.tssetup/teardown.tsteardownAll()orchestrator with 3-phase teardownsetup/app.tsfindAppOnDevDashboard()(with pagination),deleteAppFromDevDashboard()setup/env.tscreateLogger(),e2eSection(),workerIndexsetup/cli.tssetup/browser.tsrefreshIfPageError()teardownAll, store-dependent tests usestoreTestFixtureHow to test your changes?
Checklist
pnpm changeset add