From f656a97cf42459ce676455ec1bf1355193ec43f0 Mon Sep 17 00:00:00 2001 From: Thomas Knickman Date: Mon, 24 Apr 2023 13:49:46 -0400 Subject: [PATCH] fix(turbo-utils): support old workspace format (#4682) ### Description Support old workspace format (workspaces.packages) in our find config util used by codemod and the eslint plugin Fixes https://github.com/vercel/turbo/issues/4469 and https://github.com/vercel/turbo/issues/4085 --- .../old-workspace-config/apps/docs/index.js | 6 ++++ .../apps/docs/package.json | 4 +++ .../old-workspace-config/apps/web/index.js | 6 ++++ .../apps/web/package.json | 4 +++ .../common/old-workspace-config/package.json | 16 +++++++++ .../old-workspace-config/packages/ui/index.js | 6 ++++ .../packages/ui/package.json | 4 +++ .../packages/utils/index.js | 6 ++++ .../packages/utils/package.json | 4 +++ .../common/old-workspace-config/turbo.json | 14 ++++++++ .../__tests__/getTurboConfigs.test.ts | 33 +++++++++++++++++-- packages/turbo-utils/src/getTurboConfigs.ts | 16 +++++++-- 12 files changed, 115 insertions(+), 4 deletions(-) create mode 100644 packages/turbo-utils/__fixtures__/common/old-workspace-config/apps/docs/index.js create mode 100644 packages/turbo-utils/__fixtures__/common/old-workspace-config/apps/docs/package.json create mode 100644 packages/turbo-utils/__fixtures__/common/old-workspace-config/apps/web/index.js create mode 100644 packages/turbo-utils/__fixtures__/common/old-workspace-config/apps/web/package.json create mode 100644 packages/turbo-utils/__fixtures__/common/old-workspace-config/package.json create mode 100644 packages/turbo-utils/__fixtures__/common/old-workspace-config/packages/ui/index.js create mode 100644 packages/turbo-utils/__fixtures__/common/old-workspace-config/packages/ui/package.json create mode 100644 packages/turbo-utils/__fixtures__/common/old-workspace-config/packages/utils/index.js create mode 100644 packages/turbo-utils/__fixtures__/common/old-workspace-config/packages/utils/package.json create mode 100644 packages/turbo-utils/__fixtures__/common/old-workspace-config/turbo.json diff --git a/packages/turbo-utils/__fixtures__/common/old-workspace-config/apps/docs/index.js b/packages/turbo-utils/__fixtures__/common/old-workspace-config/apps/docs/index.js new file mode 100644 index 0000000000000..503011458d212 --- /dev/null +++ b/packages/turbo-utils/__fixtures__/common/old-workspace-config/apps/docs/index.js @@ -0,0 +1,6 @@ +export default function docs() { + if (!process.env.ENV_1) { + return "bar"; + } + return "foo"; +} diff --git a/packages/turbo-utils/__fixtures__/common/old-workspace-config/apps/docs/package.json b/packages/turbo-utils/__fixtures__/common/old-workspace-config/apps/docs/package.json new file mode 100644 index 0000000000000..82f9a44736f00 --- /dev/null +++ b/packages/turbo-utils/__fixtures__/common/old-workspace-config/apps/docs/package.json @@ -0,0 +1,4 @@ +{ + "name": "docs", + "version": "1.0.0" +} diff --git a/packages/turbo-utils/__fixtures__/common/old-workspace-config/apps/web/index.js b/packages/turbo-utils/__fixtures__/common/old-workspace-config/apps/web/index.js new file mode 100644 index 0000000000000..bfd3ab817a0de --- /dev/null +++ b/packages/turbo-utils/__fixtures__/common/old-workspace-config/apps/web/index.js @@ -0,0 +1,6 @@ +export default function web() { + if (!process.env.ENV_2) { + return "bar"; + } + return "foo"; +} diff --git a/packages/turbo-utils/__fixtures__/common/old-workspace-config/apps/web/package.json b/packages/turbo-utils/__fixtures__/common/old-workspace-config/apps/web/package.json new file mode 100644 index 0000000000000..d8a83edbd32a1 --- /dev/null +++ b/packages/turbo-utils/__fixtures__/common/old-workspace-config/apps/web/package.json @@ -0,0 +1,4 @@ +{ + "name": "web", + "version": "1.0.0" +} diff --git a/packages/turbo-utils/__fixtures__/common/old-workspace-config/package.json b/packages/turbo-utils/__fixtures__/common/old-workspace-config/package.json new file mode 100644 index 0000000000000..20fc040b0763e --- /dev/null +++ b/packages/turbo-utils/__fixtures__/common/old-workspace-config/package.json @@ -0,0 +1,16 @@ +{ + "private": true, + "workspaces": { + "packages": [ + "apps/*", + "packages/*" + ] + }, + "scripts": { + "build": "turbo run build" + }, + "devDependencies": { + "turbo": "latest" + }, + "packageManager": "yarn@1.22.19" +} diff --git a/packages/turbo-utils/__fixtures__/common/old-workspace-config/packages/ui/index.js b/packages/turbo-utils/__fixtures__/common/old-workspace-config/packages/ui/index.js new file mode 100644 index 0000000000000..dee5e80cd6992 --- /dev/null +++ b/packages/turbo-utils/__fixtures__/common/old-workspace-config/packages/ui/index.js @@ -0,0 +1,6 @@ +export default function foo() { + if (!process.env.IS_SERVER) { + return "bar"; + } + return "foo"; +} diff --git a/packages/turbo-utils/__fixtures__/common/old-workspace-config/packages/ui/package.json b/packages/turbo-utils/__fixtures__/common/old-workspace-config/packages/ui/package.json new file mode 100644 index 0000000000000..7cb7cf17345dc --- /dev/null +++ b/packages/turbo-utils/__fixtures__/common/old-workspace-config/packages/ui/package.json @@ -0,0 +1,4 @@ +{ + "name": "ui", + "version": "1.0.0" +} diff --git a/packages/turbo-utils/__fixtures__/common/old-workspace-config/packages/utils/index.js b/packages/turbo-utils/__fixtures__/common/old-workspace-config/packages/utils/index.js new file mode 100644 index 0000000000000..dee5e80cd6992 --- /dev/null +++ b/packages/turbo-utils/__fixtures__/common/old-workspace-config/packages/utils/index.js @@ -0,0 +1,6 @@ +export default function foo() { + if (!process.env.IS_SERVER) { + return "bar"; + } + return "foo"; +} diff --git a/packages/turbo-utils/__fixtures__/common/old-workspace-config/packages/utils/package.json b/packages/turbo-utils/__fixtures__/common/old-workspace-config/packages/utils/package.json new file mode 100644 index 0000000000000..39308ba79008b --- /dev/null +++ b/packages/turbo-utils/__fixtures__/common/old-workspace-config/packages/utils/package.json @@ -0,0 +1,4 @@ +{ + "name": "utils", + "version": "1.0.0" +} diff --git a/packages/turbo-utils/__fixtures__/common/old-workspace-config/turbo.json b/packages/turbo-utils/__fixtures__/common/old-workspace-config/turbo.json new file mode 100644 index 0000000000000..d44dedb04af78 --- /dev/null +++ b/packages/turbo-utils/__fixtures__/common/old-workspace-config/turbo.json @@ -0,0 +1,14 @@ +{ + "$schema": "https://turbo.build/schema.json", + "globalDependencies": ["**/.env.*local"], + "pipeline": { + "build": { + "outputs": [".next/**", "!.next/cache/**"] + }, + "lint": {}, + "dev": { + "cache": false, + "persistent": true + } + } +} diff --git a/packages/turbo-utils/__tests__/getTurboConfigs.test.ts b/packages/turbo-utils/__tests__/getTurboConfigs.test.ts index e61e630abb100..a22324d32e90f 100644 --- a/packages/turbo-utils/__tests__/getTurboConfigs.test.ts +++ b/packages/turbo-utils/__tests__/getTurboConfigs.test.ts @@ -8,7 +8,7 @@ describe("getTurboConfigs", () => { test: "common", }); - it("single-package", async () => { + it("supports single-package repos", async () => { const { root } = useFixture({ fixture: `single-package` }); const configs = getTurboConfigs(root); expect(configs).toHaveLength(1); @@ -54,7 +54,7 @@ describe("getTurboConfigs", () => { `); }); - it("workspace-configs", async () => { + it("supports repos using workspace configs", async () => { const { root } = useFixture({ fixture: `workspace-configs` }); const configs = getTurboConfigs(root); @@ -109,4 +109,33 @@ describe("getTurboConfigs", () => { } `); }); + + it("supports repos with old workspace configuration format", async () => { + const { root } = useFixture({ fixture: `old-workspace-config` }); + const configs = getTurboConfigs(root); + + expect(configs).toHaveLength(1); + expect(configs[0].isRootConfig).toBe(true); + expect(configs[0].config).toMatchInlineSnapshot(` + Object { + "$schema": "https://turbo.build/schema.json", + "globalDependencies": Array [ + "**/.env.*local", + ], + "pipeline": Object { + "build": Object { + "outputs": Array [ + ".next/**", + "!.next/cache/**", + ], + }, + "dev": Object { + "cache": false, + "persistent": true, + }, + "lint": Object {}, + }, + } + `); + }); }); diff --git a/packages/turbo-utils/src/getTurboConfigs.ts b/packages/turbo-utils/src/getTurboConfigs.ts index df15a566c325f..278337f6b14c5 100644 --- a/packages/turbo-utils/src/getTurboConfigs.ts +++ b/packages/turbo-utils/src/getTurboConfigs.ts @@ -15,6 +15,11 @@ export type TurboConfigs = Array<{ isRootConfig: boolean; }>; +interface PackageJson { + turbo?: Schema; + workspaces?: { packages: Array } | Array; +} + interface Options { cache?: boolean; } @@ -34,8 +39,15 @@ function getWorkspaceGlobs(root: string): Array { } else { const packageJson = JSON.parse( fs.readFileSync(path.join(root, "package.json"), "utf8") - ); - return packageJson?.workspaces || []; + ) as PackageJson; + if (packageJson?.workspaces) { + // support nested packages workspace format + if ("packages" in packageJson?.workspaces) { + return packageJson.workspaces.packages || []; + } + return packageJson?.workspaces || []; + } + return []; } } catch (e) { return [];