From 9322e3aaaa6eb783ffd2abec47394e3e2c74246a Mon Sep 17 00:00:00 2001 From: Matt Travi Date: Fri, 26 Jul 2024 00:08:09 -0400 Subject: [PATCH] feat(vcs-hosts): moved vcs-host scaffolding to earlier since lifting can be a separate phase now --- src/scaffolder.js | 56 +++++++++++++++++++----------------------- src/scaffolder.test.js | 23 ++++++++++------- 2 files changed, 39 insertions(+), 40 deletions(-) diff --git a/src/scaffolder.js b/src/scaffolder.js index bd23fe8b..e252db7a 100644 --- a/src/scaffolder.js +++ b/src/scaffolder.js @@ -40,6 +40,24 @@ export async function scaffold(options) { scaffoldEditorConfig({projectRoot}) ]); + const [vcsHostResults, dependencyUpdaterResults] = vcs + ? await Promise.all([ + scaffoldVcsHost(vcsHosts, { + ...vcs, + projectRoot, + description, + visibility + }), + scaffoldDependencyUpdater( + dependencyUpdaters, + decisions, + {projectRoot, vcs} + ) + ]) + : []; + + const gitResults = gitRepo && await liftGit({projectRoot, origin: vcsHostResults}); + const {[questionNames.PROJECT_LANGUAGE]: projectLanguage} = await promptForLanguageDetails(languages, decisions); const language = await scaffoldLanguage( @@ -48,34 +66,10 @@ export async function scaffold(options) { {projectRoot, projectName, vcs, visibility, license: chosenLicense || 'UNLICENSED', description} ); - const dependencyUpdaterResults = vcs && await scaffoldDependencyUpdater( - dependencyUpdaters, - decisions, - {projectRoot, vcs} - ); - - const contributors = [license, language, dependencyUpdaterResults, contributing].filter(Boolean); - const contributedTasks = contributors - .map(contributor => contributor.nextSteps) - .filter(Boolean) - .reduce((acc, contributedNextSteps) => ([...acc, ...contributedNextSteps]), []); - - const vcsHostResults = vcs && await scaffoldVcsHost(vcsHosts, { - ...vcs, - projectRoot, - description, - visibility, - ...language && { - homepage: language.projectDetails && language.projectDetails.homepage, - tags: language.tags - }, - nextSteps: contributedTasks - }); + const contributors = [license, language, dependencyUpdaterResults, contributing, gitResults].filter(Boolean); await lift({projectRoot, vcs, results: deepmerge.all(contributors), enhancers: {...dependencyUpdaters, ...vcsHosts}}); - const gitResults = gitRepo && await liftGit({projectRoot, origin: vcsHostResults}); - if (language && language.verificationCommand) { info('Verifying the generated project'); @@ -84,10 +78,10 @@ export async function scaffold(options) { await subprocess; } - reportResults({ - nextSteps: [ - ...(gitResults && gitResults.nextSteps) ? gitResults.nextSteps : [], - ...contributedTasks - ] - }); + const contributedTasks = contributors + .map(contributor => contributor.nextSteps) + .filter(Boolean) + .reduce((acc, contributedNextSteps) => ([...acc, ...contributedNextSteps]), []); + + reportResults({nextSteps: contributedTasks}); } diff --git a/src/scaffolder.test.js b/src/scaffolder.test.js index acdb1fe0..0fbb249e 100644 --- a/src/scaffolder.test.js +++ b/src/scaffolder.test.js @@ -91,6 +91,7 @@ describe('project scaffolder', () => { tags }; const licenseResults = {badges: {consumer: {license: licenseBadge}}}; + const gitResults = {nextSteps: gitNextSteps}; const contributingResults = any.simpleObject(); when(optionsValidator.validate) .calledWith(options) @@ -112,7 +113,7 @@ describe('project scaffolder', () => { when(scaffoldGit) .calledWith(gitRepoShouldBeInitialized, projectPath, projectName, vcsHosts, visibility, decisions) .mockResolvedValue(vcs); - liftGit.mockResolvedValue({nextSteps: gitNextSteps}); + liftGit.mockResolvedValue(gitResults); when(licenseScaffolder.default) .calledWith({projectRoot: projectPath, license, copyright}) .mockResolvedValue(licenseResults); @@ -123,10 +124,7 @@ describe('project scaffolder', () => { ...vcs, projectRoot: projectPath, description, - visibility, - homepage: undefined, - nextSteps: [...dependencyUpdaterNextSteps], - tags + visibility } ) .mockResolvedValue(vcsOriginDetails); @@ -152,11 +150,17 @@ describe('project scaffolder', () => { expect(lift).toHaveBeenCalledWith({ projectRoot: projectPath, vcs, - results: deepmerge.all([licenseResults, languageResults, dependencyUpdaterResults, contributingResults]), + results: deepmerge.all([ + licenseResults, + languageResults, + dependencyUpdaterResults, + contributingResults, + gitResults + ]), enhancers: {...dependencyUpdaters, ...vcsHosts} }); expect(resultsReporter.reportResults).toHaveBeenCalledWith({ - nextSteps: [...gitNextSteps, ...dependencyUpdaterNextSteps] + nextSteps: [...dependencyUpdaterNextSteps, ...gitNextSteps] }); }); @@ -259,11 +263,12 @@ describe('project scaffolder', () => { nextSteps: languageNextSteps, tags }; + const gitResults = {nextSteps: gitNextSteps}; when(optionsValidator.validate) .calledWith(options) .mockReturnValue({decisions, plugins: {languages, vcsHosts}}); scaffoldGit.mockResolvedValue(vcs); - liftGit.mockResolvedValue({nextSteps: gitNextSteps}); + liftGit.mockResolvedValue(gitResults); prompts.promptForBaseDetails.mockResolvedValue({ [coreQuestionNames.PROJECT_NAME]: projectName, [coreQuestionNames.VISIBILITY]: visibility, @@ -304,7 +309,7 @@ describe('project scaffolder', () => { expect(liftGit).toHaveBeenCalledWith({projectRoot: projectPath, origin: vcsOriginDetails}); expect(scaffoldReadme).toHaveBeenCalledWith({projectName, projectRoot: projectPath, description}); expect(execaPipe).toHaveBeenCalledWith(process.stdout); - expect(resultsReporter.reportResults).toHaveBeenCalledWith({nextSteps: [...gitNextSteps, ...languageNextSteps]}); + expect(resultsReporter.reportResults).toHaveBeenCalledWith({nextSteps: [...languageNextSteps, ...gitNextSteps]}); }); it('should consider the language details to be optional', async () => {