From fe570876087336422224b90012f20a206c9ad470 Mon Sep 17 00:00:00 2001 From: Peter Smith Date: Tue, 21 May 2024 13:37:55 +0100 Subject: [PATCH 01/48] chore: added basic integration test --- package.json | 1 + packages/create-fuels/test/integration.test.ts | 17 +++++++++++++++++ scripts/tests-find.sh | 4 +++- 3 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 packages/create-fuels/test/integration.test.ts diff --git a/package.json b/package.json index 0f38c5cd44..b854e340bb 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "test:browser": "vitest --run --coverage --config vitest.browser.config.mts $(scripts/tests-find.sh --browser)", "test:browser:filter": "vitest --run --coverage --config vitest.browser.config.mts", "test:e2e": "vitest --run --config vitest.node.config.mts $(scripts/tests-find.sh --e2e)", + "test:integration": "vitest --run --config vitest.node.config.mts $(scripts/tests-find.sh --integration)", "lint": "run-s lint:check prettier:check", "lint:check": "eslint . --ext .ts --max-warnings 0", "lint:fix": "pnpm lint:check --fix", diff --git a/packages/create-fuels/test/integration.test.ts b/packages/create-fuels/test/integration.test.ts new file mode 100644 index 0000000000..1016dc9ba5 --- /dev/null +++ b/packages/create-fuels/test/integration.test.ts @@ -0,0 +1,17 @@ +import { execSync } from "child_process"; + +const fuelsVersion = process.env.PUBLISHED_NPM_VERSION; +const projectName = 'test-project'; + +/** + * @group integration + */ +describe('CLI', () => { + beforeAll(() => { + execSync(`pnpm create fuels@${fuelsVersion} ${projectName} --pnpm --contract --predicate --script`, { stdio: 'inherit' }) + }) + + it('should have all the files', () => { + console.log(process.env.PUBLISHED_NPM_VERSION) + }); +}) \ No newline at end of file diff --git a/scripts/tests-find.sh b/scripts/tests-find.sh index 264d459b3c..4c7cf11f06 100755 --- a/scripts/tests-find.sh +++ b/scripts/tests-find.sh @@ -10,6 +10,8 @@ elif [[ $* == *--node* ]]; then grep -lE "@group\s+node" $FILES elif [[ $* == *--browser* ]]; then grep -lE "@group\s+browser" $FILES +elif [[ $* == *--integration* ]]; then + grep -lE "@group\s+integration" $FILES elif [[ $* == *--e2e* ]]; then grep -lE "@group\s+e2e" $FILES -fi \ No newline at end of file +fi From dca1f09d9b34aa8bfaffeb797cb901c8489601fc Mon Sep 17 00:00:00 2001 From: Peter Smith Date: Tue, 21 May 2024 13:43:25 +0100 Subject: [PATCH 02/48] chore: extract useful functions from test --- packages/create-fuels/test/cli.test.ts | 35 +----------------- .../create-fuels/test/utils/templateFiles.ts | 36 +++++++++++++++++++ 2 files changed, 37 insertions(+), 34 deletions(-) create mode 100644 packages/create-fuels/test/utils/templateFiles.ts diff --git a/packages/create-fuels/test/cli.test.ts b/packages/create-fuels/test/cli.test.ts index 39ba46471d..81c056caa7 100644 --- a/packages/create-fuels/test/cli.test.ts +++ b/packages/create-fuels/test/cli.test.ts @@ -1,5 +1,4 @@ import { mkdirSync } from 'fs'; -import { glob } from 'glob'; import type { ProgramsToInclude } from '../src/cli'; import { runScaffoldCli, setupProgram } from '../src/cli'; @@ -7,14 +6,7 @@ import { runScaffoldCli, setupProgram } from '../src/cli'; import type { ProjectPaths } from './utils/bootstrapProject'; import { bootstrapProject, cleanupFilesystem, resetFilesystem } from './utils/bootstrapProject'; import { mockLogger } from './utils/mockLogger'; - -const getAllFiles = async (pathToDir: string) => { - const files = await glob(`${pathToDir}/**/*`, { - ignore: ['**/node_modules/**', '**/.next/**', '**/sway-api/**'], - }); - const filesWithoutPrefix = files.map((file) => file.replace(pathToDir, '')); - return filesWithoutPrefix; -}; +import { filterOriginalTemplateFiles, getAllFiles } from './utils/templateFiles'; const possibleProgramsToInclude: ProgramsToInclude[] = [ { contract: true, predicate: false, script: false }, @@ -46,31 +38,6 @@ const generateArgs = (programsToInclude: ProgramsToInclude, projectName?: string return args; }; -const filterOriginalTemplateFiles = (files: string[], programsToInclude: ProgramsToInclude) => { - let newFiles = [...files]; - - newFiles = newFiles.filter((file) => { - if (file.includes('CHANGELOG')) { - return false; - } - if (!programsToInclude.contract && file.includes('contract')) { - return false; - } - if (!programsToInclude.predicate && file.includes('predicate')) { - return false; - } - if (!programsToInclude.script && file.includes('script')) { - return false; - } - if (['/gitignore', '/env'].includes(file)) { - return false; - } - return true; - }); - - return newFiles; -}; - /** * @group node */ diff --git a/packages/create-fuels/test/utils/templateFiles.ts b/packages/create-fuels/test/utils/templateFiles.ts new file mode 100644 index 0000000000..bae905608b --- /dev/null +++ b/packages/create-fuels/test/utils/templateFiles.ts @@ -0,0 +1,36 @@ +import { glob } from "glob"; + +import type { ProgramsToInclude } from "../../src/cli"; + +export const getAllFiles = async (pathToDir: string) => { + const files = await glob(`${pathToDir}/**/*`, { + ignore: ['**/node_modules/**', '**/.next/**', '**/sway-api/**'], + }); + const filesWithoutPrefix = files.map((file) => file.replace(pathToDir, '')); + return filesWithoutPrefix; +}; + +export const filterOriginalTemplateFiles = (files: string[], programsToInclude: ProgramsToInclude) => { + let newFiles = [...files]; + + newFiles = newFiles.filter((file) => { + if (file.includes('CHANGELOG')) { + return false; + } + if (!programsToInclude.contract && file.includes('contract')) { + return false; + } + if (!programsToInclude.predicate && file.includes('predicate')) { + return false; + } + if (!programsToInclude.script && file.includes('script')) { + return false; + } + if (['/gitignore', '/env'].includes(file)) { + return false; + } + return true; + }); + + return newFiles; +}; \ No newline at end of file From 82aa2147b5862fd146e6bcc657349de444758366 Mon Sep 17 00:00:00 2001 From: Peter Smith Date: Tue, 21 May 2024 14:20:49 +0100 Subject: [PATCH 03/48] chore: moved copy logic out of bootstrapProject --- packages/create-fuels/test/cli.test.ts | 3 ++- packages/create-fuels/test/utils/bootstrapProject.ts | 11 ++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/packages/create-fuels/test/cli.test.ts b/packages/create-fuels/test/cli.test.ts index 81c056caa7..9f24725e39 100644 --- a/packages/create-fuels/test/cli.test.ts +++ b/packages/create-fuels/test/cli.test.ts @@ -4,7 +4,7 @@ import type { ProgramsToInclude } from '../src/cli'; import { runScaffoldCli, setupProgram } from '../src/cli'; import type { ProjectPaths } from './utils/bootstrapProject'; -import { bootstrapProject, cleanupFilesystem, resetFilesystem } from './utils/bootstrapProject'; +import { bootstrapProject, cleanupFilesystem, copyTemplate, resetFilesystem } from './utils/bootstrapProject'; import { mockLogger } from './utils/mockLogger'; import { filterOriginalTemplateFiles, getAllFiles } from './utils/templateFiles'; @@ -47,6 +47,7 @@ describe('CLI', () => { beforeEach(() => { paths = bootstrapProject(__filename); + copyTemplate(paths.sourceTemplate, paths.template); }); afterEach(() => { diff --git a/packages/create-fuels/test/utils/bootstrapProject.ts b/packages/create-fuels/test/utils/bootstrapProject.ts index ba0828c6b3..d4dbbd30cc 100644 --- a/packages/create-fuels/test/utils/bootstrapProject.ts +++ b/packages/create-fuels/test/utils/bootstrapProject.ts @@ -4,6 +4,7 @@ import { basename, join } from 'path'; export type ProjectPaths = { root: string; template: string; + sourceTemplate: string; }; /** @@ -21,9 +22,6 @@ export const bootstrapProject = ( // Template paths const templateDir = join(templatesDir, templateName); const localTemplateDir = join(testTemplateDir, templateName); - if (!existsSync(localTemplateDir)) { - cpSync(templateDir, localTemplateDir, { recursive: true }); - } // Unique name const testFilename = basename(testFilepath.replace(/\./g, '-')); @@ -35,9 +33,16 @@ export const bootstrapProject = ( return { root, template: localTemplateDir, + sourceTemplate: templateDir, }; }; +export const copyTemplate = (srcDir: string, destDir: string) => { + if (!existsSync(destDir)) { + cpSync(srcDir, destDir, { recursive: true }); + } +} + export const resetFilesystem = (dirPath: string) => { if (existsSync(dirPath)) { rmSync(dirPath, { recursive: true }); From c002294e415fee4c938f0b0a7cffb0de1016d22c Mon Sep 17 00:00:00 2001 From: Peter Smith Date: Tue, 21 May 2024 14:41:08 +0100 Subject: [PATCH 04/48] chore: extracted generateArgs function --- packages/create-fuels/test/cli.test.ts | 21 +------------------ .../create-fuels/test/utils/generateArgs.ts | 21 +++++++++++++++++++ 2 files changed, 22 insertions(+), 20 deletions(-) create mode 100644 packages/create-fuels/test/utils/generateArgs.ts diff --git a/packages/create-fuels/test/cli.test.ts b/packages/create-fuels/test/cli.test.ts index 9f24725e39..bf0996e5aa 100644 --- a/packages/create-fuels/test/cli.test.ts +++ b/packages/create-fuels/test/cli.test.ts @@ -5,6 +5,7 @@ import { runScaffoldCli, setupProgram } from '../src/cli'; import type { ProjectPaths } from './utils/bootstrapProject'; import { bootstrapProject, cleanupFilesystem, copyTemplate, resetFilesystem } from './utils/bootstrapProject'; +import { generateArgs } from './utils/generateArgs'; import { mockLogger } from './utils/mockLogger'; import { filterOriginalTemplateFiles, getAllFiles } from './utils/templateFiles'; @@ -18,26 +19,6 @@ const possibleProgramsToInclude: ProgramsToInclude[] = [ { contract: true, predicate: true, script: true }, ]; -const defaultFlags = ['--pnpm']; - -const generateArgs = (programsToInclude: ProgramsToInclude, projectName?: string) => { - const args = ['', '']; - if (projectName) { - args.push(projectName); - } - if (programsToInclude.contract) { - args.push('-c'); - } - if (programsToInclude.predicate) { - args.push('-p'); - } - if (programsToInclude.script) { - args.push('-s'); - } - args.push(...defaultFlags); - return args; -}; - /** * @group node */ diff --git a/packages/create-fuels/test/utils/generateArgs.ts b/packages/create-fuels/test/utils/generateArgs.ts new file mode 100644 index 0000000000..64fd9abf1d --- /dev/null +++ b/packages/create-fuels/test/utils/generateArgs.ts @@ -0,0 +1,21 @@ +import type { ProgramsToInclude } from "../../src/cli"; + +const defaultFlags = ['--pnpm']; + +export const generateArgs = (programsToInclude: ProgramsToInclude, projectName?: string) => { + const args = ['', '']; + if (projectName) { + args.push(projectName); + } + if (programsToInclude.contract) { + args.push('-c'); + } + if (programsToInclude.predicate) { + args.push('-p'); + } + if (programsToInclude.script) { + args.push('-s'); + } + args.push(...defaultFlags); + return args; +}; From 1545d7eb3a7bd89b87f631b1a222bc159540e5e5 Mon Sep 17 00:00:00 2001 From: Peter Smith Date: Tue, 21 May 2024 14:44:00 +0100 Subject: [PATCH 05/48] chore: separate argv from args (in generate) --- packages/create-fuels/test/cli.test.ts | 8 ++++---- packages/create-fuels/test/utils/generateArgs.ts | 4 +++- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/packages/create-fuels/test/cli.test.ts b/packages/create-fuels/test/cli.test.ts index bf0996e5aa..6b636af6c1 100644 --- a/packages/create-fuels/test/cli.test.ts +++ b/packages/create-fuels/test/cli.test.ts @@ -5,7 +5,7 @@ import { runScaffoldCli, setupProgram } from '../src/cli'; import type { ProjectPaths } from './utils/bootstrapProject'; import { bootstrapProject, cleanupFilesystem, copyTemplate, resetFilesystem } from './utils/bootstrapProject'; -import { generateArgs } from './utils/generateArgs'; +import { generateArgv } from './utils/generateArgs'; import { mockLogger } from './utils/mockLogger'; import { filterOriginalTemplateFiles, getAllFiles } from './utils/templateFiles'; @@ -44,7 +44,7 @@ describe('CLI', () => { test.each(possibleProgramsToInclude)( 'create-fuels extracts the template to the specified directory', async (programsToInclude) => { - const args = generateArgs(programsToInclude, paths.root); + const args = generateArgv(programsToInclude, paths.root); await runScaffoldCli({ program: setupProgram(), @@ -62,7 +62,7 @@ describe('CLI', () => { ); test('create-fuels reports an error if the project directory already exists', async () => { - const args = generateArgs( + const args = generateArgv( { contract: true, predicate: true, @@ -89,7 +89,7 @@ describe('CLI', () => { }); test('create-fuels reports an error if no programs are chosen to be included', async () => { - const args = generateArgs( + const args = generateArgv( { contract: false, predicate: false, diff --git a/packages/create-fuels/test/utils/generateArgs.ts b/packages/create-fuels/test/utils/generateArgs.ts index 64fd9abf1d..9387d15799 100644 --- a/packages/create-fuels/test/utils/generateArgs.ts +++ b/packages/create-fuels/test/utils/generateArgs.ts @@ -3,7 +3,7 @@ import type { ProgramsToInclude } from "../../src/cli"; const defaultFlags = ['--pnpm']; export const generateArgs = (programsToInclude: ProgramsToInclude, projectName?: string) => { - const args = ['', '']; + const args = []; if (projectName) { args.push(projectName); } @@ -19,3 +19,5 @@ export const generateArgs = (programsToInclude: ProgramsToInclude, projectName?: args.push(...defaultFlags); return args; }; + +export const generateArgv = (programsToInclude: ProgramsToInclude, projectName?: string) => ['', '', ...generateArgs(programsToInclude, projectName)]; From 55dc06e6f257a8e73ad6d9571294fba65ffa0727 Mon Sep 17 00:00:00 2001 From: Peter Smith Date: Tue, 21 May 2024 15:34:22 +0100 Subject: [PATCH 06/48] chore: added `@fuel-ts/errors` to `create-fuels` --- packages/create-fuels/package.json | 1 + pnpm-lock.yaml | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/packages/create-fuels/package.json b/packages/create-fuels/package.json index 679b7cb915..a482ce9d00 100644 --- a/packages/create-fuels/package.json +++ b/packages/create-fuels/package.json @@ -26,6 +26,7 @@ "prompts": "^2.4.2" }, "devDependencies": { + "@fuel-ts/errors": "workspace:*", "@fuel-ts/versions": "workspace:*", "@types/prompts": "^2.4.8", "glob": "^10.2.6" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6b5cf8a41d..cc370a47e7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,6 +8,7 @@ overrides: cross-fetch: 4.0.0 importers: + .: devDependencies: '@actions/core': @@ -794,6 +795,9 @@ importers: specifier: ^2.4.2 version: 2.4.2 devDependencies: + '@fuel-ts/errors': + specifier: workspace:* + version: link:../errors '@fuel-ts/versions': specifier: workspace:* version: link:../versions @@ -1185,6 +1189,7 @@ importers: version: 5.2.2 packages: + '@aashutoshrathi/word-wrap@1.2.6': resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} engines: {node: '>=0.10.0'} @@ -12274,6 +12279,7 @@ packages: resolution: {integrity: sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==} snapshots: + '@aashutoshrathi/word-wrap@1.2.6': {} '@actions/core@1.10.1': From 1c6bba4afd805a6e9d0d585d9b96f292b30777cd Mon Sep 17 00:00:00 2001 From: Peter Smith Date: Tue, 21 May 2024 18:33:55 +0100 Subject: [PATCH 07/48] chore: lint --- packages/create-fuels/test/utils/templateFiles.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/create-fuels/test/utils/templateFiles.ts b/packages/create-fuels/test/utils/templateFiles.ts index bae905608b..6a3750384d 100644 --- a/packages/create-fuels/test/utils/templateFiles.ts +++ b/packages/create-fuels/test/utils/templateFiles.ts @@ -33,4 +33,4 @@ export const filterOriginalTemplateFiles = (files: string[], programsToInclude: }); return newFiles; -}; \ No newline at end of file +}; From 2bcb8b1abcebb0c323ff85ccc352bee575dd18eb Mon Sep 17 00:00:00 2001 From: Peter Smith Date: Tue, 21 May 2024 18:34:19 +0100 Subject: [PATCH 08/48] feat: added integration test --- .../create-fuels/test/integration.test.ts | 46 +++++++++++++++++-- 1 file changed, 41 insertions(+), 5 deletions(-) diff --git a/packages/create-fuels/test/integration.test.ts b/packages/create-fuels/test/integration.test.ts index 1016dc9ba5..2e4aa80452 100644 --- a/packages/create-fuels/test/integration.test.ts +++ b/packages/create-fuels/test/integration.test.ts @@ -1,17 +1,53 @@ +import { safeExec } from "@fuel-ts/errors/test-utils"; import { execSync } from "child_process"; +import type { ProjectPaths} from "./utils/bootstrapProject"; +import { bootstrapProject, copyTemplate, resetFilesystem } from "./utils/bootstrapProject"; +import { generateArgs } from "./utils/generateArgs"; +import { filterOriginalTemplateFiles, getAllFiles } from "./utils/templateFiles"; + const fuelsVersion = process.env.PUBLISHED_NPM_VERSION; -const projectName = 'test-project'; +const programsToInclude = { contract: true, predicate: true, script: true }; /** * @group integration */ -describe('CLI', () => { +describe('CLI - Integration', () => { + const paths: ProjectPaths = bootstrapProject(__filename);; + const args = generateArgs(programsToInclude, paths.root).join(' '); + beforeAll(() => { - execSync(`pnpm create fuels@${fuelsVersion} ${projectName} --pnpm --contract --predicate --script`, { stdio: 'inherit' }) + copyTemplate(paths.sourceTemplate, paths.template); }) - it('should have all the files', () => { - console.log(process.env.PUBLISHED_NPM_VERSION) + afterAll(() => { + resetFilesystem(paths.root); + vi.resetAllMocks(); }); + + it('should perform `pnpm create fuels`', async () => { + let expectedTemplateFiles = await getAllFiles(paths.template); + expectedTemplateFiles = filterOriginalTemplateFiles(expectedTemplateFiles, programsToInclude); + + // Perform create fuels + const { error: createFuelsError } = await safeExec( + () => execSync(`pnpm create fuels@${fuelsVersion} ${args}`, { stdio: 'inherit' }) + ); + expect(createFuelsError).toBeUndefined(); + + // Perform install + // const { error: installError } = await safeExec( + // () => execSync(`pnpm install --ignore-workspace`, { cwd: paths.root, stdio: 'inherit' }) + // ) + // expect(installError).toBeUndefined(); + + // Perform `fuels build` + // const { error: buildError } = await safeExec( + // () => execSync(`pnpm fuels build`, { cwd: paths.root, stdio: 'inherit' }) + // ) + // expect(buildError).toBeUndefined(); + + const actualTemplateFiles = await getAllFiles(paths.root); + expect(actualTemplateFiles.sort()).toEqual(expectedTemplateFiles.sort()); + }, { timeout: 60000 }); }) \ No newline at end of file From bcf697963a239474b1976bde672b8ec325d18679 Mon Sep 17 00:00:00 2001 From: Peter Smith Date: Tue, 21 May 2024 19:12:49 +0100 Subject: [PATCH 09/48] chore: filter out the forc build files --- .../create-fuels/test/integration.test.ts | 22 +++---------------- .../create-fuels/test/utils/templateFiles.ts | 3 +++ 2 files changed, 6 insertions(+), 19 deletions(-) diff --git a/packages/create-fuels/test/integration.test.ts b/packages/create-fuels/test/integration.test.ts index 2e4aa80452..09a9fd9bff 100644 --- a/packages/create-fuels/test/integration.test.ts +++ b/packages/create-fuels/test/integration.test.ts @@ -4,7 +4,7 @@ import { execSync } from "child_process"; import type { ProjectPaths} from "./utils/bootstrapProject"; import { bootstrapProject, copyTemplate, resetFilesystem } from "./utils/bootstrapProject"; import { generateArgs } from "./utils/generateArgs"; -import { filterOriginalTemplateFiles, getAllFiles } from "./utils/templateFiles"; +import { filterForcBuildFiles, filterOriginalTemplateFiles, getAllFiles } from "./utils/templateFiles"; const fuelsVersion = process.env.PUBLISHED_NPM_VERSION; const programsToInclude = { contract: true, predicate: true, script: true }; @@ -16,18 +16,14 @@ describe('CLI - Integration', () => { const paths: ProjectPaths = bootstrapProject(__filename);; const args = generateArgs(programsToInclude, paths.root).join(' '); - beforeAll(() => { - copyTemplate(paths.sourceTemplate, paths.template); - }) - afterAll(() => { resetFilesystem(paths.root); vi.resetAllMocks(); }); it('should perform `pnpm create fuels`', async () => { - let expectedTemplateFiles = await getAllFiles(paths.template); - expectedTemplateFiles = filterOriginalTemplateFiles(expectedTemplateFiles, programsToInclude); + let expectedTemplateFiles = await getAllFiles(paths.sourceTemplate); + expectedTemplateFiles = filterOriginalTemplateFiles(expectedTemplateFiles, programsToInclude).filter(filterForcBuildFiles); // Perform create fuels const { error: createFuelsError } = await safeExec( @@ -35,18 +31,6 @@ describe('CLI - Integration', () => { ); expect(createFuelsError).toBeUndefined(); - // Perform install - // const { error: installError } = await safeExec( - // () => execSync(`pnpm install --ignore-workspace`, { cwd: paths.root, stdio: 'inherit' }) - // ) - // expect(installError).toBeUndefined(); - - // Perform `fuels build` - // const { error: buildError } = await safeExec( - // () => execSync(`pnpm fuels build`, { cwd: paths.root, stdio: 'inherit' }) - // ) - // expect(buildError).toBeUndefined(); - const actualTemplateFiles = await getAllFiles(paths.root); expect(actualTemplateFiles.sort()).toEqual(expectedTemplateFiles.sort()); }, { timeout: 60000 }); diff --git a/packages/create-fuels/test/utils/templateFiles.ts b/packages/create-fuels/test/utils/templateFiles.ts index 6a3750384d..75be9da2ae 100644 --- a/packages/create-fuels/test/utils/templateFiles.ts +++ b/packages/create-fuels/test/utils/templateFiles.ts @@ -34,3 +34,6 @@ export const filterOriginalTemplateFiles = (files: string[], programsToInclude: return newFiles; }; + +export const filterForcBuildFiles = (file: string) => + !file.includes('contract/out') && !file.includes('script/out') && !file.includes('predicate/out'); From bb250c1929ad221802b09ace0b685ead38ff4bf4 Mon Sep 17 00:00:00 2001 From: Peter Smith Date: Tue, 21 May 2024 19:14:01 +0100 Subject: [PATCH 10/48] Removed resetMock --- packages/create-fuels/test/integration.test.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/create-fuels/test/integration.test.ts b/packages/create-fuels/test/integration.test.ts index 09a9fd9bff..4332e21b0e 100644 --- a/packages/create-fuels/test/integration.test.ts +++ b/packages/create-fuels/test/integration.test.ts @@ -16,9 +16,8 @@ describe('CLI - Integration', () => { const paths: ProjectPaths = bootstrapProject(__filename);; const args = generateArgs(programsToInclude, paths.root).join(' '); - afterAll(() => { + afterEach(() => { resetFilesystem(paths.root); - vi.resetAllMocks(); }); it('should perform `pnpm create fuels`', async () => { From f6e760bc33498e4c09a18754622fff1b2c2629b7 Mon Sep 17 00:00:00 2001 From: Peter Smith Date: Tue, 21 May 2024 19:15:27 +0100 Subject: [PATCH 11/48] chore: lint --- packages/create-fuels/test/cli.test.ts | 7 ++- .../create-fuels/test/integration.test.ts | 49 ++++++++++++------- .../test/utils/bootstrapProject.ts | 2 +- .../create-fuels/test/utils/generateArgs.ts | 8 ++- .../create-fuels/test/utils/templateFiles.ts | 9 ++-- pnpm-lock.yaml | 3 -- 6 files changed, 49 insertions(+), 29 deletions(-) diff --git a/packages/create-fuels/test/cli.test.ts b/packages/create-fuels/test/cli.test.ts index 6b636af6c1..51d185dd27 100644 --- a/packages/create-fuels/test/cli.test.ts +++ b/packages/create-fuels/test/cli.test.ts @@ -4,7 +4,12 @@ import type { ProgramsToInclude } from '../src/cli'; import { runScaffoldCli, setupProgram } from '../src/cli'; import type { ProjectPaths } from './utils/bootstrapProject'; -import { bootstrapProject, cleanupFilesystem, copyTemplate, resetFilesystem } from './utils/bootstrapProject'; +import { + bootstrapProject, + cleanupFilesystem, + copyTemplate, + resetFilesystem, +} from './utils/bootstrapProject'; import { generateArgv } from './utils/generateArgs'; import { mockLogger } from './utils/mockLogger'; import { filterOriginalTemplateFiles, getAllFiles } from './utils/templateFiles'; diff --git a/packages/create-fuels/test/integration.test.ts b/packages/create-fuels/test/integration.test.ts index 4332e21b0e..4ccaabae15 100644 --- a/packages/create-fuels/test/integration.test.ts +++ b/packages/create-fuels/test/integration.test.ts @@ -1,10 +1,14 @@ -import { safeExec } from "@fuel-ts/errors/test-utils"; -import { execSync } from "child_process"; +import { safeExec } from '@fuel-ts/errors/test-utils'; +import { execSync } from 'child_process'; -import type { ProjectPaths} from "./utils/bootstrapProject"; -import { bootstrapProject, copyTemplate, resetFilesystem } from "./utils/bootstrapProject"; -import { generateArgs } from "./utils/generateArgs"; -import { filterForcBuildFiles, filterOriginalTemplateFiles, getAllFiles } from "./utils/templateFiles"; +import type { ProjectPaths } from './utils/bootstrapProject'; +import { bootstrapProject, resetFilesystem } from './utils/bootstrapProject'; +import { generateArgs } from './utils/generateArgs'; +import { + filterForcBuildFiles, + filterOriginalTemplateFiles, + getAllFiles, +} from './utils/templateFiles'; const fuelsVersion = process.env.PUBLISHED_NPM_VERSION; const programsToInclude = { contract: true, predicate: true, script: true }; @@ -13,24 +17,31 @@ const programsToInclude = { contract: true, predicate: true, script: true }; * @group integration */ describe('CLI - Integration', () => { - const paths: ProjectPaths = bootstrapProject(__filename);; + const paths: ProjectPaths = bootstrapProject(__filename); const args = generateArgs(programsToInclude, paths.root).join(' '); afterEach(() => { resetFilesystem(paths.root); }); - it('should perform `pnpm create fuels`', async () => { - let expectedTemplateFiles = await getAllFiles(paths.sourceTemplate); - expectedTemplateFiles = filterOriginalTemplateFiles(expectedTemplateFiles, programsToInclude).filter(filterForcBuildFiles); + it( + 'should perform `pnpm create fuels`', + async () => { + let expectedTemplateFiles = await getAllFiles(paths.sourceTemplate); + expectedTemplateFiles = filterOriginalTemplateFiles( + expectedTemplateFiles, + programsToInclude + ).filter(filterForcBuildFiles); - // Perform create fuels - const { error: createFuelsError } = await safeExec( - () => execSync(`pnpm create fuels@${fuelsVersion} ${args}`, { stdio: 'inherit' }) - ); - expect(createFuelsError).toBeUndefined(); + // Perform create fuels + const { error: createFuelsError } = await safeExec(() => + execSync(`pnpm create fuels@${fuelsVersion} ${args}`, { stdio: 'inherit' }) + ); + expect(createFuelsError).toBeUndefined(); - const actualTemplateFiles = await getAllFiles(paths.root); - expect(actualTemplateFiles.sort()).toEqual(expectedTemplateFiles.sort()); - }, { timeout: 60000 }); -}) \ No newline at end of file + const actualTemplateFiles = await getAllFiles(paths.root); + expect(actualTemplateFiles.sort()).toEqual(expectedTemplateFiles.sort()); + }, + { timeout: 60000 } + ); +}); diff --git a/packages/create-fuels/test/utils/bootstrapProject.ts b/packages/create-fuels/test/utils/bootstrapProject.ts index d4dbbd30cc..fb2983c98e 100644 --- a/packages/create-fuels/test/utils/bootstrapProject.ts +++ b/packages/create-fuels/test/utils/bootstrapProject.ts @@ -41,7 +41,7 @@ export const copyTemplate = (srcDir: string, destDir: string) => { if (!existsSync(destDir)) { cpSync(srcDir, destDir, { recursive: true }); } -} +}; export const resetFilesystem = (dirPath: string) => { if (existsSync(dirPath)) { diff --git a/packages/create-fuels/test/utils/generateArgs.ts b/packages/create-fuels/test/utils/generateArgs.ts index 9387d15799..76ebd68803 100644 --- a/packages/create-fuels/test/utils/generateArgs.ts +++ b/packages/create-fuels/test/utils/generateArgs.ts @@ -1,4 +1,4 @@ -import type { ProgramsToInclude } from "../../src/cli"; +import type { ProgramsToInclude } from '../../src/cli'; const defaultFlags = ['--pnpm']; @@ -20,4 +20,8 @@ export const generateArgs = (programsToInclude: ProgramsToInclude, projectName?: return args; }; -export const generateArgv = (programsToInclude: ProgramsToInclude, projectName?: string) => ['', '', ...generateArgs(programsToInclude, projectName)]; +export const generateArgv = (programsToInclude: ProgramsToInclude, projectName?: string) => [ + '', + '', + ...generateArgs(programsToInclude, projectName), +]; diff --git a/packages/create-fuels/test/utils/templateFiles.ts b/packages/create-fuels/test/utils/templateFiles.ts index 75be9da2ae..3121ec7b0f 100644 --- a/packages/create-fuels/test/utils/templateFiles.ts +++ b/packages/create-fuels/test/utils/templateFiles.ts @@ -1,6 +1,6 @@ -import { glob } from "glob"; +import { glob } from 'glob'; -import type { ProgramsToInclude } from "../../src/cli"; +import type { ProgramsToInclude } from '../../src/cli'; export const getAllFiles = async (pathToDir: string) => { const files = await glob(`${pathToDir}/**/*`, { @@ -10,7 +10,10 @@ export const getAllFiles = async (pathToDir: string) => { return filesWithoutPrefix; }; -export const filterOriginalTemplateFiles = (files: string[], programsToInclude: ProgramsToInclude) => { +export const filterOriginalTemplateFiles = ( + files: string[], + programsToInclude: ProgramsToInclude +) => { let newFiles = [...files]; newFiles = newFiles.filter((file) => { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 190f1a8139..2f4c16d7f1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,7 +8,6 @@ overrides: cross-fetch: 4.0.0 importers: - .: devDependencies: '@actions/core': @@ -1183,7 +1182,6 @@ importers: version: 5.2.2 packages: - '@aashutoshrathi/word-wrap@1.2.6': resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} engines: {node: '>=0.10.0'} @@ -12264,7 +12262,6 @@ packages: resolution: {integrity: sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==} snapshots: - '@aashutoshrathi/word-wrap@1.2.6': {} '@actions/core@1.10.1': From e435a6a6e67b3ef4bad213982cbe1bba8f52bf7a Mon Sep 17 00:00:00 2001 From: Peter Smith Date: Tue, 21 May 2024 19:26:54 +0100 Subject: [PATCH 12/48] Remove the timeout --- .../create-fuels/test/integration.test.ts | 31 ++++++++----------- 1 file changed, 13 insertions(+), 18 deletions(-) diff --git a/packages/create-fuels/test/integration.test.ts b/packages/create-fuels/test/integration.test.ts index 4ccaabae15..489e0c2256 100644 --- a/packages/create-fuels/test/integration.test.ts +++ b/packages/create-fuels/test/integration.test.ts @@ -24,24 +24,19 @@ describe('CLI - Integration', () => { resetFilesystem(paths.root); }); - it( - 'should perform `pnpm create fuels`', - async () => { - let expectedTemplateFiles = await getAllFiles(paths.sourceTemplate); - expectedTemplateFiles = filterOriginalTemplateFiles( - expectedTemplateFiles, - programsToInclude - ).filter(filterForcBuildFiles); + it('should perform `pnpm create fuels`', async () => { + let expectedTemplateFiles = await getAllFiles(paths.sourceTemplate); + expectedTemplateFiles = filterOriginalTemplateFiles( + expectedTemplateFiles, + programsToInclude + ).filter(filterForcBuildFiles); - // Perform create fuels - const { error: createFuelsError } = await safeExec(() => - execSync(`pnpm create fuels@${fuelsVersion} ${args}`, { stdio: 'inherit' }) - ); - expect(createFuelsError).toBeUndefined(); + const { error: createFuelsError } = await safeExec(() => + execSync(`pnpm create fuels@${fuelsVersion} ${args}`, { stdio: 'inherit' }) + ); + expect(createFuelsError).toBeUndefined(); - const actualTemplateFiles = await getAllFiles(paths.root); - expect(actualTemplateFiles.sort()).toEqual(expectedTemplateFiles.sort()); - }, - { timeout: 60000 } - ); + const actualTemplateFiles = await getAllFiles(paths.root); + expect(actualTemplateFiles.sort()).toEqual(expectedTemplateFiles.sort()); + }); }); From 31751e725150624e36c5d9e99ebe2305c779a193 Mon Sep 17 00:00:00 2001 From: Peter Smith Date: Tue, 21 May 2024 19:27:49 +0100 Subject: [PATCH 13/48] ci: hooked up job to perform test --- .github/workflows/pr-release.yaml | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/.github/workflows/pr-release.yaml b/.github/workflows/pr-release.yaml index ce014ebeca..02ccf2dfc6 100644 --- a/.github/workflows/pr-release.yaml +++ b/.github/workflows/pr-release.yaml @@ -8,7 +8,7 @@ jobs: name: "Release PR to npm" runs-on: ubuntu-latest # comment out if:false to enable release PR to npm - if: false + # if: false permissions: write-all steps: - name: Checkout @@ -48,3 +48,22 @@ jobs: This PR is published in NPM with version **${{ steps.release.outputs.published_version }}** env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + integration-test: + name: "Integration test PR" + runs-on: ubuntu-latest + needs: [release-pr] + env: + PUBLISHED_NPM_VERSION: ${{ needs.release-pr.outputs.published_version }} + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + ref: ${{ github.event.pull_request.head.ref }} + + - name: Test Setup + uses: ./.github/actions/test-setup + + - name: Integration test + run: pnpm test:integration \ No newline at end of file From 83a1af6035ed4c9398d8d566de03a71ffd093930 Mon Sep 17 00:00:00 2001 From: Peter Smith Date: Tue, 21 May 2024 20:32:42 +0100 Subject: [PATCH 14/48] chore: added timeout --- .../create-fuels/test/integration.test.ts | 30 +++++++++++-------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/packages/create-fuels/test/integration.test.ts b/packages/create-fuels/test/integration.test.ts index 489e0c2256..699ed6586c 100644 --- a/packages/create-fuels/test/integration.test.ts +++ b/packages/create-fuels/test/integration.test.ts @@ -24,19 +24,23 @@ describe('CLI - Integration', () => { resetFilesystem(paths.root); }); - it('should perform `pnpm create fuels`', async () => { - let expectedTemplateFiles = await getAllFiles(paths.sourceTemplate); - expectedTemplateFiles = filterOriginalTemplateFiles( - expectedTemplateFiles, - programsToInclude - ).filter(filterForcBuildFiles); + it( + 'should perform `pnpm create fuels`', + async () => { + let expectedTemplateFiles = await getAllFiles(paths.sourceTemplate); + expectedTemplateFiles = filterOriginalTemplateFiles( + expectedTemplateFiles, + programsToInclude + ).filter(filterForcBuildFiles); - const { error: createFuelsError } = await safeExec(() => - execSync(`pnpm create fuels@${fuelsVersion} ${args}`, { stdio: 'inherit' }) - ); - expect(createFuelsError).toBeUndefined(); + const { error: createFuelsError } = await safeExec(() => + execSync(`pnpm create fuels@${fuelsVersion} ${args}`, { stdio: 'inherit' }) + ); + expect(createFuelsError).toBeUndefined(); - const actualTemplateFiles = await getAllFiles(paths.root); - expect(actualTemplateFiles.sort()).toEqual(expectedTemplateFiles.sort()); - }); + const actualTemplateFiles = await getAllFiles(paths.root); + expect(actualTemplateFiles.sort()).toEqual(expectedTemplateFiles.sort()); + }, + { timeout: 30000 } + ); }); From 616f06160ac954eb81f1b687884edadd8d7018e3 Mon Sep 17 00:00:00 2001 From: Peter Smith Date: Wed, 22 May 2024 06:52:31 +0100 Subject: [PATCH 15/48] chore: added `next-env.d.ts` into template bootstrap --- templates/nextjs/.gitignore | 1 - templates/nextjs/next-env.d.ts | 5 +++++ 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 templates/nextjs/next-env.d.ts diff --git a/templates/nextjs/.gitignore b/templates/nextjs/.gitignore index bc516c4936..22a95c4132 100644 --- a/templates/nextjs/.gitignore +++ b/templates/nextjs/.gitignore @@ -31,7 +31,6 @@ yarn-error.log* # typescript *.tsbuildinfo -next-env.d.ts .fuels diff --git a/templates/nextjs/next-env.d.ts b/templates/nextjs/next-env.d.ts new file mode 100644 index 0000000000..4f11a03dc6 --- /dev/null +++ b/templates/nextjs/next-env.d.ts @@ -0,0 +1,5 @@ +/// +/// + +// NOTE: This file should not be edited +// see https://nextjs.org/docs/basic-features/typescript for more information. From 0e768d0512e0a56db76135bf61504dc8bc5f1ecd Mon Sep 17 00:00:00 2001 From: Peter Smith Date: Wed, 22 May 2024 07:52:55 +0100 Subject: [PATCH 16/48] Rebuild From cffe61a96bce61174bb634fa71c015492d03b011 Mon Sep 17 00:00:00 2001 From: Peter Smith Date: Wed, 22 May 2024 09:13:23 +0100 Subject: [PATCH 17/48] debug: added debugging for CI related failure --- packages/create-fuels/test/integration.test.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/create-fuels/test/integration.test.ts b/packages/create-fuels/test/integration.test.ts index 699ed6586c..ef757002e7 100644 --- a/packages/create-fuels/test/integration.test.ts +++ b/packages/create-fuels/test/integration.test.ts @@ -27,18 +27,21 @@ describe('CLI - Integration', () => { it( 'should perform `pnpm create fuels`', async () => { + const command = `pnpm create fuels@${fuelsVersion} ${args}`; + console.log(command); let expectedTemplateFiles = await getAllFiles(paths.sourceTemplate); expectedTemplateFiles = filterOriginalTemplateFiles( expectedTemplateFiles, programsToInclude ).filter(filterForcBuildFiles); + console.log('ExpectedSourceTemplate', JSON.stringify(expectedTemplateFiles)) - const { error: createFuelsError } = await safeExec(() => - execSync(`pnpm create fuels@${fuelsVersion} ${args}`, { stdio: 'inherit' }) - ); + + const { error: createFuelsError } = await safeExec(() => execSync(command, { stdio: 'inherit' })); expect(createFuelsError).toBeUndefined(); const actualTemplateFiles = await getAllFiles(paths.root); + console.log('Actual', JSON.stringify(actualTemplateFiles)) expect(actualTemplateFiles.sort()).toEqual(expectedTemplateFiles.sort()); }, { timeout: 30000 } From 323b88eea22d5f7a7d149ef5c0ab15b1c9a6164b Mon Sep 17 00:00:00 2001 From: Peter Smith Date: Wed, 22 May 2024 09:34:52 +0100 Subject: [PATCH 18/48] chore: added env to action step --- .github/workflows/pr-release.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pr-release.yaml b/.github/workflows/pr-release.yaml index 02ccf2dfc6..906e5c020a 100644 --- a/.github/workflows/pr-release.yaml +++ b/.github/workflows/pr-release.yaml @@ -53,8 +53,6 @@ jobs: name: "Integration test PR" runs-on: ubuntu-latest needs: [release-pr] - env: - PUBLISHED_NPM_VERSION: ${{ needs.release-pr.outputs.published_version }} steps: - name: Checkout uses: actions/checkout@v4 @@ -66,4 +64,6 @@ jobs: uses: ./.github/actions/test-setup - name: Integration test - run: pnpm test:integration \ No newline at end of file + run: pnpm test:integration + env: + PUBLISHED_NPM_VERSION: ${{ needs.release-pr.outputs.published_version }} \ No newline at end of file From 87f31de3c3fbc59b267eefd4e39b4fadc0aa335f Mon Sep 17 00:00:00 2001 From: Peter Smith Date: Wed, 22 May 2024 09:52:22 +0100 Subject: [PATCH 19/48] chore: added `process.env` to vitest env loading --- vitest.shared.config.mts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vitest.shared.config.mts b/vitest.shared.config.mts index 08ba440607..697349e582 100644 --- a/vitest.shared.config.mts +++ b/vitest.shared.config.mts @@ -38,7 +38,7 @@ export default defineConfig({ ], globals: true, setupFiles: ["./vitest.env.ts"], - env: loadEnv(mode, process.cwd(), ""), + env: Object.assign(process.env, loadEnv(mode, process.cwd(), "")), poolOptions: { threads: { minThreads: 1, From ac5f2435a2c20cc812392171b517ae6d20f89496 Mon Sep 17 00:00:00 2001 From: Peter Smith Date: Wed, 22 May 2024 11:15:41 +0100 Subject: [PATCH 20/48] debug: test env is defined --- .github/workflows/pr-release.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/pr-release.yaml b/.github/workflows/pr-release.yaml index 906e5c020a..d78000693a 100644 --- a/.github/workflows/pr-release.yaml +++ b/.github/workflows/pr-release.yaml @@ -63,6 +63,11 @@ jobs: - name: Test Setup uses: ./.github/actions/test-setup + - name: Test Env + run: echo $PUBLISHED_NPM_VERSION + env: + PUBLISHED_NPM_VERSION: ${{ needs.release-pr.outputs.published_version }} + - name: Integration test run: pnpm test:integration env: From 679ffbbadddf9b351c658de5c9d12c02d05d6fa1 Mon Sep 17 00:00:00 2001 From: Peter Smith Date: Wed, 22 May 2024 11:26:08 +0100 Subject: [PATCH 21/48] ci: added output for `published_version` --- .github/workflows/pr-release.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/pr-release.yaml b/.github/workflows/pr-release.yaml index d78000693a..48e5bc468f 100644 --- a/.github/workflows/pr-release.yaml +++ b/.github/workflows/pr-release.yaml @@ -10,6 +10,8 @@ jobs: # comment out if:false to enable release PR to npm # if: false permissions: write-all + outputs: + published_version: ${{ steps.release.outputs.published_version }} steps: - name: Checkout uses: actions/checkout@v4 From 65adb0b1b0a71cd5f8e7157481e89748ebbbfeb6 Mon Sep 17 00:00:00 2001 From: Peter Smith Date: Wed, 22 May 2024 11:27:58 +0100 Subject: [PATCH 22/48] chore: fixed `fuelsVersion` format to match CI --- packages/create-fuels/test/integration.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/create-fuels/test/integration.test.ts b/packages/create-fuels/test/integration.test.ts index ef757002e7..de21cef7d8 100644 --- a/packages/create-fuels/test/integration.test.ts +++ b/packages/create-fuels/test/integration.test.ts @@ -27,7 +27,7 @@ describe('CLI - Integration', () => { it( 'should perform `pnpm create fuels`', async () => { - const command = `pnpm create fuels@${fuelsVersion} ${args}`; + const command = `pnpm create fuels${fuelsVersion} ${args}`; console.log(command); let expectedTemplateFiles = await getAllFiles(paths.sourceTemplate); expectedTemplateFiles = filterOriginalTemplateFiles( From fe790438e50ff8c039c1c7a266cd66e38df69bc8 Mon Sep 17 00:00:00 2001 From: Peter Smith Date: Wed, 22 May 2024 11:37:58 +0100 Subject: [PATCH 23/48] Revert "chore: fixed `fuelsVersion` format to match CI" This reverts commit 65adb0b1b0a71cd5f8e7157481e89748ebbbfeb6. --- packages/create-fuels/test/integration.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/create-fuels/test/integration.test.ts b/packages/create-fuels/test/integration.test.ts index de21cef7d8..ef757002e7 100644 --- a/packages/create-fuels/test/integration.test.ts +++ b/packages/create-fuels/test/integration.test.ts @@ -27,7 +27,7 @@ describe('CLI - Integration', () => { it( 'should perform `pnpm create fuels`', async () => { - const command = `pnpm create fuels${fuelsVersion} ${args}`; + const command = `pnpm create fuels@${fuelsVersion} ${args}`; console.log(command); let expectedTemplateFiles = await getAllFiles(paths.sourceTemplate); expectedTemplateFiles = filterOriginalTemplateFiles( From 09dfecff2ccb8e679c55f3508bb51d5f234ed5ba Mon Sep 17 00:00:00 2001 From: Peter Smith Date: Wed, 22 May 2024 11:48:32 +0100 Subject: [PATCH 24/48] Revert "debug: added debugging for CI related failure" This reverts commit cffe61a96bce61174bb634fa71c015492d03b011. --- packages/create-fuels/test/integration.test.ts | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/packages/create-fuels/test/integration.test.ts b/packages/create-fuels/test/integration.test.ts index ef757002e7..699ed6586c 100644 --- a/packages/create-fuels/test/integration.test.ts +++ b/packages/create-fuels/test/integration.test.ts @@ -27,21 +27,18 @@ describe('CLI - Integration', () => { it( 'should perform `pnpm create fuels`', async () => { - const command = `pnpm create fuels@${fuelsVersion} ${args}`; - console.log(command); let expectedTemplateFiles = await getAllFiles(paths.sourceTemplate); expectedTemplateFiles = filterOriginalTemplateFiles( expectedTemplateFiles, programsToInclude ).filter(filterForcBuildFiles); - console.log('ExpectedSourceTemplate', JSON.stringify(expectedTemplateFiles)) - - const { error: createFuelsError } = await safeExec(() => execSync(command, { stdio: 'inherit' })); + const { error: createFuelsError } = await safeExec(() => + execSync(`pnpm create fuels@${fuelsVersion} ${args}`, { stdio: 'inherit' }) + ); expect(createFuelsError).toBeUndefined(); const actualTemplateFiles = await getAllFiles(paths.root); - console.log('Actual', JSON.stringify(actualTemplateFiles)) expect(actualTemplateFiles.sort()).toEqual(expectedTemplateFiles.sort()); }, { timeout: 30000 } From 3f4ae01e969481d76b56b8d09081cca0cf8ac2de Mon Sep 17 00:00:00 2001 From: Peter Smith Date: Wed, 22 May 2024 14:10:12 +0100 Subject: [PATCH 25/48] chore: finalized integration test --- .../create-fuels/test/integration.test.ts | 29 ++++++++++--------- .../create-fuels/test/utils/generateArgs.ts | 6 ++-- 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/packages/create-fuels/test/integration.test.ts b/packages/create-fuels/test/integration.test.ts index 699ed6586c..debf1e8547 100644 --- a/packages/create-fuels/test/integration.test.ts +++ b/packages/create-fuels/test/integration.test.ts @@ -10,35 +10,38 @@ import { getAllFiles, } from './utils/templateFiles'; -const fuelsVersion = process.env.PUBLISHED_NPM_VERSION; +const PUBLISHED_NPM_VERSION = process.env.PUBLISHED_NPM_VERSION; const programsToInclude = { contract: true, predicate: true, script: true }; +const availablePackages = ['pnpm']; /** * @group integration */ describe('CLI - Integration', () => { - const paths: ProjectPaths = bootstrapProject(__filename); - const args = generateArgs(programsToInclude, paths.root).join(' '); + let paths: ProjectPaths + + beforeEach(() => { + paths = bootstrapProject(__filename); + }); afterEach(() => { resetFilesystem(paths.root); }); - it( - 'should perform `pnpm create fuels`', - async () => { - let expectedTemplateFiles = await getAllFiles(paths.sourceTemplate); - expectedTemplateFiles = filterOriginalTemplateFiles( - expectedTemplateFiles, - programsToInclude - ).filter(filterForcBuildFiles); + it.each(availablePackages)( + 'should perform `%s create fuels`', + async (packageManager) => { + const args = generateArgs(programsToInclude, paths.root, packageManager).join(' '); + const expectedTemplateFiles = await getAllFiles(paths.sourceTemplate).then( + (files) => filterOriginalTemplateFiles(files, programsToInclude).filter(filterForcBuildFiles) + ); const { error: createFuelsError } = await safeExec(() => - execSync(`pnpm create fuels@${fuelsVersion} ${args}`, { stdio: 'inherit' }) + execSync(`${packageManager} create fuels@${PUBLISHED_NPM_VERSION} ${args}`, { stdio: 'inherit' }) ); - expect(createFuelsError).toBeUndefined(); const actualTemplateFiles = await getAllFiles(paths.root); + expect(createFuelsError).toBeUndefined(); expect(actualTemplateFiles.sort()).toEqual(expectedTemplateFiles.sort()); }, { timeout: 30000 } diff --git a/packages/create-fuels/test/utils/generateArgs.ts b/packages/create-fuels/test/utils/generateArgs.ts index 76ebd68803..225ffbd3c2 100644 --- a/packages/create-fuels/test/utils/generateArgs.ts +++ b/packages/create-fuels/test/utils/generateArgs.ts @@ -1,8 +1,6 @@ import type { ProgramsToInclude } from '../../src/cli'; -const defaultFlags = ['--pnpm']; - -export const generateArgs = (programsToInclude: ProgramsToInclude, projectName?: string) => { +export const generateArgs = (programsToInclude: ProgramsToInclude, projectName?: string, packageManager: string = 'pnpm') => { const args = []; if (projectName) { args.push(projectName); @@ -16,7 +14,7 @@ export const generateArgs = (programsToInclude: ProgramsToInclude, projectName?: if (programsToInclude.script) { args.push('-s'); } - args.push(...defaultFlags); + args.push([`--${packageManager}`]); return args; }; From 55df629fac314fdd34e64396dc19e63624ec62fb Mon Sep 17 00:00:00 2001 From: Peter Smith Date: Wed, 22 May 2024 14:13:30 +0100 Subject: [PATCH 26/48] Revert "chore: added `process.env` to vitest env loading" This reverts commit 87f31de3c3fbc59b267eefd4e39b4fadc0aa335f. --- vitest.shared.config.mts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vitest.shared.config.mts b/vitest.shared.config.mts index 697349e582..08ba440607 100644 --- a/vitest.shared.config.mts +++ b/vitest.shared.config.mts @@ -38,7 +38,7 @@ export default defineConfig({ ], globals: true, setupFiles: ["./vitest.env.ts"], - env: Object.assign(process.env, loadEnv(mode, process.cwd(), "")), + env: loadEnv(mode, process.cwd(), ""), poolOptions: { threads: { minThreads: 1, From 03b8ed3c900f37b81cbc56436c176d8bc6f20ff5 Mon Sep 17 00:00:00 2001 From: Peter Smith Date: Wed, 22 May 2024 14:46:53 +0100 Subject: [PATCH 27/48] chore: refactored publish to NPM into action --- .github/actions/pr-release/action.yaml | 37 +++++++++++++++++++ .github/workflows/pr-release.yaml | 49 ++++---------------------- 2 files changed, 44 insertions(+), 42 deletions(-) create mode 100644 .github/actions/pr-release/action.yaml diff --git a/.github/actions/pr-release/action.yaml b/.github/actions/pr-release/action.yaml new file mode 100644 index 0000000000..4ab6fe74a5 --- /dev/null +++ b/.github/actions/pr-release/action.yaml @@ -0,0 +1,37 @@ +name: "Publish PR to NPM" +inputs: + npm-token: + description: "NPM token for authenticating to NPM registry" + required: true + + github-token: + description: "GitHub token for authenticating to GitHub" + required: true + + pr-number: + description: "PR number" + default: ${{ github.event.pull_request.number }} + +runs: + using: "composite" + steps: + - name: Ensure NPM access + run: npm whoami + env: + NODE_AUTH_TOKEN: ${{ inputs.npm-token }} + + - name: Build + run: pnpm build + + - name: Release to @pr-${{ inputs.pr-number }} tag on npm + id: release + run: | + pnpm changeset:next + git add .changeset/fuel-labs-ci.md + pnpm changeset version --snapshot pr-${{ inputs.pr-number }} + changetsets=$(pnpm changeset publish --tag pr-${{ inputs.pr-number }}) + published_version=$(echo "$changetsets" | grep -oP '@\K([0-9]+\.){2}[0-9]+-pr-${{ inputs.pr-number }}-\d+' | head -1) + echo "published_version=$published_version" >> $GITHUB_OUTPUT + env: + NODE_AUTH_TOKEN: ${{ inputs.npm-token }} + GITHUB_TOKEN: ${{ inputs.github-token }} diff --git a/.github/workflows/pr-release.yaml b/.github/workflows/pr-release.yaml index 48e5bc468f..9840a140c9 100644 --- a/.github/workflows/pr-release.yaml +++ b/.github/workflows/pr-release.yaml @@ -22,55 +22,20 @@ jobs: - name: CI Setup uses: ./.github/actions/ci-setup - - name: Ensure NPM access - run: npm whoami - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - - name: Build run: pnpm build - - name: Release to @pr-${{ github.event.pull_request.number }} tag on npm + - name: Publish to NPM id: release - run: | - pnpm changeset:next - git add .changeset/fuel-labs-ci.md - pnpm changeset version --snapshot pr-${{ env.PR_NUMBER }} - changetsets=$(pnpm changeset publish --tag pr-${{ env.PR_NUMBER }}) - published_version=$(echo "$changetsets" | grep -oP '@\K([0-9]+\.){2}[0-9]+-pr-${{ env.PR_NUMBER }}-\d+' | head -1) - echo "published_version=$published_version" >> $GITHUB_OUTPUT - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - PR_NUMBER: ${{ github.event.pull_request.number }} + uses: ./.github/actions/pr-release + with: + npm-token: ${{ secrets.NPM_TOKEN }} + github-token: ${{ secrets.GITHUB_TOKEN }} + pr-number: ${{ github.event.pull_request.number }} - uses: mshick/add-pr-comment@v2 with: message: | This PR is published in NPM with version **${{ steps.release.outputs.published_version }}** env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - integration-test: - name: "Integration test PR" - runs-on: ubuntu-latest - needs: [release-pr] - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - ref: ${{ github.event.pull_request.head.ref }} - - - name: Test Setup - uses: ./.github/actions/test-setup - - - name: Test Env - run: echo $PUBLISHED_NPM_VERSION - env: - PUBLISHED_NPM_VERSION: ${{ needs.release-pr.outputs.published_version }} - - - name: Integration test - run: pnpm test:integration - env: - PUBLISHED_NPM_VERSION: ${{ needs.release-pr.outputs.published_version }} \ No newline at end of file + GITHUB_TOKEN: ${{ inputs.github-token }} \ No newline at end of file From 5be335438c5aaef232c8de18e12d31a1c85c6314 Mon Sep 17 00:00:00 2001 From: Peter Smith Date: Wed, 22 May 2024 14:47:03 +0100 Subject: [PATCH 28/48] chore: changeset --- .changeset/chilly-shirts-bathe.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/chilly-shirts-bathe.md diff --git a/.changeset/chilly-shirts-bathe.md b/.changeset/chilly-shirts-bathe.md new file mode 100644 index 0000000000..7a48ec9b8e --- /dev/null +++ b/.changeset/chilly-shirts-bathe.md @@ -0,0 +1,5 @@ +--- +"create-fuels": patch +--- + +chore: add integration test for `create fuels` CLI From 67e6ad28fd602ed9a789e92d604a48a55b77c08c Mon Sep 17 00:00:00 2001 From: Peter Smith Date: Wed, 22 May 2024 14:47:11 +0100 Subject: [PATCH 29/48] chore: lint --- packages/create-fuels/test/integration.test.ts | 10 ++++++---- packages/create-fuels/test/utils/generateArgs.ts | 6 +++++- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/packages/create-fuels/test/integration.test.ts b/packages/create-fuels/test/integration.test.ts index debf1e8547..2a2b1766ba 100644 --- a/packages/create-fuels/test/integration.test.ts +++ b/packages/create-fuels/test/integration.test.ts @@ -18,7 +18,7 @@ const availablePackages = ['pnpm']; * @group integration */ describe('CLI - Integration', () => { - let paths: ProjectPaths + let paths: ProjectPaths; beforeEach(() => { paths = bootstrapProject(__filename); @@ -32,12 +32,14 @@ describe('CLI - Integration', () => { 'should perform `%s create fuels`', async (packageManager) => { const args = generateArgs(programsToInclude, paths.root, packageManager).join(' '); - const expectedTemplateFiles = await getAllFiles(paths.sourceTemplate).then( - (files) => filterOriginalTemplateFiles(files, programsToInclude).filter(filterForcBuildFiles) + const expectedTemplateFiles = await getAllFiles(paths.sourceTemplate).then((files) => + filterOriginalTemplateFiles(files, programsToInclude).filter(filterForcBuildFiles) ); const { error: createFuelsError } = await safeExec(() => - execSync(`${packageManager} create fuels@${PUBLISHED_NPM_VERSION} ${args}`, { stdio: 'inherit' }) + execSync(`${packageManager} create fuels@${PUBLISHED_NPM_VERSION} ${args}`, { + stdio: 'inherit', + }) ); const actualTemplateFiles = await getAllFiles(paths.root); diff --git a/packages/create-fuels/test/utils/generateArgs.ts b/packages/create-fuels/test/utils/generateArgs.ts index 225ffbd3c2..512d5fec9d 100644 --- a/packages/create-fuels/test/utils/generateArgs.ts +++ b/packages/create-fuels/test/utils/generateArgs.ts @@ -1,6 +1,10 @@ import type { ProgramsToInclude } from '../../src/cli'; -export const generateArgs = (programsToInclude: ProgramsToInclude, projectName?: string, packageManager: string = 'pnpm') => { +export const generateArgs = ( + programsToInclude: ProgramsToInclude, + projectName?: string, + packageManager: string = 'pnpm' +) => { const args = []; if (projectName) { args.push(projectName); From 31d304c6cad994f11b912d7ddd18ea69f3306e26 Mon Sep 17 00:00:00 2001 From: Peter Smith Date: Wed, 22 May 2024 15:12:22 +0100 Subject: [PATCH 30/48] ci: added missing shell --- .github/actions/pr-release/action.yaml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/actions/pr-release/action.yaml b/.github/actions/pr-release/action.yaml index 4ab6fe74a5..4eedf458e7 100644 --- a/.github/actions/pr-release/action.yaml +++ b/.github/actions/pr-release/action.yaml @@ -16,15 +16,14 @@ runs: using: "composite" steps: - name: Ensure NPM access + shell: bash run: npm whoami env: NODE_AUTH_TOKEN: ${{ inputs.npm-token }} - - name: Build - run: pnpm build - - name: Release to @pr-${{ inputs.pr-number }} tag on npm id: release + shell: bash run: | pnpm changeset:next git add .changeset/fuel-labs-ci.md From 21a72382e2da37202afe4a80c23d7bf8bfa60e61 Mon Sep 17 00:00:00 2001 From: Peter Smith Date: Wed, 22 May 2024 15:16:07 +0100 Subject: [PATCH 31/48] chore: added integration tests to validation step --- scripts/tests-validate.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/tests-validate.sh b/scripts/tests-validate.sh index 74917d2fb8..bb665beba1 100755 --- a/scripts/tests-validate.sh +++ b/scripts/tests-validate.sh @@ -3,7 +3,7 @@ ROOT=$(cd "$(dirname "$0")/.."; pwd) FILES=$(find $ROOT/{apps,packages,internal} -name '*.test.ts') -INVALID_FILES=$(grep -LE "@group\s+(node|browser|e2e)" $FILES) +INVALID_FILES=$(grep -LE "@group\s+(node|browser|e2e|integration)" $FILES) if [ ! -z "$INVALID_FILES" ]; then echo -e "Test files don't contain a test environment configuration:" From ccfbdad4197a7a572dc9f6ebe83681f285d9cc08 Mon Sep 17 00:00:00 2001 From: Peter Smith Date: Wed, 22 May 2024 15:22:19 +0100 Subject: [PATCH 32/48] ci: added integration test to pipeline --- .github/workflows/test.yaml | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 742b47ea8b..b8ad152a1b 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -72,6 +72,34 @@ jobs: TEST_WALLET_ADDRESS: ${{ secrets.TEST_WALLET_ADDRESS }} FUEL_TESTNET_NETWORK_URL: ${{ secrets.FUEL_TESTNET_NETWORK_URL }} + integration: + runs-on: ubuntu-latest + timeout-minutes: 10 + needs: [environments] + if: ${{ !github.event.pull_request.draft }} + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + ref: ${{ github.event.pull_request.head.ref }} + + - name: Test Setup + uses: ./.github/actions/test-setup + + - name: Publish to NPM + id: release + uses: ./.github/actions/pr-release + with: + npm-token: ${{ secrets.NPM_TOKEN }} + github-token: ${{ secrets.GITHUB_TOKEN }} + pr-number: ${{ github.event.pull_request.number }} + + - name: Integration test + run: pnpm test:integration + env: + PUBLISHED_NPM_VERSION: ${{ release.outputs.published_version }} + test: if: github.base_ref == 'master' || github.ref_name == 'master' runs-on: ubuntu-latest From d1f803d5f0f1cbae950c879847502f85db1af905 Mon Sep 17 00:00:00 2001 From: Peter Smith Date: Wed, 22 May 2024 15:28:28 +0100 Subject: [PATCH 33/48] ci: added missing `steps.` --- .github/workflows/test.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index b8ad152a1b..7fa66d613b 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -98,7 +98,7 @@ jobs: - name: Integration test run: pnpm test:integration env: - PUBLISHED_NPM_VERSION: ${{ release.outputs.published_version }} + PUBLISHED_NPM_VERSION: ${{ steps.release.outputs.published_version }} test: if: github.base_ref == 'master' || github.ref_name == 'master' From f9eee481db2cb7407cb1554956c7b3d7376e8a40 Mon Sep 17 00:00:00 2001 From: Peter Smith Date: Wed, 22 May 2024 15:28:46 +0100 Subject: [PATCH 34/48] ci: removed draft condition for testing --- .github/workflows/test.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 7fa66d613b..e7b3a3bd9d 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -76,7 +76,7 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 10 needs: [environments] - if: ${{ !github.event.pull_request.draft }} + # if: ${{ !github.event.pull_request.draft }} steps: - name: Checkout uses: actions/checkout@v4 From b191865fd0e91c06518e8bd3621f7a60ff3f1357 Mon Sep 17 00:00:00 2001 From: Peter Smith Date: Wed, 22 May 2024 15:38:14 +0100 Subject: [PATCH 35/48] fix: tests --- packages/create-fuels/test/utils/generateArgs.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/create-fuels/test/utils/generateArgs.ts b/packages/create-fuels/test/utils/generateArgs.ts index 512d5fec9d..f9d2de010a 100644 --- a/packages/create-fuels/test/utils/generateArgs.ts +++ b/packages/create-fuels/test/utils/generateArgs.ts @@ -4,7 +4,7 @@ export const generateArgs = ( programsToInclude: ProgramsToInclude, projectName?: string, packageManager: string = 'pnpm' -) => { +): string[] => { const args = []; if (projectName) { args.push(projectName); @@ -18,11 +18,11 @@ export const generateArgs = ( if (programsToInclude.script) { args.push('-s'); } - args.push([`--${packageManager}`]); + args.push(`--${packageManager}`); return args; }; -export const generateArgv = (programsToInclude: ProgramsToInclude, projectName?: string) => [ +export const generateArgv = (programsToInclude: ProgramsToInclude, projectName?: string): string[] => [ '', '', ...generateArgs(programsToInclude, projectName), From 11fdcab969714031d6022a83a79411cb59223136 Mon Sep 17 00:00:00 2001 From: Peter Smith Date: Wed, 22 May 2024 15:56:10 +0100 Subject: [PATCH 36/48] chore: lint --- packages/create-fuels/test/utils/generateArgs.ts | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/packages/create-fuels/test/utils/generateArgs.ts b/packages/create-fuels/test/utils/generateArgs.ts index f9d2de010a..80b93284f6 100644 --- a/packages/create-fuels/test/utils/generateArgs.ts +++ b/packages/create-fuels/test/utils/generateArgs.ts @@ -22,8 +22,7 @@ export const generateArgs = ( return args; }; -export const generateArgv = (programsToInclude: ProgramsToInclude, projectName?: string): string[] => [ - '', - '', - ...generateArgs(programsToInclude, projectName), -]; +export const generateArgv = ( + programsToInclude: ProgramsToInclude, + projectName?: string +): string[] => ['', '', ...generateArgs(programsToInclude, projectName)]; From 8b96e6bf1118b4482c7855629bb73bfca9f9fbeb Mon Sep 17 00:00:00 2001 From: Peter Smith Date: Wed, 22 May 2024 16:03:51 +0100 Subject: [PATCH 37/48] ci: added outputs published_version to action --- .github/actions/pr-release/action.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/actions/pr-release/action.yaml b/.github/actions/pr-release/action.yaml index 4eedf458e7..d33d0637c3 100644 --- a/.github/actions/pr-release/action.yaml +++ b/.github/actions/pr-release/action.yaml @@ -12,6 +12,10 @@ inputs: description: "PR number" default: ${{ github.event.pull_request.number }} +outputs: + published_version: + description: "Published version of the PR" + runs: using: "composite" steps: From 13377702a5f611bdcaaddd6555b2ee87fc001ca1 Mon Sep 17 00:00:00 2001 From: Peter Smith Date: Wed, 22 May 2024 16:04:45 +0100 Subject: [PATCH 38/48] ci: added echo published version --- .github/workflows/test.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index e7b3a3bd9d..5ddcc9c69f 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -95,6 +95,9 @@ jobs: github-token: ${{ secrets.GITHUB_TOKEN }} pr-number: ${{ github.event.pull_request.number }} + - name: Echo Published Version + run: echo ${{ steps.release.outputs.published_version }} + - name: Integration test run: pnpm test:integration env: From 0d6035761ecb8ead20c78b2e6cb0883d556580df Mon Sep 17 00:00:00 2001 From: Peter Smith Date: Wed, 22 May 2024 16:13:45 +0100 Subject: [PATCH 39/48] ci: add output value --- .github/actions/pr-release/action.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/actions/pr-release/action.yaml b/.github/actions/pr-release/action.yaml index d33d0637c3..1e2bddb8e1 100644 --- a/.github/actions/pr-release/action.yaml +++ b/.github/actions/pr-release/action.yaml @@ -15,6 +15,7 @@ inputs: outputs: published_version: description: "Published version of the PR" + value: ${{ steps.release.outputs.published_version }} runs: using: "composite" From 2560713292991d0473ba492567769068576a9c45 Mon Sep 17 00:00:00 2001 From: Peter Smith Date: Wed, 22 May 2024 16:29:24 +0100 Subject: [PATCH 40/48] ci: disable publish PR --- .github/workflows/pr-release.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pr-release.yaml b/.github/workflows/pr-release.yaml index 9840a140c9..50f6ec8726 100644 --- a/.github/workflows/pr-release.yaml +++ b/.github/workflows/pr-release.yaml @@ -8,7 +8,7 @@ jobs: name: "Release PR to npm" runs-on: ubuntu-latest # comment out if:false to enable release PR to npm - # if: false + if: false permissions: write-all outputs: published_version: ${{ steps.release.outputs.published_version }} From 95b1fe691723add8e847733b559b323f97bb4230 Mon Sep 17 00:00:00 2001 From: Peter Smith Date: Wed, 22 May 2024 16:30:19 +0100 Subject: [PATCH 41/48] ci: only run integration tests on non-draft --- .github/workflows/test.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 5ddcc9c69f..7e3aecec11 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -76,7 +76,7 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 10 needs: [environments] - # if: ${{ !github.event.pull_request.draft }} + if: ${{ !github.event.pull_request.draft }} steps: - name: Checkout uses: actions/checkout@v4 From 27db035e56391dd2c1bd517898cb845f7c3a5a86 Mon Sep 17 00:00:00 2001 From: Peter Smith Date: Wed, 22 May 2024 16:31:33 +0100 Subject: [PATCH 42/48] ci: fixed GITHUB_TOKEN --- .github/workflows/pr-release.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pr-release.yaml b/.github/workflows/pr-release.yaml index 50f6ec8726..cb05c2056a 100644 --- a/.github/workflows/pr-release.yaml +++ b/.github/workflows/pr-release.yaml @@ -38,4 +38,4 @@ jobs: message: | This PR is published in NPM with version **${{ steps.release.outputs.published_version }}** env: - GITHUB_TOKEN: ${{ inputs.github-token }} \ No newline at end of file + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file From 2389496a6b86de689d4a18c5b18c8cf2aa9689a5 Mon Sep 17 00:00:00 2001 From: Peter Smith Date: Wed, 22 May 2024 16:32:47 +0100 Subject: [PATCH 43/48] ci: removed redundant outputs --- .github/workflows/pr-release.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/pr-release.yaml b/.github/workflows/pr-release.yaml index cb05c2056a..6cc274cba0 100644 --- a/.github/workflows/pr-release.yaml +++ b/.github/workflows/pr-release.yaml @@ -10,8 +10,6 @@ jobs: # comment out if:false to enable release PR to npm if: false permissions: write-all - outputs: - published_version: ${{ steps.release.outputs.published_version }} steps: - name: Checkout uses: actions/checkout@v4 From 40cecca813b9f23b8893a9345ce9383a79e1ce54 Mon Sep 17 00:00:00 2001 From: Peter Smith Date: Thu, 23 May 2024 15:20:48 +0100 Subject: [PATCH 44/48] chore: using secrets over passing through variables --- .github/actions/pr-release/action.yaml | 4 ++-- .github/workflows/test.yaml | 4 ---- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/.github/actions/pr-release/action.yaml b/.github/actions/pr-release/action.yaml index 1e2bddb8e1..919fdde648 100644 --- a/.github/actions/pr-release/action.yaml +++ b/.github/actions/pr-release/action.yaml @@ -2,11 +2,11 @@ name: "Publish PR to NPM" inputs: npm-token: description: "NPM token for authenticating to NPM registry" - required: true + default: ${{ secrets.NPM_TOKEN }} github-token: description: "GitHub token for authenticating to GitHub" - required: true + default: ${{ secrets.GITHUB_TOKEN }} pr-number: description: "PR number" diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 7e3aecec11..088f5f7c2f 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -90,10 +90,6 @@ jobs: - name: Publish to NPM id: release uses: ./.github/actions/pr-release - with: - npm-token: ${{ secrets.NPM_TOKEN }} - github-token: ${{ secrets.GITHUB_TOKEN }} - pr-number: ${{ github.event.pull_request.number }} - name: Echo Published Version run: echo ${{ steps.release.outputs.published_version }} From 060f50faf5a41ac012fdefd016adb80e692d6514 Mon Sep 17 00:00:00 2001 From: Peter Smith Date: Thu, 23 May 2024 15:25:18 +0100 Subject: [PATCH 45/48] chore: moved to `e2e` test --- .changeset/chilly-shirts-bathe.md | 2 +- .github/workflows/test.yaml | 35 +++++-------------- package.json | 1 - .../test/{integration.test.ts => e2e.test.ts} | 4 +-- scripts/tests-find.sh | 2 -- scripts/tests-validate.sh | 2 +- 6 files changed, 12 insertions(+), 34 deletions(-) rename packages/create-fuels/test/{integration.test.ts => e2e.test.ts} (96%) diff --git a/.changeset/chilly-shirts-bathe.md b/.changeset/chilly-shirts-bathe.md index 7a48ec9b8e..ced462e7e3 100644 --- a/.changeset/chilly-shirts-bathe.md +++ b/.changeset/chilly-shirts-bathe.md @@ -2,4 +2,4 @@ "create-fuels": patch --- -chore: add integration test for `create fuels` CLI +chore: add `e2e` test for `create fuels` CLI diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 088f5f7c2f..cc935f94c1 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -58,9 +58,16 @@ jobs: with: fetch-depth: 0 - - name: CI Setup + - name: Test Setup uses: ./.github/actions/test-setup + - name: Publish PR to NPM + id: release + uses: ./.github/actions/pr-release + + - name: Echo Published Version + run: echo ${{ steps.release.outputs.published_version }} + - name: Pretest run: pnpm pretest @@ -71,32 +78,6 @@ jobs: TEST_WALLET_PVT_KEY: ${{ secrets.TEST_WALLET_PVT_KEY }} TEST_WALLET_ADDRESS: ${{ secrets.TEST_WALLET_ADDRESS }} FUEL_TESTNET_NETWORK_URL: ${{ secrets.FUEL_TESTNET_NETWORK_URL }} - - integration: - runs-on: ubuntu-latest - timeout-minutes: 10 - needs: [environments] - if: ${{ !github.event.pull_request.draft }} - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - ref: ${{ github.event.pull_request.head.ref }} - - - name: Test Setup - uses: ./.github/actions/test-setup - - - name: Publish to NPM - id: release - uses: ./.github/actions/pr-release - - - name: Echo Published Version - run: echo ${{ steps.release.outputs.published_version }} - - - name: Integration test - run: pnpm test:integration - env: PUBLISHED_NPM_VERSION: ${{ steps.release.outputs.published_version }} test: diff --git a/package.json b/package.json index e4eec7a816..bba36a2413 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,6 @@ "test:browser": "vitest --run --coverage --config vitest.browser.config.mts $(scripts/tests-find.sh --browser)", "test:browser:filter": "vitest --run --coverage --config vitest.browser.config.mts", "test:e2e": "vitest --run --config vitest.node.config.mts $(scripts/tests-find.sh --e2e)", - "test:integration": "vitest --run --config vitest.node.config.mts $(scripts/tests-find.sh --integration)", "lint": "run-s lint:check prettier:check", "lint:check": "eslint . --ext .ts --max-warnings 0", "lint:fix": "pnpm lint:check --fix", diff --git a/packages/create-fuels/test/integration.test.ts b/packages/create-fuels/test/e2e.test.ts similarity index 96% rename from packages/create-fuels/test/integration.test.ts rename to packages/create-fuels/test/e2e.test.ts index 2a2b1766ba..ce0ba6d066 100644 --- a/packages/create-fuels/test/integration.test.ts +++ b/packages/create-fuels/test/e2e.test.ts @@ -15,9 +15,9 @@ const programsToInclude = { contract: true, predicate: true, script: true }; const availablePackages = ['pnpm']; /** - * @group integration + * @group e2e */ -describe('CLI - Integration', () => { +describe('E2E - CLI', () => { let paths: ProjectPaths; beforeEach(() => { diff --git a/scripts/tests-find.sh b/scripts/tests-find.sh index 4c7cf11f06..74e258411b 100755 --- a/scripts/tests-find.sh +++ b/scripts/tests-find.sh @@ -10,8 +10,6 @@ elif [[ $* == *--node* ]]; then grep -lE "@group\s+node" $FILES elif [[ $* == *--browser* ]]; then grep -lE "@group\s+browser" $FILES -elif [[ $* == *--integration* ]]; then - grep -lE "@group\s+integration" $FILES elif [[ $* == *--e2e* ]]; then grep -lE "@group\s+e2e" $FILES fi diff --git a/scripts/tests-validate.sh b/scripts/tests-validate.sh index bb665beba1..74917d2fb8 100755 --- a/scripts/tests-validate.sh +++ b/scripts/tests-validate.sh @@ -3,7 +3,7 @@ ROOT=$(cd "$(dirname "$0")/.."; pwd) FILES=$(find $ROOT/{apps,packages,internal} -name '*.test.ts') -INVALID_FILES=$(grep -LE "@group\s+(node|browser|e2e|integration)" $FILES) +INVALID_FILES=$(grep -LE "@group\s+(node|browser|e2e)" $FILES) if [ ! -z "$INVALID_FILES" ]; then echo -e "Test files don't contain a test environment configuration:" From ed1f8e419e48fb93e2fc001ce5716149ae0a9d17 Mon Sep 17 00:00:00 2001 From: Peter Smith Date: Thu, 23 May 2024 16:11:15 +0100 Subject: [PATCH 46/48] Revert "chore: using secrets over passing through variables" This reverts commit 40cecca813b9f23b8893a9345ce9383a79e1ce54. --- .github/actions/pr-release/action.yaml | 4 ++-- .github/workflows/test.yaml | 3 +++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/actions/pr-release/action.yaml b/.github/actions/pr-release/action.yaml index 919fdde648..1e2bddb8e1 100644 --- a/.github/actions/pr-release/action.yaml +++ b/.github/actions/pr-release/action.yaml @@ -2,11 +2,11 @@ name: "Publish PR to NPM" inputs: npm-token: description: "NPM token for authenticating to NPM registry" - default: ${{ secrets.NPM_TOKEN }} + required: true github-token: description: "GitHub token for authenticating to GitHub" - default: ${{ secrets.GITHUB_TOKEN }} + required: true pr-number: description: "PR number" diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index cc935f94c1..2d6e791e4d 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -64,6 +64,9 @@ jobs: - name: Publish PR to NPM id: release uses: ./.github/actions/pr-release + with: + npm-token: ${{ secrets.NPM_TOKEN }} + github-token: ${{ secrets.GITHUB_TOKEN }} - name: Echo Published Version run: echo ${{ steps.release.outputs.published_version }} From 65d59a9da2acc8095c69dab9e5dc32f3004863ce Mon Sep 17 00:00:00 2001 From: Peter Smith Date: Thu, 23 May 2024 18:26:05 +0100 Subject: [PATCH 47/48] chore: skip e2e locally with log --- .env.example | 1 + packages/create-fuels/test/e2e.test.ts | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/.env.example b/.env.example index fb61325cdd..9db6730ab3 100644 --- a/.env.example +++ b/.env.example @@ -1,2 +1,3 @@ FUEL_NETWORK_URL= TEST_WALLET_PVT_KEY= +PUBLISHED_NPM_VERSION= \ No newline at end of file diff --git a/packages/create-fuels/test/e2e.test.ts b/packages/create-fuels/test/e2e.test.ts index ce0ba6d066..1d62730c74 100644 --- a/packages/create-fuels/test/e2e.test.ts +++ b/packages/create-fuels/test/e2e.test.ts @@ -10,6 +10,8 @@ import { getAllFiles, } from './utils/templateFiles'; +const { log } = console; + const PUBLISHED_NPM_VERSION = process.env.PUBLISHED_NPM_VERSION; const programsToInclude = { contract: true, predicate: true, script: true }; const availablePackages = ['pnpm']; @@ -17,8 +19,16 @@ const availablePackages = ['pnpm']; /** * @group e2e */ -describe('E2E - CLI', () => { +describe('`create fuels` package integrity', () => { let paths: ProjectPaths; + let shouldSkip = false; + + beforeAll(() => { + if (!PUBLISHED_NPM_VERSION) { + log('Skipping live `create fuels` test'); + shouldSkip = true; + } + }); beforeEach(() => { paths = bootstrapProject(__filename); @@ -31,6 +41,10 @@ describe('E2E - CLI', () => { it.each(availablePackages)( 'should perform `%s create fuels`', async (packageManager) => { + if (shouldSkip) { + return; + } + const args = generateArgs(programsToInclude, paths.root, packageManager).join(' '); const expectedTemplateFiles = await getAllFiles(paths.sourceTemplate).then((files) => filterOriginalTemplateFiles(files, programsToInclude).filter(filterForcBuildFiles) From a0856769f0522fbb9176bf5f61ef864f67dab3ff Mon Sep 17 00:00:00 2001 From: Peter Smith Date: Thu, 23 May 2024 18:27:18 +0100 Subject: [PATCH 48/48] chore: fixed name --- .changeset/chilly-shirts-bathe.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/chilly-shirts-bathe.md b/.changeset/chilly-shirts-bathe.md index ced462e7e3..cd17eb42e1 100644 --- a/.changeset/chilly-shirts-bathe.md +++ b/.changeset/chilly-shirts-bathe.md @@ -2,4 +2,4 @@ "create-fuels": patch --- -chore: add `e2e` test for `create fuels` CLI +chore: add test to verify `create fuels` template integrity