From 27d764461edb50b723ffec8a89ba069d7ae9bd32 Mon Sep 17 00:00:00 2001 From: dominikg Date: Thu, 14 Jul 2022 01:19:16 +0200 Subject: [PATCH 1/6] fix: move create-svelte test working dir out of pnpm workspae --- .gitignore | 1 + packages/create-svelte/test/check.js | 18 +++++++++++++----- pnpm-workspace.yaml | 2 +- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/.gitignore b/.gitignore index 85901d97cbd3..ead94f04da8d 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,4 @@ yarn.lock .netlify .turbo .vercel +.test-tmp diff --git a/packages/create-svelte/test/check.js b/packages/create-svelte/test/check.js index 313dbcf0485f..7149533d6fa4 100644 --- a/packages/create-svelte/test/check.js +++ b/packages/create-svelte/test/check.js @@ -1,11 +1,13 @@ import fs from 'fs'; import { execSync } from 'child_process'; +import path from 'path'; import { test } from 'uvu'; import { create } from '../index.js'; -const dir = '.test-tmp'; +// use a directory outside of packages to ensure it isn't added to the pnpm workspace +const dir = '../../.test-tmp/create-svelte/'; -test.after(() => { +test.before(() => { fs.rmSync(dir, { recursive: true, force: true }); }); @@ -16,15 +18,21 @@ for (const template of fs.readdirSync('templates')) { fs.rmSync(cwd, { recursive: true, force: true }); create(cwd, { - name: 'test', + name: `create-svelte-test-${template}-${types}`, template, types, prettier: false, eslint: false, playwright: false }); - - execSync('pnpm i --no-frozen-lockfile && pnpm check', { cwd, stdio: 'inherit' }); + const pkg = JSON.parse(fs.readFileSync(path.join(cwd, 'package.json'), 'utf-8')); + pkg.devDependencies['@sveltejs/kit'] = 'file:../../../packages/kit'; + if (pkg.devDependencies['@sveltejs/adapter-auto']) { + pkg.devDependencies['@sveltejs/adapter-auto'] = 'file:../../../packages/kit'; + } + fs.writeFileSync(path.join(cwd, 'package.json'), JSON.stringify(pkg, null, '\t')); + // explicitly only install in the dir under test to avoid running a pnpm workspace command + execSync('pnpm install .', { cwd, stdio: 'inherit' }); }); } } diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 02e4f60bd011..fd8175da4c69 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -5,4 +5,4 @@ packages: - 'packages/kit/test/apps/*' - 'packages/kit/test/prerendering/*' - 'packages/create-svelte/templates/*' - - 'packages/create-svelte/.test-tmp/*' + - '!.test-tmp/**' From 145645dd2f03f068633c59ae6f8c32e39acc463a Mon Sep 17 00:00:00 2001 From: dominikg Date: Thu, 14 Jul 2022 01:22:21 +0200 Subject: [PATCH 2/6] fix: copy-paste error, adapter-auto override --- packages/create-svelte/test/check.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/create-svelte/test/check.js b/packages/create-svelte/test/check.js index 7149533d6fa4..27fd91872722 100644 --- a/packages/create-svelte/test/check.js +++ b/packages/create-svelte/test/check.js @@ -28,7 +28,7 @@ for (const template of fs.readdirSync('templates')) { const pkg = JSON.parse(fs.readFileSync(path.join(cwd, 'package.json'), 'utf-8')); pkg.devDependencies['@sveltejs/kit'] = 'file:../../../packages/kit'; if (pkg.devDependencies['@sveltejs/adapter-auto']) { - pkg.devDependencies['@sveltejs/adapter-auto'] = 'file:../../../packages/kit'; + pkg.devDependencies['@sveltejs/adapter-auto'] = 'file:../../../packages/adapter-auto'; } fs.writeFileSync(path.join(cwd, 'package.json'), JSON.stringify(pkg, null, '\t')); // explicitly only install in the dir under test to avoid running a pnpm workspace command From a9485c6d4db1b083376c670dba49c2b111c9486f Mon Sep 17 00:00:00 2001 From: dominikg Date: Thu, 14 Jul 2022 01:28:02 +0200 Subject: [PATCH 3/6] fix: readd check command --- packages/create-svelte/test/check.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/create-svelte/test/check.js b/packages/create-svelte/test/check.js index 27fd91872722..593692e3c918 100644 --- a/packages/create-svelte/test/check.js +++ b/packages/create-svelte/test/check.js @@ -33,6 +33,9 @@ for (const template of fs.readdirSync('templates')) { fs.writeFileSync(path.join(cwd, 'package.json'), JSON.stringify(pkg, null, '\t')); // explicitly only install in the dir under test to avoid running a pnpm workspace command execSync('pnpm install .', { cwd, stdio: 'inherit' }); + + // run check command separately + execSync('pnpm check', { cwd, stdio: 'inherit' }); }); } } From ef2e1e34135aad031b47ccdba6bf4e516f6b620d Mon Sep 17 00:00:00 2001 From: dominikg Date: Thu, 14 Jul 2022 15:09:41 +0200 Subject: [PATCH 4/6] fix: ensure that create-svelte tests generate test apps outside our main pnpm workspace --- packages/create-svelte/test/check.js | 43 +++++++++++++++++++++------- 1 file changed, 32 insertions(+), 11 deletions(-) diff --git a/packages/create-svelte/test/check.js b/packages/create-svelte/test/check.js index 593692e3c918..23311704a531 100644 --- a/packages/create-svelte/test/check.js +++ b/packages/create-svelte/test/check.js @@ -3,18 +3,34 @@ import { execSync } from 'child_process'; import path from 'path'; import { test } from 'uvu'; import { create } from '../index.js'; - +import { fileURLToPath } from 'url'; // use a directory outside of packages to ensure it isn't added to the pnpm workspace -const dir = '../../.test-tmp/create-svelte/'; - +const test_workspace_dir = fileURLToPath(new URL('../../../.test-tmp/create-svelte/',import.meta.url)); +const overrides = {}; +['kit','adapter-auto','adapter-cloudflare','adapter-netlify','adapter-vercel'].forEach(pkg => { + overrides[`@sveltejs/${pkg}`] = `${path.resolve(test_workspace_dir,'..','..','packages',pkg)}`;//'workspace:*'; +}); test.before(() => { - fs.rmSync(dir, { recursive: true, force: true }); + try { + // prepare test pnpm workspace + fs.rmSync(test_workspace_dir, { recursive: true, force: true }); + fs.mkdirSync(test_workspace_dir,{ recursive: true }); + const workspace = {name:'svelte-check-test-fake-pnpm-workspace', private:true,version:'0.0.0', pnpm:{overrides},devDependencies:overrides}; + fs.writeFileSync(path.join(test_workspace_dir,'package.json'),JSON.stringify(workspace,null,'\t')); + fs.writeFileSync(path.join(test_workspace_dir,'pnpm-workspace.yaml'), 'packages:\n - ./*\n'); + + // force creation of pnpm-lock.yaml in test workspace + execSync('pnpm install', { dir: test_workspace_dir, stdio: 'inherit' }); + } catch (e) { + console.error('failed to setup create-svelte test workspace',e); + throw e; + } }); for (const template of fs.readdirSync('templates')) { for (const types of ['checkjs', 'typescript']) { test(`${template}: ${types}`, () => { - const cwd = `${dir}/${template}-${types}`; + const cwd = path.join(test_workspace_dir,`${template}-${types}`); fs.rmSync(cwd, { recursive: true, force: true }); create(cwd, { @@ -26,13 +42,18 @@ for (const template of fs.readdirSync('templates')) { playwright: false }); const pkg = JSON.parse(fs.readFileSync(path.join(cwd, 'package.json'), 'utf-8')); - pkg.devDependencies['@sveltejs/kit'] = 'file:../../../packages/kit'; - if (pkg.devDependencies['@sveltejs/adapter-auto']) { - pkg.devDependencies['@sveltejs/adapter-auto'] = 'file:../../../packages/adapter-auto'; - } + Object.entries(overrides).forEach( ([key,value]) => { + if ( pkg.devDependencies?.[key]) { + pkg.devDependencies[key] = value; + } + if ( pkg.dependencies?.[key]) { + pkg.dependencies[key] = value; + } + }); fs.writeFileSync(path.join(cwd, 'package.json'), JSON.stringify(pkg, null, '\t')); - // explicitly only install in the dir under test to avoid running a pnpm workspace command - execSync('pnpm install .', { cwd, stdio: 'inherit' }); + + // this pnpm install works in the test workspace, which redirects to our local packages again + execSync('pnpm install', { cwd, stdio: 'inherit' }); // run check command separately execSync('pnpm check', { cwd, stdio: 'inherit' }); From b779dad0c26266cba0b9147f2c7129884b05dcd9 Mon Sep 17 00:00:00 2001 From: dominikg Date: Thu, 14 Jul 2022 15:25:37 +0200 Subject: [PATCH 5/6] fix format --- packages/create-svelte/test/check.js | 45 ++++++++++++++++++++-------- 1 file changed, 32 insertions(+), 13 deletions(-) diff --git a/packages/create-svelte/test/check.js b/packages/create-svelte/test/check.js index 23311704a531..6b89d8cba9a3 100644 --- a/packages/create-svelte/test/check.js +++ b/packages/create-svelte/test/check.js @@ -5,24 +5,43 @@ import { test } from 'uvu'; import { create } from '../index.js'; import { fileURLToPath } from 'url'; // use a directory outside of packages to ensure it isn't added to the pnpm workspace -const test_workspace_dir = fileURLToPath(new URL('../../../.test-tmp/create-svelte/',import.meta.url)); +const test_workspace_dir = fileURLToPath( + new URL('../../../.test-tmp/create-svelte/', import.meta.url) +); const overrides = {}; -['kit','adapter-auto','adapter-cloudflare','adapter-netlify','adapter-vercel'].forEach(pkg => { - overrides[`@sveltejs/${pkg}`] = `${path.resolve(test_workspace_dir,'..','..','packages',pkg)}`;//'workspace:*'; -}); +['kit', 'adapter-auto', 'adapter-cloudflare', 'adapter-netlify', 'adapter-vercel'].forEach( + (pkg) => { + overrides[`@sveltejs/${pkg}`] = `${path.resolve( + test_workspace_dir, + '..', + '..', + 'packages', + pkg + )}`; //'workspace:*'; + } +); test.before(() => { try { // prepare test pnpm workspace fs.rmSync(test_workspace_dir, { recursive: true, force: true }); - fs.mkdirSync(test_workspace_dir,{ recursive: true }); - const workspace = {name:'svelte-check-test-fake-pnpm-workspace', private:true,version:'0.0.0', pnpm:{overrides},devDependencies:overrides}; - fs.writeFileSync(path.join(test_workspace_dir,'package.json'),JSON.stringify(workspace,null,'\t')); - fs.writeFileSync(path.join(test_workspace_dir,'pnpm-workspace.yaml'), 'packages:\n - ./*\n'); + fs.mkdirSync(test_workspace_dir, { recursive: true }); + const workspace = { + name: 'svelte-check-test-fake-pnpm-workspace', + private: true, + version: '0.0.0', + pnpm: { overrides }, + devDependencies: overrides + }; + fs.writeFileSync( + path.join(test_workspace_dir, 'package.json'), + JSON.stringify(workspace, null, '\t') + ); + fs.writeFileSync(path.join(test_workspace_dir, 'pnpm-workspace.yaml'), 'packages:\n - ./*\n'); // force creation of pnpm-lock.yaml in test workspace execSync('pnpm install', { dir: test_workspace_dir, stdio: 'inherit' }); } catch (e) { - console.error('failed to setup create-svelte test workspace',e); + console.error('failed to setup create-svelte test workspace', e); throw e; } }); @@ -30,7 +49,7 @@ test.before(() => { for (const template of fs.readdirSync('templates')) { for (const types of ['checkjs', 'typescript']) { test(`${template}: ${types}`, () => { - const cwd = path.join(test_workspace_dir,`${template}-${types}`); + const cwd = path.join(test_workspace_dir, `${template}-${types}`); fs.rmSync(cwd, { recursive: true, force: true }); create(cwd, { @@ -42,11 +61,11 @@ for (const template of fs.readdirSync('templates')) { playwright: false }); const pkg = JSON.parse(fs.readFileSync(path.join(cwd, 'package.json'), 'utf-8')); - Object.entries(overrides).forEach( ([key,value]) => { - if ( pkg.devDependencies?.[key]) { + Object.entries(overrides).forEach(([key, value]) => { + if (pkg.devDependencies?.[key]) { pkg.devDependencies[key] = value; } - if ( pkg.dependencies?.[key]) { + if (pkg.dependencies?.[key]) { pkg.dependencies[key] = value; } }); From d22513cf12cb7731f8457c5e4b6f279c67ce79fc Mon Sep 17 00:00:00 2001 From: dominikg Date: Thu, 14 Jul 2022 15:30:36 +0200 Subject: [PATCH 6/6] fix: readd --no-frozen-lockfile to override pnpm default when CI is true --- packages/create-svelte/test/check.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/create-svelte/test/check.js b/packages/create-svelte/test/check.js index 6b89d8cba9a3..f69222bf76ab 100644 --- a/packages/create-svelte/test/check.js +++ b/packages/create-svelte/test/check.js @@ -39,7 +39,7 @@ test.before(() => { fs.writeFileSync(path.join(test_workspace_dir, 'pnpm-workspace.yaml'), 'packages:\n - ./*\n'); // force creation of pnpm-lock.yaml in test workspace - execSync('pnpm install', { dir: test_workspace_dir, stdio: 'inherit' }); + execSync('pnpm install --no-frozen-lockfile', { dir: test_workspace_dir, stdio: 'inherit' }); } catch (e) { console.error('failed to setup create-svelte test workspace', e); throw e; @@ -72,7 +72,7 @@ for (const template of fs.readdirSync('templates')) { fs.writeFileSync(path.join(cwd, 'package.json'), JSON.stringify(pkg, null, '\t')); // this pnpm install works in the test workspace, which redirects to our local packages again - execSync('pnpm install', { cwd, stdio: 'inherit' }); + execSync('pnpm install --no-frozen-lockfile', { cwd, stdio: 'inherit' }); // run check command separately execSync('pnpm check', { cwd, stdio: 'inherit' });