Skip to content

Commit

Permalink
fix(ci): removed ci scaffolding
Browse files Browse the repository at this point in the history
in favor of scaffolding ci details in the language scaffolder

BREAKING CHANGE: the ci scaffolding has been moved to the language scaffolder
  • Loading branch information
travi committed Jun 5, 2018
1 parent 736628d commit efa9564
Show file tree
Hide file tree
Showing 7 changed files with 22 additions and 146 deletions.
24 changes: 0 additions & 24 deletions src/ci/travis.js

This file was deleted.

6 changes: 0 additions & 6 deletions src/prompts.js
Original file line number Diff line number Diff line change
Expand Up @@ -93,12 +93,6 @@ export function prompt(projectRoot, languages, overrides) {
type: 'list',
message: 'What type of project is this?',
choices: [...Object.keys(languages), 'Other']
},
{
name: questionNames.CI,
type: 'list',
message: 'Which continuous integration service will be used?',
choices: ['Travis', 'GitLab CI']
}
]);
}
10 changes: 2 additions & 8 deletions src/scaffolder.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import scaffoldReadme from './readme';
import scaffoldGit from './vcs/git';
import scaffoldLicense from './license';
import scaffoldVcsHost from './vcs/host';
import scaffoldTravis from './ci/travis';
import exec from '../third-party-wrappers/exec-as-promised';
import {prompt, questionNames} from './prompts';
import {validate} from './options-validator';
Expand All @@ -21,25 +20,20 @@ export async function scaffold(options) {
const chosenLicense = answers[questionNames.LICENSE];
const visibility = answers[questionNames.VISIBILITY];
const description = answers[questionNames.DESCRIPTION];
const ciService = answers[questionNames.CI];
const vcs = {host: answers[questionNames.REPO_HOST], owner: answers[questionNames.REPO_OWNER], name: projectName};
const [license, ci, language] = await Promise.all([
const [license, language] = await Promise.all([
scaffoldLicense({
projectRoot,
license: chosenLicense,
copyright: {year: answers[questionNames.COPYRIGHT_YEAR], holder: answers[questionNames.COPYRIGHT_HOLDER]},
vcs
}),
('Travis' === ciService)
? scaffoldTravis({projectRoot, projectType, vcs, visibility})
: Promise.resolve({}),
scaffoldLanguage(languages, projectType, {
projectRoot,
projectName,
vcs,
visibility,
license: chosenLicense || 'UNLICENSED',
ci: ciService,
description
})
]);
Expand All @@ -51,7 +45,7 @@ export async function scaffold(options) {
description,
badges: {
consumer: {...language && language.badges.consumer, ...license.badge && {license: license.badge}},
status: {...ci.badge && {ci: ci.badge}},
status: {...language && language.badges.status},
contribution: {
...language && language.badges.contribution,
...'Public' === visibility && {
Expand Down
58 changes: 0 additions & 58 deletions test/unit/ci/travis-test.js

This file was deleted.

2 changes: 1 addition & 1 deletion test/unit/language-scaffolder-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ suite('language scaffolder', () => {
return assert.becomes(scaffold(scaffolders, chosenLanguage, options), scaffolderResult);
});

test('that that chosing a language without a defined scaffolder does not result in an error', () => scaffold(
test('that that choosing a language without a defined scaffolder does not result in an error', () => scaffold(
any.simpleObject(),
any.word(),
any.simpleObject()
Expand Down
6 changes: 0 additions & 6 deletions test/unit/prompts-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -101,12 +101,6 @@ suite('project scaffolder prompts', () => {
type: 'list',
message: 'What type of project is this?',
choices: [...Object.keys(languages), 'Other']
},
{
name: questionNames.CI,
type: 'list',
message: 'Which continuous integration service will be used?',
choices: ['Travis', 'GitLab CI']
}
]
));
Expand Down
62 changes: 19 additions & 43 deletions test/unit/scaffolder-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import * as readmeScaffolder from '../../src/readme';
import * as gitScaffolder from '../../src/vcs/git';
import * as vcsHostScaffolder from '../../src/vcs/host';
import * as licenseScaffolder from '../../src/license';
import * as travisScaffolder from '../../src/ci/travis';
import * as languageScaffolder from '../../src/language-scaffolder';
import * as exec from '../../third-party-wrappers/exec-as-promised';
import * as prompts from '../../src/prompts';
Expand Down Expand Up @@ -39,26 +38,25 @@ suite('project scaffolder', () => {
sandbox.stub(gitScaffolder, 'default');
sandbox.stub(vcsHostScaffolder, 'default');
sandbox.stub(licenseScaffolder, 'default');
sandbox.stub(travisScaffolder, 'default');
sandbox.stub(languageScaffolder, 'scaffold');
sandbox.stub(fs, 'copyFile');
sandbox.stub(exec, 'default');

process.cwd.returns(projectPath);
fs.copyFile.resolves();
licenseScaffolder.default.resolves({});
travisScaffolder.default.resolves({});
});

teardown(() => sandbox.restore());

test('that project files are generated', () => {
const travisBadge = any.url();
const ciBadge = any.url();
const year = any.word();
const holder = any.sentence();
const copyright = {year, holder};
const visibility = any.word();
const overrides = any.simpleObject();
const vcsIgnore = any.simpleObject();
optionsValidator.validate.withArgs(options).returns({languages: scaffolders, overrides});
prompts.prompt.withArgs(projectPath, scaffolders, overrides).resolves({
[prompts.questionNames.PROJECT_NAME]: projectName,
Expand All @@ -79,19 +77,17 @@ suite('project scaffolder', () => {
.withArgs({projectRoot: projectPath, license, copyright, vcs})
.resolves({badge: licenseBadge});
vcsHostScaffolder.default.withArgs({host: repoHost, projectRoot: projectPath, projectType, description}).resolves();
travisScaffolder.default
.withArgs({projectRoot: projectPath, projectType, vcs, visibility})
.resolves({badge: travisBadge});
languageScaffolder.scaffold.resolves({badges: {status: {ci: ciBadge}}, vcsIgnore});

return scaffold(options).then(() => {
assert.calledWith(gitScaffolder.default, {projectRoot: projectPath});
assert.calledWith(gitScaffolder.default, {projectRoot: projectPath, ignore: vcsIgnore});
assert.calledWith(
readmeScaffolder.default,
{
projectName,
projectRoot: projectPath,
description,
badges: {consumer: {license: licenseBadge}, status: {ci: travisBadge}, contribution: {}}
badges: {consumer: {license: licenseBadge}, status: {ci: ciBadge}, contribution: {}}
}
);
assert.calledWith(
Expand All @@ -117,42 +113,18 @@ suite('project scaffolder', () => {
return scaffold(emptyOptions);
});

test('that the travis scaffolder is not run if travis was not chosen as the ci service', () => {
optionsValidator.validate.withArgs(options).returns({});
prompts.prompt.resolves({
[prompts.questionNames.PROJECT_NAME]: projectName,
[prompts.questionNames.PROJECT_TYPE]: projectType,
[prompts.questionNames.GIT_REPO]: true,
[prompts.questionNames.LICENSE]: license,
[prompts.questionNames.DESCRIPTION]: description,
[prompts.questionNames.CI]: any.word()
});
licenseScaffolder.default.resolves({badge: licenseBadge});

return scaffold(options).then(() => {
assert.notCalled(travisScaffolder.default);
assert.calledWith(
readmeScaffolder.default,
{
projectName,
projectRoot: projectPath,
description,
badges: {consumer: {license: licenseBadge}, status: {}, contribution: {}}
}
);
});
});

test('that the PRs-welcome badge is included for public projects', () => {
optionsValidator.validate.withArgs(options).returns({});
prompts.prompt.resolves({
[prompts.questionNames.PROJECT_NAME]: projectName,
[prompts.questionNames.LICENSE]: license,
[prompts.questionNames.GIT_REPO]: true,
[prompts.questionNames.DESCRIPTION]: description,
[prompts.questionNames.VISIBILITY]: 'Public'
});

return scaffold(options).then(() => {
assert.calledWith(gitScaffolder.default, {projectRoot: projectPath});
assert.calledWith(
readmeScaffolder.default,
{
Expand Down Expand Up @@ -205,7 +177,7 @@ suite('project scaffolder', () => {
return scaffold(options).then(() => assert.notCalled(gitScaffolder.default));
});

test('that the javascript project scaffolder is run for a js project', () => {
test('that the language details get scaffolded', () => {
const visibility = any.boolean();
const ignore = any.simpleObject();
const javascriptProjectType = 'JavaScript';
Expand All @@ -222,8 +194,9 @@ suite('project scaffolder', () => {
[prompts.questionNames.CI]: ci,
[prompts.questionNames.DESCRIPTION]: description
});
const jsConsumerBadges = any.simpleObject();
const jsContibutionBadges = any.simpleObject();
const languageConsumerBadges = any.simpleObject();
const languageContributionBadges = any.simpleObject();
const languageStatusBadges = any.simpleObject();
const verificationCommand = any.string();
languageScaffolder.scaffold
.withArgs(scaffolders, javascriptProjectType, {
Expand All @@ -232,12 +205,15 @@ suite('project scaffolder', () => {
visibility,
license,
vcs,
ci,
description
})
.resolves({
vcsIgnore: ignore,
badges: {consumer: jsConsumerBadges, contribution: jsContibutionBadges},
badges: {
consumer: languageConsumerBadges,
contribution: languageContributionBadges,
status: languageStatusBadges
},
verificationCommand,
homepage
});
Expand All @@ -249,9 +225,9 @@ suite('project scaffolder', () => {
readmeScaffolder.default,
sinon.match({
badges: {
consumer: {...jsConsumerBadges, license: undefined},
status: {ci: undefined},
contribution: jsContibutionBadges
consumer: {...languageConsumerBadges, license: undefined},
status: languageStatusBadges,
contribution: languageContributionBadges
}
})
);
Expand Down

0 comments on commit efa9564

Please sign in to comment.