mirror of
https://github.com/matt-fidd/stratos.git
synced 2026-01-02 00:59:29 +00:00
Added gulp tasks for cleaning config dir, cloning sample ones and allowing user edits
This commit is contained in:
94
gulpfile.js
94
gulpfile.js
@@ -1,14 +1,18 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
// Import required modules
|
// Import required modules
|
||||||
|
const { dest, parallel, series, src, watch } = require('gulp');
|
||||||
const del = require('del');
|
const del = require('del');
|
||||||
const { dest, series, src, watch } = require('gulp');
|
const fs = require('fs');
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
const postcss = require('gulp-postcss');
|
const postcss = require('gulp-postcss');
|
||||||
|
const prompt = require('prompt-sync')({ sigint: true });
|
||||||
|
const rename = require('gulp-rename');
|
||||||
const sass = require('gulp-sass')(require('sass'));
|
const sass = require('gulp-sass')(require('sass'));
|
||||||
|
|
||||||
const dbInit = require(path.join(__dirname, 'utility', 'db', 'dbInit'));
|
const dbInit = require(path.join(__dirname, 'utility', 'db', 'dbInit'));
|
||||||
const dbTestData = require(path.join(__dirname, 'utility', 'db', 'dbTestData'));
|
const dbTestData = require(path.join(__dirname, 'utility', 'db', 'dbTestData'));
|
||||||
|
const importJSON = require(path.join(__dirname, 'lib', 'importJSON'));
|
||||||
|
|
||||||
// Set src and destination paths for css compilation
|
// Set src and destination paths for css compilation
|
||||||
const cssPaths = {
|
const cssPaths = {
|
||||||
@@ -44,6 +48,83 @@ function cleanStyles() {
|
|||||||
return del([ cssPaths.dest ]);
|
return del([ cssPaths.dest ]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Clean config dir of all non-sample files
|
||||||
|
function cleanConfig() {
|
||||||
|
const configFiles =
|
||||||
|
fs.readdirSync(path.join(__dirname, 'config'))
|
||||||
|
.filter(file => !file.endsWith('.sample.json'))
|
||||||
|
.map(file => `./config/${file}`);
|
||||||
|
|
||||||
|
return del(configFiles);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Copy all sample files to their non-sample counterpart
|
||||||
|
function copyConfig() {
|
||||||
|
return src('config/*.sample.json')
|
||||||
|
.pipe(rename(path => {
|
||||||
|
path.basename = path.basename.split('.sample')[0];
|
||||||
|
}))
|
||||||
|
.pipe(dest('config/'));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Allow user to edit config files
|
||||||
|
function setConfig(cb) {
|
||||||
|
const writeConfig = (file, contents) => {
|
||||||
|
console.log(`Writing config to ${file}.json`);
|
||||||
|
|
||||||
|
fs.writeFileSync(
|
||||||
|
path.join(__dirname, 'config', `${file}.json`),
|
||||||
|
JSON.stringify(contents)
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
const configFiles =
|
||||||
|
fs.readdirSync(path.join(__dirname, 'config'))
|
||||||
|
.filter(file => !file.endsWith('.sample.json'))
|
||||||
|
.map(file => file.split('.json')[0]);
|
||||||
|
|
||||||
|
console.log('\nEditing config files');
|
||||||
|
console.log('\nWhen prompted for a new value, press enter to keep ' +
|
||||||
|
'the existing one');
|
||||||
|
|
||||||
|
for (const file of configFiles) {
|
||||||
|
const contents = importJSON(file);
|
||||||
|
|
||||||
|
console.log(`\nConsidering ${file}.json`);
|
||||||
|
console.log('Current contents:');
|
||||||
|
console.log(contents);
|
||||||
|
|
||||||
|
const answer =
|
||||||
|
prompt('Would you like to edit the config? (y/N) ');
|
||||||
|
|
||||||
|
if (answer !== 'y')
|
||||||
|
continue;
|
||||||
|
|
||||||
|
for (const [ k, v ] of Object.entries(contents)) {
|
||||||
|
let value =
|
||||||
|
prompt(` - ${k} (${v}): `).trim();
|
||||||
|
|
||||||
|
if (value.length === 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
switch (typeof v) {
|
||||||
|
case 'number':
|
||||||
|
value = Number(value);
|
||||||
|
break;
|
||||||
|
case 'boolean':
|
||||||
|
value = value === 'true';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
contents[k] = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
writeConfig(file, contents);
|
||||||
|
}
|
||||||
|
|
||||||
|
cb();
|
||||||
|
}
|
||||||
|
|
||||||
// Task to build stylesheet from start to finish
|
// Task to build stylesheet from start to finish
|
||||||
exports.styles = series(cleanStyles, compileStyles);
|
exports.styles = series(cleanStyles, compileStyles);
|
||||||
|
|
||||||
@@ -57,3 +138,14 @@ exports.dbInit = dbInit;
|
|||||||
|
|
||||||
// Clean all data and insert test data into database
|
// Clean all data and insert test data into database
|
||||||
exports.dbTestData = series(dbTestData.clean, dbTestData.insert);
|
exports.dbTestData = series(dbTestData.clean, dbTestData.insert);
|
||||||
|
|
||||||
|
// Build stylesheet, and generate config files
|
||||||
|
exports.default =
|
||||||
|
parallel(
|
||||||
|
exports.styles,
|
||||||
|
series(
|
||||||
|
cleanConfig,
|
||||||
|
copyConfig,
|
||||||
|
setConfig
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user