chore: Updated changelog generation script
This commit is contained in:
parent
57caee751f
commit
bf730ba8af
143 changed files with 1283 additions and 6905 deletions
|
@ -1,59 +1,49 @@
|
|||
/* eslint-disable no-console */
|
||||
const path = require("path");
|
||||
const fs = require("fs");
|
||||
const fse = require("fs-extra");
|
||||
const glob = require("glob");
|
||||
const yaml = require("js-yaml");
|
||||
const chalk = require("chalk");
|
||||
const handlebars = require("handlebars");
|
||||
const Mustache = require("mustache");
|
||||
const { version } = require("../lerna.json");
|
||||
const capitalize = require("@freesewing/utils/capitalize")
|
||||
const path = require('path')
|
||||
const fs = require('fs')
|
||||
const fse = require('fs-extra')
|
||||
const glob = require('glob')
|
||||
const yaml = require('js-yaml')
|
||||
const chalk = require('chalk')
|
||||
const handlebars = require('handlebars')
|
||||
const Mustache = require('mustache')
|
||||
const { version } = require('../lerna.json')
|
||||
const capitalize = require('@freesewing/utils/capitalize')
|
||||
|
||||
const repoPath = process.cwd();
|
||||
const repoPath = process.cwd()
|
||||
const config = {
|
||||
repoPath,
|
||||
defaults: readConfigFile("defaults.yaml"),
|
||||
descriptions: readConfigFile("descriptions.yaml"),
|
||||
keywords: readConfigFile("keywords.yaml"),
|
||||
badges: readConfigFile("badges.yaml"),
|
||||
scripts: readConfigFile("scripts.yaml"),
|
||||
changelog: readConfigFile("changelog.yaml"),
|
||||
changetypes: [
|
||||
"Added",
|
||||
"Changed",
|
||||
"Deprecated",
|
||||
"Removed",
|
||||
"Fixed",
|
||||
"Security"
|
||||
],
|
||||
dependencies: readConfigFile("dependencies.yaml", { version }),
|
||||
exceptions: readConfigFile("exceptions.yaml"),
|
||||
defaults: readConfigFile('defaults.yaml'),
|
||||
descriptions: readConfigFile('descriptions.yaml'),
|
||||
keywords: readConfigFile('keywords.yaml'),
|
||||
badges: readConfigFile('badges.yaml'),
|
||||
scripts: readConfigFile('scripts.yaml'),
|
||||
changelog: readConfigFile('changelog.yaml'),
|
||||
changetypes: ['Added', 'Changed', 'Deprecated', 'Removed', 'Fixed', 'Security'],
|
||||
dependencies: readConfigFile('dependencies.yaml', { version }),
|
||||
exceptions: readConfigFile('exceptions.yaml'),
|
||||
templates: {
|
||||
pkg: readTemplateFile("package.dflt.json"),
|
||||
rollup: readTemplateFile("rollup.config.dflt.js"),
|
||||
changelog: readTemplateFile("changelog.dflt.md"),
|
||||
readme: readTemplateFile("readme.dflt.md")
|
||||
pkg: readTemplateFile('package.dflt.json'),
|
||||
rollup: readTemplateFile('rollup.config.dflt.js'),
|
||||
changelog: readTemplateFile('changelog.dflt.md'),
|
||||
readme: readTemplateFile('readme.dflt.md')
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
const packages = glob.sync("*", {
|
||||
cwd: path.join(config.repoPath, "packages")
|
||||
});
|
||||
const packages = glob.sync('*', {
|
||||
cwd: path.join(config.repoPath, 'packages')
|
||||
})
|
||||
|
||||
validate(packages, config);
|
||||
reconfigure(packages, config);
|
||||
validate(packages, config)
|
||||
reconfigure(packages, config)
|
||||
|
||||
process.exit();
|
||||
process.exit()
|
||||
|
||||
/**
|
||||
* Reads a template file
|
||||
*/
|
||||
function readTemplateFile(file) {
|
||||
return fs.readFileSync(
|
||||
path.join(repoPath, "config", "templates", file),
|
||||
"utf-8"
|
||||
);
|
||||
return fs.readFileSync(path.join(repoPath, 'config', 'templates', file), 'utf-8')
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -64,25 +54,25 @@ function readExampleFile(file, subdir = false) {
|
|||
subdir
|
||||
? path.join(
|
||||
repoPath,
|
||||
"packages",
|
||||
"create-freesewing-pattern",
|
||||
"template",
|
||||
"default",
|
||||
"example",
|
||||
'packages',
|
||||
'create-freesewing-pattern',
|
||||
'template',
|
||||
'default',
|
||||
'example',
|
||||
file
|
||||
)
|
||||
: path.join(
|
||||
repoPath,
|
||||
"packages",
|
||||
"create-freesewing-pattern",
|
||||
"template",
|
||||
"default",
|
||||
"example",
|
||||
'packages',
|
||||
'create-freesewing-pattern',
|
||||
'template',
|
||||
'default',
|
||||
'example',
|
||||
subdir,
|
||||
file
|
||||
),
|
||||
"utf-8"
|
||||
);
|
||||
'utf-8'
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -91,14 +81,9 @@ function readExampleFile(file, subdir = false) {
|
|||
function readConfigFile(file, replace = false) {
|
||||
if (replace)
|
||||
return yaml.safeLoad(
|
||||
Mustache.render(
|
||||
fs.readFileSync(path.join(repoPath, "config", file), "utf-8"),
|
||||
replace
|
||||
)
|
||||
);
|
||||
return yaml.safeLoad(
|
||||
fs.readFileSync(path.join(repoPath, "config", file), "utf-8")
|
||||
);
|
||||
Mustache.render(fs.readFileSync(path.join(repoPath, 'config', file), 'utf-8'), replace)
|
||||
)
|
||||
return yaml.safeLoad(fs.readFileSync(path.join(repoPath, 'config', file), 'utf-8'))
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -106,17 +91,14 @@ function readConfigFile(file, replace = false) {
|
|||
* Returns its contents if it exists, or an empty string if not
|
||||
*/
|
||||
function readInfoFile(pkg) {
|
||||
let markup = "";
|
||||
let markup = ''
|
||||
try {
|
||||
markup = fs.readFileSync(
|
||||
path.join(repoPath, "packages", pkg, "info.md"),
|
||||
"utf-8"
|
||||
);
|
||||
markup = fs.readFileSync(path.join(repoPath, 'packages', pkg, 'info.md'), 'utf-8')
|
||||
} catch (err) {
|
||||
return "";
|
||||
return ''
|
||||
}
|
||||
|
||||
return markup;
|
||||
return markup
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -127,25 +109,23 @@ function readInfoFile(pkg) {
|
|||
* - other
|
||||
*/
|
||||
function packageType(pkg, config) {
|
||||
if (pkg.substring(0, 7) === "plugin-") return "plugin";
|
||||
if (config.descriptions[pkg].substring(0, 21) === "A FreeSewing pattern ")
|
||||
return "pattern";
|
||||
return "other";
|
||||
if (pkg.substring(0, 7) === 'plugin-') return 'plugin'
|
||||
if (config.descriptions[pkg].substring(0, 21) === 'A FreeSewing pattern ') return 'pattern'
|
||||
return 'other'
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an array of keywords for a package
|
||||
*/
|
||||
function keywords(pkg, config, type) {
|
||||
if (typeof config.keywords[pkg] !== "undefined") return config.keywords[pkg];
|
||||
if (typeof config.keywords[type] !== "undefined")
|
||||
return config.keywords[type];
|
||||
if (typeof config.keywords[pkg] !== 'undefined') return config.keywords[pkg]
|
||||
if (typeof config.keywords[type] !== 'undefined') return config.keywords[type]
|
||||
else {
|
||||
console.log(
|
||||
chalk.redBright.bold("Problem:"),
|
||||
chalk.redBright.bold('Problem:'),
|
||||
chalk.redBright(`No keywords for package ${pkg} which is of type ${type}`)
|
||||
);
|
||||
process.exit();
|
||||
)
|
||||
process.exit()
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -153,30 +133,30 @@ function keywords(pkg, config, type) {
|
|||
* Returns an plain object of scripts for a package
|
||||
*/
|
||||
function scripts(pkg, config, type) {
|
||||
let runScripts = {};
|
||||
let runScripts = {}
|
||||
for (let key of Object.keys(config.scripts._)) {
|
||||
runScripts[key] = Mustache.render(config.scripts._[key], {
|
||||
name: pkg
|
||||
});
|
||||
})
|
||||
}
|
||||
if (typeof config.scripts._types[type] !== "undefined") {
|
||||
if (typeof config.scripts._types[type] !== 'undefined') {
|
||||
for (let key of Object.keys(config.scripts._types[type])) {
|
||||
runScripts[key] = Mustache.render(config.scripts._types[type][key], {
|
||||
name: pkg
|
||||
});
|
||||
})
|
||||
}
|
||||
}
|
||||
if (typeof config.scripts[pkg] !== "undefined") {
|
||||
if (typeof config.scripts[pkg] !== 'undefined') {
|
||||
for (let key of Object.keys(config.scripts[pkg])) {
|
||||
if (config.scripts[pkg][key] === "!") delete runScripts[key];
|
||||
if (config.scripts[pkg][key] === '!') delete runScripts[key]
|
||||
else
|
||||
runScripts[key] = Mustache.render(config.scripts[pkg][key], {
|
||||
name: pkg
|
||||
});
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
return runScripts;
|
||||
return runScripts
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -189,82 +169,78 @@ function scripts(pkg, config, type) {
|
|||
*
|
||||
*/
|
||||
function deps(section, pkg, config, type) {
|
||||
let dependencies = {};
|
||||
let dependencies = {}
|
||||
if (
|
||||
typeof config.dependencies._types[type] !== "undefined" &&
|
||||
typeof config.dependencies._types[type][section] !== "undefined"
|
||||
typeof config.dependencies._types[type] !== 'undefined' &&
|
||||
typeof config.dependencies._types[type][section] !== 'undefined'
|
||||
)
|
||||
dependencies = config.dependencies._types[type][section];
|
||||
if (typeof config.dependencies[pkg] === "undefined") return dependencies;
|
||||
if (typeof config.dependencies[pkg][section] !== "undefined")
|
||||
return { ...dependencies, ...config.dependencies[pkg][section] };
|
||||
dependencies = config.dependencies._types[type][section]
|
||||
if (typeof config.dependencies[pkg] === 'undefined') return dependencies
|
||||
if (typeof config.dependencies[pkg][section] !== 'undefined')
|
||||
return { ...dependencies, ...config.dependencies[pkg][section] }
|
||||
|
||||
return dependencies;
|
||||
return dependencies
|
||||
}
|
||||
|
||||
/**
|
||||
* These merely call deps() for the relevant dependency section
|
||||
*/
|
||||
function dependencies(pkg, config, type) {
|
||||
return deps("_", pkg, config, type);
|
||||
return deps('_', pkg, config, type)
|
||||
}
|
||||
function devDependencies(pkg, config, type) {
|
||||
return deps("dev", pkg, config, type);
|
||||
return deps('dev', pkg, config, type)
|
||||
}
|
||||
function peerDependencies(pkg, config, type) {
|
||||
return deps("peer", pkg, config, type);
|
||||
return deps('peer', pkg, config, type)
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a package.json file for a package
|
||||
*/
|
||||
function packageConfig(pkg, config) {
|
||||
let type = packageType(pkg, config);
|
||||
let pkgConf = {};
|
||||
let type = packageType(pkg, config)
|
||||
let pkgConf = {}
|
||||
// Let's keep these at the top
|
||||
pkgConf.name = fullName(pkg, config);
|
||||
pkgConf.version = version;
|
||||
pkgConf.description = config.descriptions[pkg];
|
||||
pkgConf.name = fullName(pkg, config)
|
||||
pkgConf.version = version
|
||||
pkgConf.description = config.descriptions[pkg]
|
||||
pkgConf = {
|
||||
...pkgConf,
|
||||
...JSON.parse(Mustache.render(config.templates.pkg, { name: pkg }))
|
||||
};
|
||||
pkgConf.keywords = pkgConf.keywords.concat(keywords(pkg, config, type));
|
||||
pkgConf.scripts = scripts(pkg, config, type);
|
||||
pkgConf.dependencies = dependencies(pkg, config, type);
|
||||
pkgConf.devDependencies = devDependencies(pkg, config, type);
|
||||
pkgConf.peerDependencies = peerDependencies(pkg, config, type);
|
||||
if (typeof config.exceptions.packageJson[pkg] !== "undefined") {
|
||||
}
|
||||
pkgConf.keywords = pkgConf.keywords.concat(keywords(pkg, config, type))
|
||||
pkgConf.scripts = scripts(pkg, config, type)
|
||||
pkgConf.dependencies = dependencies(pkg, config, type)
|
||||
pkgConf.devDependencies = devDependencies(pkg, config, type)
|
||||
pkgConf.peerDependencies = peerDependencies(pkg, config, type)
|
||||
if (typeof config.exceptions.packageJson[pkg] !== 'undefined') {
|
||||
pkgConf = {
|
||||
...pkgConf,
|
||||
...config.exceptions.packageJson[pkg]
|
||||
};
|
||||
}
|
||||
for (let key of Object.keys(config.exceptions.packageJson[pkg])) {
|
||||
if (config.exceptions.packageJson[pkg][key] === "!") delete pkgConf[key];
|
||||
if (config.exceptions.packageJson[pkg][key] === '!') delete pkgConf[key]
|
||||
}
|
||||
}
|
||||
|
||||
return pkgConf;
|
||||
return pkgConf
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an string with the markup for badges in the readme file
|
||||
*/
|
||||
function badges(pkg, config) {
|
||||
let markup = "";
|
||||
for (let group of ["_all", "_social"]) {
|
||||
markup += "<p align='center'>";
|
||||
let markup = ''
|
||||
for (let group of ['_all', '_social']) {
|
||||
markup += "<p align='center'>"
|
||||
for (let key of Object.keys(config.badges[group])) {
|
||||
markup += formatBadge(
|
||||
config.badges[group][key],
|
||||
pkg,
|
||||
fullName(pkg, config)
|
||||
);
|
||||
markup += formatBadge(config.badges[group][key], pkg, fullName(pkg, config))
|
||||
}
|
||||
markup += "</p>";
|
||||
markup += '</p>'
|
||||
}
|
||||
|
||||
return markup;
|
||||
return markup
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -276,14 +252,14 @@ function formatBadge(badge, name, fullname) {
|
|||
title="${Mustache.render(badge.alt, { name, fullname })}"
|
||||
><img src="${Mustache.render(badge.img, { name, fullname })}"
|
||||
alt="${Mustache.render(badge.alt, { name, fullname })}"/>
|
||||
</a>`;
|
||||
</a>`
|
||||
}
|
||||
/**
|
||||
* Returns the full (namespaced) name of a package
|
||||
*/
|
||||
function fullName(pkg, config) {
|
||||
if (config.exceptions.noNamespace.indexOf(pkg) !== -1) return pkg;
|
||||
else return `@freesewing/${pkg}`;
|
||||
if (config.exceptions.noNamespace.indexOf(pkg) !== -1) return pkg
|
||||
else return `@freesewing/${pkg}`
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -295,9 +271,9 @@ function readme(pkg, config) {
|
|||
description: config.descriptions[pkg],
|
||||
badges: badges(pkg, config),
|
||||
info: readInfoFile(pkg)
|
||||
});
|
||||
})
|
||||
|
||||
return markup;
|
||||
return markup
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -305,106 +281,114 @@ function readme(pkg, config) {
|
|||
*/
|
||||
function changelog(pkg, config) {
|
||||
let markup = Mustache.render(config.templates.changelog, {
|
||||
fullname: pkg === "global" ? "FreeSewing (global)" : fullName(pkg, config),
|
||||
changelog:
|
||||
pkg === "global" ? globalChangelog(config) : packageChangelog(pkg, config)
|
||||
});
|
||||
fullname: pkg === 'global' ? 'FreeSewing (global)' : fullName(pkg, config),
|
||||
changelog: pkg === 'global' ? globalChangelog(config) : packageChangelog(pkg, config)
|
||||
})
|
||||
|
||||
return markup;
|
||||
return markup
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates the global changelog data
|
||||
*/
|
||||
function globalChangelog(config) {
|
||||
let markup = "";
|
||||
let markup = ''
|
||||
for (let v in config.changelog) {
|
||||
let changes = config.changelog[v];
|
||||
markup += "\n## " + v;
|
||||
if (v !== "Unreleased") markup += " (" + formatDate(changes.date) + ")";
|
||||
markup += "\n\n";
|
||||
let changes = config.changelog[v]
|
||||
markup += '\n## ' + v
|
||||
if (v !== 'Unreleased') markup += ' (' + formatDate(changes.date) + ')'
|
||||
markup += '\n\n'
|
||||
for (let pkg of packages) {
|
||||
let changed = false;
|
||||
let changed = false
|
||||
for (let type of config.changetypes) {
|
||||
if (
|
||||
typeof changes[type] !== "undefined" &&
|
||||
typeof changes[type] !== 'undefined' &&
|
||||
changes[type] !== null &&
|
||||
typeof changes[type][pkg] !== "undefined" &&
|
||||
typeof changes[type][pkg] !== 'undefined' &&
|
||||
changes[type][pkg] !== null
|
||||
) {
|
||||
if (!changed) changed = "";
|
||||
changed += "\n#### " + type + "\n\n";
|
||||
for (let change of changes[type][pkg])
|
||||
changed += " - " + change + "\n";
|
||||
if (!changed) changed = ''
|
||||
changed += '\n#### ' + type + '\n\n'
|
||||
for (let change of changes[type][pkg]) changed += ' - ' + change + '\n'
|
||||
}
|
||||
}
|
||||
if (changed) markup += "### " + pkg + "\n" + changed + "\n";
|
||||
if (changed) markup += '### ' + pkg + '\n' + changed + '\n'
|
||||
}
|
||||
}
|
||||
|
||||
return markup;
|
||||
return markup
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates the changelog data for a package
|
||||
*/
|
||||
function packageChangelog(pkg, config) {
|
||||
let markup = "";
|
||||
let log = {}
|
||||
let version
|
||||
let markup = ''
|
||||
for (let v in config.changelog) {
|
||||
let changes = config.changelog[v];
|
||||
let changed = false;
|
||||
version = v
|
||||
let changes = config.changelog[v]
|
||||
let changed = false
|
||||
for (let type of config.changetypes) {
|
||||
if (
|
||||
typeof changes[type] !== "undefined" &&
|
||||
typeof changes[type] !== 'undefined' &&
|
||||
changes[type] !== null &&
|
||||
typeof changes[type][pkg] !== "undefined" &&
|
||||
typeof changes[type][pkg] !== 'undefined' &&
|
||||
changes[type][pkg] !== null
|
||||
) {
|
||||
if (!changed) changed = "";
|
||||
changed += "\n### " + type + "\n\n";
|
||||
for (let change of changes[type][pkg]) changed += " - " + change + "\n";
|
||||
if (!changed) changed = ''
|
||||
changed += '\n### ' + type + '\n\n'
|
||||
for (let change of changes[type][pkg]) changed += ' - ' + change + '\n'
|
||||
}
|
||||
}
|
||||
markup += "## " + v;
|
||||
if (v !== "Unreleased") markup += " (" + formatDate(changes.date) + ")";
|
||||
markup += "\n";
|
||||
markup += changed
|
||||
? changed
|
||||
: `\n**Note:** Version bump only for package ${pkg}\n\n\n`;
|
||||
if (v !== 'Unreleased' && changed) {
|
||||
markup += '\n## ' + v
|
||||
markup += ' (' + formatDate(changes.date) + ')'
|
||||
markup += '\n'
|
||||
markup += changed
|
||||
}
|
||||
}
|
||||
|
||||
return markup;
|
||||
markup += '\n\nThis is the **initial release**, and the start of this change log.\n'
|
||||
if (version === '2.0.0')
|
||||
markup += `
|
||||
> Prior to version 2, FreeSewing was not a JavaScript project.
|
||||
> As such, that history is out of scope for this change log.
|
||||
`
|
||||
|
||||
return markup
|
||||
}
|
||||
|
||||
function formatDate(date) {
|
||||
let d = new Date(date),
|
||||
month = "" + (d.getMonth() + 1),
|
||||
day = "" + d.getDate(),
|
||||
year = d.getFullYear();
|
||||
month = '' + (d.getMonth() + 1),
|
||||
day = '' + d.getDate(),
|
||||
year = d.getFullYear()
|
||||
|
||||
if (month.length < 2) month = "0" + month;
|
||||
if (day.length < 2) day = "0" + day;
|
||||
if (month.length < 2) month = '0' + month
|
||||
if (day.length < 2) day = '0' + day
|
||||
|
||||
return [year, month, day].join("-");
|
||||
return [year, month, day].join('-')
|
||||
}
|
||||
|
||||
/**
|
||||
* Make sure we have (at least) a description for each package
|
||||
*/
|
||||
function validate(pkgs, config) {
|
||||
console.log(chalk.blueBright("Validating package descriptions"));
|
||||
console.log(chalk.blueBright('Validating package descriptions'))
|
||||
for (let pkg of pkgs) {
|
||||
if (typeof config.descriptions[pkg] !== "string") {
|
||||
if (typeof config.descriptions[pkg] !== 'string') {
|
||||
console.log(
|
||||
chalk.redBright.bold("Problem:"),
|
||||
chalk.redBright.bold('Problem:'),
|
||||
chalk.redBright(`No description for package ${pkg}`)
|
||||
);
|
||||
process.exit();
|
||||
)
|
||||
process.exit()
|
||||
}
|
||||
}
|
||||
console.log(chalk.yellowBright.bold("Looks good"));
|
||||
console.log(chalk.yellowBright.bold('Looks good'))
|
||||
|
||||
return true;
|
||||
return true
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -415,50 +399,41 @@ function configurePatternExample(pkg, config) {
|
|||
// Create example dir structure
|
||||
let source = path.join(
|
||||
config.repoPath,
|
||||
"packages",
|
||||
"create-freesewing-pattern",
|
||||
"template",
|
||||
"default",
|
||||
"example"
|
||||
);
|
||||
let dest = path.join(config.repoPath, "packages", pkg, "example");
|
||||
fse.ensureDirSync(path.join(dest, "src"));
|
||||
fse.ensureDirSync(path.join(dest, "public"));
|
||||
'packages',
|
||||
'create-freesewing-pattern',
|
||||
'template',
|
||||
'default',
|
||||
'example'
|
||||
)
|
||||
let dest = path.join(config.repoPath, 'packages', pkg, 'example')
|
||||
fse.ensureDirSync(path.join(dest, 'src'))
|
||||
fse.ensureDirSync(path.join(dest, 'public'))
|
||||
// Copy files
|
||||
for (let file of [".babelrc", ".env"])
|
||||
fs.copyFileSync(path.join(source, file), path.join(dest, file));
|
||||
for (let file of ["index.js", "serviceWorker.js"])
|
||||
fs.copyFileSync(
|
||||
path.join(source, "src", file),
|
||||
path.join(dest, "src", file)
|
||||
);
|
||||
for (let file of ['.babelrc', '.env'])
|
||||
fs.copyFileSync(path.join(source, file), path.join(dest, file))
|
||||
for (let file of ['index.js', 'serviceWorker.js'])
|
||||
fs.copyFileSync(path.join(source, 'src', file), path.join(dest, 'src', file))
|
||||
fs.copyFileSync(
|
||||
path.join(source, "public", "favicon.ico"),
|
||||
path.join(dest, "public", "favicon.ico")
|
||||
);
|
||||
path.join(source, 'public', 'favicon.ico'),
|
||||
path.join(dest, 'public', 'favicon.ico')
|
||||
)
|
||||
// Write templates
|
||||
let replace = {
|
||||
name: pkg,
|
||||
author: "freesewing",
|
||||
author: 'freesewing',
|
||||
yarn: true,
|
||||
language: "en"
|
||||
};
|
||||
for (let file of ["package.json", "README.md"]) {
|
||||
let template = handlebars.compile(
|
||||
fs.readFileSync(path.join(source, file), "utf-8")
|
||||
);
|
||||
fs.writeFileSync(path.join(dest, file), template(replace));
|
||||
language: 'en'
|
||||
}
|
||||
for (let file of ["index.html", "manifest.json"]) {
|
||||
let template = handlebars.compile(
|
||||
fs.readFileSync(path.join(source, "public", file), "utf-8")
|
||||
);
|
||||
fs.writeFileSync(path.join(dest, "public", file), template(replace));
|
||||
for (let file of ['package.json', 'README.md']) {
|
||||
let template = handlebars.compile(fs.readFileSync(path.join(source, file), 'utf-8'))
|
||||
fs.writeFileSync(path.join(dest, file), template(replace))
|
||||
}
|
||||
let template = handlebars.compile(
|
||||
fs.readFileSync(path.join(source, "src", "App.js"), "utf-8")
|
||||
);
|
||||
fs.writeFileSync(path.join(dest, "src", "App.js"), template(replace));
|
||||
for (let file of ['index.html', 'manifest.json']) {
|
||||
let template = handlebars.compile(fs.readFileSync(path.join(source, 'public', file), 'utf-8'))
|
||||
fs.writeFileSync(path.join(dest, 'public', file), template(replace))
|
||||
}
|
||||
let template = handlebars.compile(fs.readFileSync(path.join(source, 'src', 'App.js'), 'utf-8'))
|
||||
fs.writeFileSync(path.join(dest, 'src', 'App.js'), template(replace))
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -466,50 +441,33 @@ function configurePatternExample(pkg, config) {
|
|||
*/
|
||||
function configurePatternUnitTests(pkg, config) {
|
||||
// Create tests directory
|
||||
let dest = path.join(config.repoPath, "packages", pkg, "tests");
|
||||
let dest = path.join(config.repoPath, 'packages', pkg, 'tests')
|
||||
fse.ensureDirSync(dest)
|
||||
let source = path.join(
|
||||
config.repoPath,
|
||||
"config",
|
||||
"templates",
|
||||
"tests",
|
||||
"patterns"
|
||||
);
|
||||
let source = path.join(config.repoPath, 'config', 'templates', 'tests', 'patterns')
|
||||
// Write templates
|
||||
let replace = {
|
||||
pattern: pkg,
|
||||
Pattern: capitalize(pkg),
|
||||
peerdeps: Object.keys(peerDependencies(pkg, config, 'pattern')).join(' ')
|
||||
};
|
||||
}
|
||||
|
||||
for (let file of ["shared.test.js"]) {
|
||||
for (let file of ['shared.test.js']) {
|
||||
fs.writeFileSync(
|
||||
path.join(dest, file),
|
||||
Mustache.render(
|
||||
fs.readFileSync(path.join(source, file+'.template'), "utf-8"),
|
||||
replace
|
||||
)
|
||||
);
|
||||
Mustache.render(fs.readFileSync(path.join(source, file + '.template'), 'utf-8'), replace)
|
||||
)
|
||||
}
|
||||
// Add workflow file for Github actions
|
||||
fs.writeFileSync(
|
||||
path.join(
|
||||
config.repoPath,
|
||||
'.github',
|
||||
'workflows',
|
||||
`tests.${pkg}.yml`
|
||||
),
|
||||
path.join(config.repoPath, '.github', 'workflows', `tests.${pkg}.yml`),
|
||||
Mustache.render(
|
||||
fs.readFileSync(path.join(
|
||||
config.repoPath,
|
||||
'config',
|
||||
'templates',
|
||||
'workflows',
|
||||
'tests.pattern.yml'
|
||||
), "utf-8"),
|
||||
fs.readFileSync(
|
||||
path.join(config.repoPath, 'config', 'templates', 'workflows', 'tests.pattern.yml'),
|
||||
'utf-8'
|
||||
),
|
||||
replace
|
||||
)
|
||||
);
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -521,34 +479,28 @@ function configurePatternUnitTests(pkg, config) {
|
|||
*/
|
||||
function reconfigure(pkgs, config) {
|
||||
for (let pkg of pkgs) {
|
||||
console.log(chalk.blueBright(`Reconfiguring ${pkg}`));
|
||||
let pkgConfig = packageConfig(pkg, config);
|
||||
console.log(chalk.blueBright(`Reconfiguring ${pkg}`))
|
||||
let pkgConfig = packageConfig(pkg, config)
|
||||
fs.writeFileSync(
|
||||
path.join(config.repoPath, "packages", pkg, "package.json"),
|
||||
JSON.stringify(pkgConfig, null, 2) + "\n"
|
||||
);
|
||||
path.join(config.repoPath, 'packages', pkg, 'package.json'),
|
||||
JSON.stringify(pkgConfig, null, 2) + '\n'
|
||||
)
|
||||
if (config.exceptions.customRollup.indexOf(pkg) === -1) {
|
||||
fs.writeFileSync(
|
||||
path.join(config.repoPath, "packages", pkg, "rollup.config.js"),
|
||||
path.join(config.repoPath, 'packages', pkg, 'rollup.config.js'),
|
||||
config.templates.rollup
|
||||
);
|
||||
)
|
||||
}
|
||||
fs.writeFileSync(path.join(config.repoPath, 'packages', pkg, 'README.md'), readme(pkg, config))
|
||||
fs.writeFileSync(
|
||||
path.join(config.repoPath, "packages", pkg, "README.md"),
|
||||
readme(pkg, config)
|
||||
);
|
||||
fs.writeFileSync(
|
||||
path.join(config.repoPath, "packages", pkg, "CHANGELOG.md"),
|
||||
path.join(config.repoPath, 'packages', pkg, 'CHANGELOG.md'),
|
||||
changelog(pkg, config)
|
||||
);
|
||||
if (packageType(pkg, config) === "pattern") {
|
||||
configurePatternExample(pkg, config);
|
||||
configurePatternUnitTests(pkg, config);
|
||||
)
|
||||
if (packageType(pkg, config) === 'pattern') {
|
||||
configurePatternExample(pkg, config)
|
||||
configurePatternUnitTests(pkg, config)
|
||||
}
|
||||
}
|
||||
fs.writeFileSync(
|
||||
path.join(config.repoPath, "CHANGELOG.md"),
|
||||
changelog("global", config)
|
||||
);
|
||||
console.log(chalk.yellowBright.bold("All done."));
|
||||
fs.writeFileSync(path.join(config.repoPath, 'CHANGELOG.md'), changelog('global', config))
|
||||
console.log(chalk.yellowBright.bold('All done.'))
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue