From 06dcce03d8a0b134ba33bf56f11b4ec9e32ac8c8 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 15 Nov 2025 18:12:23 +0100 Subject: [PATCH 1/2] Version Packages (#2) Co-authored-by: github-actions[bot] --- .changeset/frank-oranges-juggle.md | 5 ---- .changeset/honest-corners-relate.md | 6 ----- packages/app/CHANGELOG.md | 10 +++++++ packages/app/package.json | 8 +++--- packages/cli-kit/CHANGELOG.md | 7 +++++ packages/cli-kit/package.json | 2 +- packages/cli-kit/src/public/common/version.ts | 2 +- packages/cli/CHANGELOG.md | 2 ++ packages/cli/oclif.manifest.json | 2 +- packages/cli/package.json | 12 ++++----- packages/create-app/CHANGELOG.md | 2 ++ packages/create-app/oclif.manifest.json | 2 +- packages/create-app/package.json | 6 ++--- packages/plugin-cloudflare/CHANGELOG.md | 8 ++++++ packages/plugin-cloudflare/package.json | 4 +-- packages/plugin-did-you-mean/CHANGELOG.md | 8 ++++++ packages/plugin-did-you-mean/package.json | 4 +-- packages/theme/CHANGELOG.md | 9 +++++++ packages/theme/package.json | 4 +-- .../ui-extensions-dev-console/CHANGELOG.md | 2 ++ .../ui-extensions-dev-console/package.json | 2 +- pnpm-lock.yaml | 26 +++++++++---------- 22 files changed, 85 insertions(+), 48 deletions(-) delete mode 100644 .changeset/frank-oranges-juggle.md delete mode 100644 .changeset/honest-corners-relate.md diff --git a/.changeset/frank-oranges-juggle.md b/.changeset/frank-oranges-juggle.md deleted file mode 100644 index b0f436c7093..00000000000 --- a/.changeset/frank-oranges-juggle.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@shopify/cli-kit': patch ---- - -Fix zip and brotliCompress functions to handle binary files diff --git a/.changeset/honest-corners-relate.md b/.changeset/honest-corners-relate.md deleted file mode 100644 index 7f038e37fcc..00000000000 --- a/.changeset/honest-corners-relate.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@shopify/cli-kit': patch -'@shopify/theme': patch ---- - -[Bug fix] Remove ability to sync Liquid files by checksum diff --git a/packages/app/CHANGELOG.md b/packages/app/CHANGELOG.md index 0ba5fd77484..533b211b4ec 100644 --- a/packages/app/CHANGELOG.md +++ b/packages/app/CHANGELOG.md @@ -1,5 +1,15 @@ # @shopify/app +## 3.87.1 + +### Patch Changes + +- Updated dependencies [9b97dfa] +- Updated dependencies [9450302] + - @shopify/cli-kit@3.87.1 + - @shopify/theme@3.87.1 + - @shopify/plugin-cloudflare@3.87.1 + ## 3.87.0 ### Minor Changes diff --git a/packages/app/package.json b/packages/app/package.json index f3761cca6e1..d486254e48a 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -1,6 +1,6 @@ { "name": "@shopify/app", - "version": "3.87.0", + "version": "3.87.1", "packageManager": "pnpm@10.11.1", "description": "Utilities for loading, building, and publishing apps.", "homepage": "https://github.com/shopify/cli#readme", @@ -50,12 +50,12 @@ "@graphql-typed-document-node/core": "3.2.0", "@luckycatfactory/esbuild-graphql-loader": "3.8.1", "@oclif/core": "4.5.3", - "@shopify/cli-kit": "3.87.0", + "@shopify/cli-kit": "3.87.1", "@shopify/function-runner": "4.1.1", - "@shopify/plugin-cloudflare": "3.87.0", + "@shopify/plugin-cloudflare": "3.87.1", "@shopify/polaris": "12.27.0", "@shopify/polaris-icons": "8.11.1", - "@shopify/theme": "3.87.0", + "@shopify/theme": "3.87.1", "@shopify/theme-check-node": "3.23.0", "@shopify/toml-patch": "0.3.0", "body-parser": "1.20.3", diff --git a/packages/cli-kit/CHANGELOG.md b/packages/cli-kit/CHANGELOG.md index e7c8444745c..00acc4a628a 100644 --- a/packages/cli-kit/CHANGELOG.md +++ b/packages/cli-kit/CHANGELOG.md @@ -1,5 +1,12 @@ # @shopify/cli-kit +## 3.87.1 + +### Patch Changes + +- 9b97dfa: Fix zip and brotliCompress functions to handle binary files +- 9450302: [Bug fix] Remove ability to sync Liquid files by checksum + ## 3.87.0 ### Minor Changes diff --git a/packages/cli-kit/package.json b/packages/cli-kit/package.json index 6d6b2c417d6..b5f465ac328 100644 --- a/packages/cli-kit/package.json +++ b/packages/cli-kit/package.json @@ -1,6 +1,6 @@ { "name": "@shopify/cli-kit", - "version": "3.87.0", + "version": "3.87.1", "packageManager": "pnpm@10.11.1", "private": false, "description": "A set of utilities, interfaces, and models that are common across all the platform features", diff --git a/packages/cli-kit/src/public/common/version.ts b/packages/cli-kit/src/public/common/version.ts index 5cbcaab4883..5cc5f3ce5ea 100644 --- a/packages/cli-kit/src/public/common/version.ts +++ b/packages/cli-kit/src/public/common/version.ts @@ -1 +1 @@ -export const CLI_KIT_VERSION = '3.87.0' +export const CLI_KIT_VERSION = '3.87.1' diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md index 3143f47fe11..6adb34c7911 100644 --- a/packages/cli/CHANGELOG.md +++ b/packages/cli/CHANGELOG.md @@ -1,5 +1,7 @@ # @shopify/cli +## 3.87.1 + ## 3.87.0 ## 3.86.0 diff --git a/packages/cli/oclif.manifest.json b/packages/cli/oclif.manifest.json index febd61f6e87..68ba8759562 100644 --- a/packages/cli/oclif.manifest.json +++ b/packages/cli/oclif.manifest.json @@ -7215,5 +7215,5 @@ "summary": "Trigger delivery of a sample webhook topic payload to a designated address." } }, - "version": "3.87.0" + "version": "3.87.1" } \ No newline at end of file diff --git a/packages/cli/package.json b/packages/cli/package.json index 7547206aaf4..2ccfe5e5e12 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@shopify/cli", - "version": "3.87.0", + "version": "3.87.1", "packageManager": "pnpm@10.11.1", "private": false, "description": "A CLI tool to build for the Shopify platform", @@ -109,11 +109,11 @@ "@oclif/core": "4.5.3", "@oclif/plugin-commands": "4.1.33", "@oclif/plugin-plugins": "5.4.47", - "@shopify/app": "3.87.0", - "@shopify/cli-kit": "3.87.0", - "@shopify/plugin-cloudflare": "3.87.0", - "@shopify/plugin-did-you-mean": "3.87.0", - "@shopify/theme": "3.87.0", + "@shopify/app": "3.87.1", + "@shopify/cli-kit": "3.87.1", + "@shopify/plugin-cloudflare": "3.87.1", + "@shopify/plugin-did-you-mean": "3.87.1", + "@shopify/theme": "3.87.1", "@shopify/cli-hydrogen": "11.1.5", "@types/global-agent": "3.0.0", "@typescript-eslint/eslint-plugin": "7.13.1", diff --git a/packages/create-app/CHANGELOG.md b/packages/create-app/CHANGELOG.md index 7c5b1314e5d..fe89e8e80c8 100644 --- a/packages/create-app/CHANGELOG.md +++ b/packages/create-app/CHANGELOG.md @@ -1,5 +1,7 @@ # @shopify/create-app +## 3.87.1 + ## 3.87.0 ## 3.86.0 diff --git a/packages/create-app/oclif.manifest.json b/packages/create-app/oclif.manifest.json index 9d2d7d7e3b6..098c804925e 100644 --- a/packages/create-app/oclif.manifest.json +++ b/packages/create-app/oclif.manifest.json @@ -104,5 +104,5 @@ "summary": "Create a new app project" } }, - "version": "3.87.0" + "version": "3.87.1" } \ No newline at end of file diff --git a/packages/create-app/package.json b/packages/create-app/package.json index f820b722f0f..30bc61d8675 100644 --- a/packages/create-app/package.json +++ b/packages/create-app/package.json @@ -1,6 +1,6 @@ { "name": "@shopify/create-app", - "version": "3.87.0", + "version": "3.87.1", "packageManager": "pnpm@10.11.1", "private": false, "description": "A CLI tool to create a new Shopify app.", @@ -58,8 +58,8 @@ "esbuild": "0.25.12" }, "devDependencies": { - "@shopify/cli-kit": "3.87.0", - "@shopify/app": "3.87.0", + "@shopify/cli-kit": "3.87.1", + "@shopify/app": "3.87.1", "esbuild-plugin-copy": "^2.1.1", "@vitest/coverage-istanbul": "^3.1.4" }, diff --git a/packages/plugin-cloudflare/CHANGELOG.md b/packages/plugin-cloudflare/CHANGELOG.md index 803d93e89ab..8c37ff61497 100644 --- a/packages/plugin-cloudflare/CHANGELOG.md +++ b/packages/plugin-cloudflare/CHANGELOG.md @@ -1,5 +1,13 @@ # @shopify/plugin-cloudflare +## 3.87.1 + +### Patch Changes + +- Updated dependencies [9b97dfa] +- Updated dependencies [9450302] + - @shopify/cli-kit@3.87.1 + ## 3.87.0 ### Patch Changes diff --git a/packages/plugin-cloudflare/package.json b/packages/plugin-cloudflare/package.json index eb47b9021c9..b0e3dd3150a 100644 --- a/packages/plugin-cloudflare/package.json +++ b/packages/plugin-cloudflare/package.json @@ -1,6 +1,6 @@ { "name": "@shopify/plugin-cloudflare", - "version": "3.87.0", + "version": "3.87.1", "packageManager": "pnpm@10.11.1", "description": "Enables the creation of Cloudflare tunnels from `shopify app dev`, allowing previews from any device", "keywords": [ @@ -47,7 +47,7 @@ }, "dependencies": { "@oclif/core": "4.5.3", - "@shopify/cli-kit": "3.87.0" + "@shopify/cli-kit": "3.87.1" }, "devDependencies": { "@vitest/coverage-istanbul": "^3.1.4" diff --git a/packages/plugin-did-you-mean/CHANGELOG.md b/packages/plugin-did-you-mean/CHANGELOG.md index ce92a74fad3..07461a24698 100644 --- a/packages/plugin-did-you-mean/CHANGELOG.md +++ b/packages/plugin-did-you-mean/CHANGELOG.md @@ -1,5 +1,13 @@ # @shopify/plugin-did-you-mean +## 3.87.1 + +### Patch Changes + +- Updated dependencies [9b97dfa] +- Updated dependencies [9450302] + - @shopify/cli-kit@3.87.1 + ## 3.87.0 ### Patch Changes diff --git a/packages/plugin-did-you-mean/package.json b/packages/plugin-did-you-mean/package.json index 87a1b10755f..e80392f88b7 100644 --- a/packages/plugin-did-you-mean/package.json +++ b/packages/plugin-did-you-mean/package.json @@ -1,6 +1,6 @@ { "name": "@shopify/plugin-did-you-mean", - "version": "3.87.0", + "version": "3.87.1", "packageManager": "pnpm@10.11.1", "private": true, "bugs": { @@ -42,7 +42,7 @@ }, "dependencies": { "@oclif/core": "4.5.3", - "@shopify/cli-kit": "3.87.0", + "@shopify/cli-kit": "3.87.1", "n-gram": "2.0.2" }, "devDependencies": { diff --git a/packages/theme/CHANGELOG.md b/packages/theme/CHANGELOG.md index 93e8039e895..60e4dd4f528 100644 --- a/packages/theme/CHANGELOG.md +++ b/packages/theme/CHANGELOG.md @@ -1,5 +1,14 @@ # @shopify/theme +## 3.87.1 + +### Patch Changes + +- 9450302: [Bug fix] Remove ability to sync Liquid files by checksum +- Updated dependencies [9b97dfa] +- Updated dependencies [9450302] + - @shopify/cli-kit@3.87.1 + ## 3.87.0 ### Minor Changes diff --git a/packages/theme/package.json b/packages/theme/package.json index f240e161580..697432b78b7 100644 --- a/packages/theme/package.json +++ b/packages/theme/package.json @@ -1,6 +1,6 @@ { "name": "@shopify/theme", - "version": "3.87.0", + "version": "3.87.1", "packageManager": "pnpm@10.11.1", "private": true, "description": "Utilities for building and publishing themes", @@ -42,7 +42,7 @@ }, "dependencies": { "@oclif/core": "4.5.3", - "@shopify/cli-kit": "3.87.0", + "@shopify/cli-kit": "3.87.1", "@shopify/theme-check-node": "3.23.0", "@shopify/theme-language-server-node": "2.20.0", "chokidar": "3.6.0", diff --git a/packages/ui-extensions-dev-console/CHANGELOG.md b/packages/ui-extensions-dev-console/CHANGELOG.md index ca370e46ff9..4d6c4f997d0 100644 --- a/packages/ui-extensions-dev-console/CHANGELOG.md +++ b/packages/ui-extensions-dev-console/CHANGELOG.md @@ -1,5 +1,7 @@ # @shopify/ui-extensions-dev-console-app +## 3.87.1 + ## 3.87.0 ## 3.86.0 diff --git a/packages/ui-extensions-dev-console/package.json b/packages/ui-extensions-dev-console/package.json index b675c839395..d56ae453efe 100644 --- a/packages/ui-extensions-dev-console/package.json +++ b/packages/ui-extensions-dev-console/package.json @@ -1,6 +1,6 @@ { "name": "@shopify/ui-extensions-dev-console-app", - "version": "3.87.0", + "version": "3.87.1", "packageManager": "pnpm@10.11.1", "private": true, "scripts": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 69880d526fc..512e1623188 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -163,13 +163,13 @@ importers: specifier: 4.5.3 version: 4.5.3 '@shopify/cli-kit': - specifier: 3.87.0 + specifier: 3.87.1 version: link:../cli-kit '@shopify/function-runner': specifier: 4.1.1 version: 4.1.1 '@shopify/plugin-cloudflare': - specifier: 3.87.0 + specifier: 3.87.1 version: link:../plugin-cloudflare '@shopify/polaris': specifier: 12.27.0 @@ -178,7 +178,7 @@ importers: specifier: 8.11.1 version: 8.11.1(react@18.3.1) '@shopify/theme': - specifier: 3.87.0 + specifier: 3.87.1 version: link:../theme '@shopify/theme-check-node': specifier: 3.23.0 @@ -282,22 +282,22 @@ importers: specifier: 5.4.47 version: 5.4.47 '@shopify/app': - specifier: 3.87.0 + specifier: 3.87.1 version: link:../app '@shopify/cli-hydrogen': specifier: 11.1.5 version: 11.1.5(@graphql-codegen/cli@5.0.4(@parcel/watcher@2.5.1)(@types/node@24.7.0)(crossws@0.3.5)(enquirer@2.4.1)(graphql@16.10.0)(typescript@5.8.3))(graphql-config@5.1.5(@types/node@24.7.0)(crossws@0.3.5)(graphql@16.10.0)(typescript@5.8.3))(graphql@16.10.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(vite@6.4.1(@types/node@24.7.0)(jiti@2.4.2)(sass@1.89.1)(yaml@2.8.1)) '@shopify/cli-kit': - specifier: 3.87.0 + specifier: 3.87.1 version: link:../cli-kit '@shopify/plugin-cloudflare': - specifier: 3.87.0 + specifier: 3.87.1 version: link:../plugin-cloudflare '@shopify/plugin-did-you-mean': - specifier: 3.87.0 + specifier: 3.87.1 version: link:../plugin-did-you-mean '@shopify/theme': - specifier: 3.87.0 + specifier: 3.87.1 version: link:../theme '@types/global-agent': specifier: 3.0.0 @@ -560,10 +560,10 @@ importers: version: 0.25.12 devDependencies: '@shopify/app': - specifier: 3.87.0 + specifier: 3.87.1 version: link:../app '@shopify/cli-kit': - specifier: 3.87.0 + specifier: 3.87.1 version: link:../cli-kit '@vitest/coverage-istanbul': specifier: ^3.1.4 @@ -663,7 +663,7 @@ importers: specifier: 4.5.3 version: 4.5.3 '@shopify/cli-kit': - specifier: 3.87.0 + specifier: 3.87.1 version: link:../cli-kit devDependencies: '@vitest/coverage-istanbul': @@ -676,7 +676,7 @@ importers: specifier: 4.5.3 version: 4.5.3 '@shopify/cli-kit': - specifier: 3.87.0 + specifier: 3.87.1 version: link:../cli-kit n-gram: specifier: 2.0.2 @@ -692,7 +692,7 @@ importers: specifier: 4.5.3 version: 4.5.3 '@shopify/cli-kit': - specifier: 3.87.0 + specifier: 3.87.1 version: link:../cli-kit '@shopify/theme-check-node': specifier: 3.23.0 From 36357c2069098f7d5078fdabf4bc5b6d390dee0a Mon Sep 17 00:00:00 2001 From: kairosci Date: Sat, 15 Nov 2025 18:53:27 +0100 Subject: [PATCH 2/2] Fix: Respect .gitignore when discovering web and extension configurations --- .../app/src/cli/models/app/loader.test.ts | 77 +++++++++++++++++++ packages/app/src/cli/models/app/loader.ts | 26 ++++++- 2 files changed, 101 insertions(+), 2 deletions(-) diff --git a/packages/app/src/cli/models/app/loader.test.ts b/packages/app/src/cli/models/app/loader.test.ts index 273acacc2cb..c7a45c47fcd 100644 --- a/packages/app/src/cli/models/app/loader.test.ts +++ b/packages/app/src/cli/models/app/loader.test.ts @@ -753,6 +753,45 @@ redirect_urls = [ "https://example.com/api/auth" ] expect(app.webs.length).toBe(0) }) + test('ignores web blocks in gitignored directories', async () => { + // Given + const {webDirectory} = await writeConfig(appConfiguration) + + // Create a gitignored directory with a web config + const ignoredDirectory = joinPath(tmpDir, 'ignored-worktree') + await mkdir(ignoredDirectory) + await writeWebConfiguration({webDirectory: ignoredDirectory, role: 'backend'}) + + // Create .gitignore file + const gitignoreContent = 'ignored-worktree/\n' + await writeFile(joinPath(tmpDir, '.gitignore'), gitignoreContent) + + // When + const app = await loadTestingApp() + + // Then + // Should only load the web from the non-ignored directory + expect(app.webs.length).toBe(1) + expect(app.webs[0]!.directory).not.toContain('ignored-worktree') + }) + + test('loads all web blocks when no .gitignore file exists', async () => { + // Given + const {webDirectory} = await writeConfig(appConfiguration) + + // Create another directory with a web config (but no .gitignore file) + const anotherDirectory = joinPath(tmpDir, 'another-web') + await mkdir(anotherDirectory) + await writeWebConfiguration({webDirectory: anotherDirectory, role: 'frontend'}) + + // When + const app = await loadTestingApp() + + // Then + // Should load both web blocks since there's no .gitignore + expect(app.webs.length).toBe(2) + }) + test('loads the app when it has a extension with a valid configuration', async () => { // Given await writeConfig(appConfiguration) @@ -834,6 +873,44 @@ redirect_urls = [ "https://example.com/api/auth" ] expect(app.allExtensions[0]!.localIdentifier).toBe('custom-extension') }) + test('ignores extensions in gitignored directories', async () => { + // Given + await writeConfig(appConfiguration) + + // Create a non-ignored extension + const blockConfiguration = ` + name = "my_extension" + type = "checkout_post_purchase" + ` + await writeBlockConfig({ + blockConfiguration, + name: 'my-extension', + }) + await writeFile(joinPath(blockPath('my-extension'), 'index.js'), '') + + // Create a gitignored directory with an extension + const ignoredExtensionDir = joinPath(tmpDir, 'extensions', 'ignored-extension') + await mkdir(ignoredExtensionDir) + const ignoredBlockConfiguration = ` + name = "ignored_extension" + type = "checkout_post_purchase" + ` + await writeFile(joinPath(ignoredExtensionDir, 'my-ignored-extension.extension.toml'), ignoredBlockConfiguration) + await writeFile(joinPath(ignoredExtensionDir, 'index.js'), '') + + // Create .gitignore file + const gitignoreContent = 'extensions/ignored-extension/\n' + await writeFile(joinPath(tmpDir, '.gitignore'), gitignoreContent) + + // When + const app = await loadTestingApp() + + // Then + // Should only load the non-ignored extension + expect(app.allExtensions.length).toBe(1) + expect(app.allExtensions[0]!.configuration.name).toBe('my_extension') + }) + test('loads the app from a extension directory when it has a extension with a valid configuration', async () => { // Given await writeConfig(appConfiguration) diff --git a/packages/app/src/cli/models/app/loader.ts b/packages/app/src/cli/models/app/loader.ts index 56672c9b25e..76da2eb184d 100644 --- a/packages/app/src/cli/models/app/loader.ts +++ b/packages/app/src/cli/models/app/loader.ts @@ -400,7 +400,10 @@ class AppLoader this.loadWeb(path))) this.validateWebs(webs) @@ -559,7 +562,10 @@ class AppLoader { const directory = dirname(configurationPath) @@ -999,6 +1005,22 @@ async function checkIfGitTracked(appDirectory: string, configurationPath: string return isTracked } +/** + * Filters an array of paths to exclude those that match patterns in .gitignore + */ +async function filterIgnoredPaths(appDirectory: string, paths: string[]): Promise { + const gitIgnorePath = joinPath(appDirectory, '.gitignore') + if (!fileExistsSync(gitIgnorePath)) return paths + + const gitIgnoreContent = await readFile(gitIgnorePath) + const ignored = ignore.default().add(gitIgnoreContent) + + return paths.filter((path) => { + const relative = relativePath(appDirectory, path) + return !ignored.ignores(relative) + }) +} + async function getConfigurationPath(appDirectory: string, configName: string | undefined) { const configurationFileName = getAppConfigurationFileName(configName) const configurationPath = joinPath(appDirectory, configurationFileName)