Skip to content

Commit

Permalink
feat(vcs-hosts): moved vcs-host scaffolding to earlier since lifting …
Browse files Browse the repository at this point in the history
…can be a separate phase now
  • Loading branch information
travi committed Jul 26, 2024
1 parent 969e585 commit 9322e3a
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 40 deletions.
56 changes: 25 additions & 31 deletions src/scaffolder.js
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand All @@ -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');

Expand All @@ -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});
}
23 changes: 14 additions & 9 deletions src/scaffolder.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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);
Expand All @@ -123,10 +124,7 @@ describe('project scaffolder', () => {
...vcs,
projectRoot: projectPath,
description,
visibility,
homepage: undefined,
nextSteps: [...dependencyUpdaterNextSteps],
tags
visibility
}
)
.mockResolvedValue(vcsOriginDetails);
Expand All @@ -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]
});
});

Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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 () => {
Expand Down

0 comments on commit 9322e3a

Please sign in to comment.