From 44d8ba4b24f8d774fc4837154c01db191432f696 Mon Sep 17 00:00:00 2001 From: Nick Wesselman <27013789+nickwesselman@users.noreply.github.com> Date: Wed, 19 Nov 2025 16:15:23 -0500 Subject: [PATCH 01/10] add organization-id flag to suppress organization selection --- packages/app/src/cli/commands/app/init.ts | 23 ++++++++++++++++++++++- packages/cli/README.md | 6 ++++-- packages/cli/oclif.manifest.json | 9 +++++++++ packages/create-app/oclif.manifest.json | 9 +++++++++ 4 files changed, 44 insertions(+), 3 deletions(-) diff --git a/packages/app/src/cli/commands/app/init.ts b/packages/app/src/cli/commands/app/init.ts index c2935186968..05703270c37 100644 --- a/packages/app/src/cli/commands/app/init.ts +++ b/packages/app/src/cli/commands/app/init.ts @@ -7,6 +7,7 @@ import {validateFlavorValue, validateTemplateValue} from '../../services/init/va import {MinimalOrganizationApp, Organization, OrganizationApp} from '../../models/organization.js' import {appNamePrompt, createAsNewAppPrompt, selectAppPrompt} from '../../prompts/dev.js' import {searchForAppsByNameFactory} from '../../services/dev/prompt-helpers.js' +import {fetchOrganizations} from '../../services/dev/fetch.js' import {isValidName} from '../../models/app/validation/common.js' import {Flags} from '@oclif/core' import {globalFlags} from '@shopify/cli-kit/node/cli' @@ -64,6 +65,12 @@ export default class Init extends AppLinkedCommand { env: 'SHOPIFY_FLAG_CLIENT_ID', exclusive: ['config'], }), + 'organization-id': Flags.string({ + hidden: false, + description: + 'The organization ID. Your organization ID can be found in your Dev Dashboard URL: https://dev.shopify.com/dashboard/', + env: 'SHOPIFY_FLAG_ORGANIZATION_ID', + }), } async run(): Promise { @@ -93,7 +100,21 @@ export default class Init extends AppLinkedCommand { developerPlatformClient = selectedApp.developerPlatformClient ?? developerPlatformClient selectAppResult = {result: 'existing', app: selectedApp} } else { - const org = await selectOrg() + let org: Organization + if (flags['organization-id']) { + // If an organization-id is provided, fetch all organizations and find the matching one + const orgs = await fetchOrganizations() + const matchingOrg = orgs.find((organization) => organization.id === flags['organization-id']) + if (!matchingOrg) { + throw new AbortError( + `Organization with ID ${flags['organization-id']} not found`, + 'Please verify the organization ID and try again. You can find your organization ID in your Dev Dashboard URL: https://dev.shopify.com/dashboard/', + ) + } + org = matchingOrg + } else { + org = await selectOrg() + } developerPlatformClient = selectDeveloperPlatformClient({organization: org}) const {organization, apps, hasMorePages} = await developerPlatformClient.orgAndApps(org.id) selectAppResult = await selectAppOrNewAppName(name, apps, hasMorePages, organization, developerPlatformClient) diff --git a/packages/cli/README.md b/packages/cli/README.md index 41a104121be..81660d084f8 100644 --- a/packages/cli/README.md +++ b/packages/cli/README.md @@ -581,8 +581,8 @@ Create a new app project ``` USAGE - $ shopify app init [--client-id | ] [--flavor ] [-n ] [--no-color] [-d - npm|yarn|pnpm|bun] [-p ] [--template ] [--verbose] + $ shopify app init [--client-id | ] [--flavor ] [-n ] [--no-color] [--organization-id + ] [-d npm|yarn|pnpm|bun] [-p ] [--template ] [--verbose] FLAGS -d, --package-manager=