This commit is contained in:
Niels Nübel
2020-12-04 11:11:35 +01:00
commit 3d59b14405
114 changed files with 72924 additions and 0 deletions
+83
View File
@@ -0,0 +1,83 @@
/*
* @title Package Files
* @description A task to copy images
*/
// Dependencies
import fs from 'fs'
import archiver from 'archiver'
// Config
import { config, pjson } from '../config';
// Task
export function buildArchives(cb) {
const builder = async () => {
for (const archivesetup of config.archiver) {
await build(archivesetup)
};
};
builder().then(() => {
cb()
});
}
const build = archivesetup => {
return new Promise((resolve, reject) => {
if (!fs.existsSync(archivesetup.destination)){
fs.mkdirSync(archivesetup.destination, { recursive: true });
}
let finisher = 0;
let forEach = archivesetup.types.forEach( function(item) {
let extensionname = archivesetup.destination + archivesetup.name + item.extension
if (archivesetup.suffixversion) {
extensionname = archivesetup.destination + archivesetup.name + '_' + pjson.version + item.extension;
}
let output = fs.createWriteStream(extensionname);
const archive = archiver((item.type).toString(), item.options);
output.on('close', function() {
finisher++;
console.log(archive.pointer() + ' total bytes');
console.log('archiver has been finalized and the output file ('+archivesetup.name+') descriptor has closed.');
if(finisher == archivesetup.types.length) {
resolve()
}
});
// This event is fired when the data source is drained no matter what was the data source.
// It is not part of this library but rather from the NodeJS Stream API.
// @see: https://nodejs.org/api/stream.html#stream_event_end
output.on('end', function() {
console.log('Data has been drained');
});
// good practice to catch warnings (ie stat failures and other non-blocking errors)
archive.on('warning', function(err) {
if (err.code === 'ENOENT') {
// log warning
} else {
// throw error
throw err;
}
});
archive.on('error', function(err) {
throw err;
});
archive.pipe(output);
archivesetup.folders.forEach(function (folder) {
archive.directory(folder, false);
})
archive.finalize();
});
});
}
+15
View File
@@ -0,0 +1,15 @@
/**
* Automatic Release
*
* @description: Deploy Task for an automated Build Process
*/
import { series } from 'gulp'
import { copyBoilerplate } from './copy-boilerplate'
import { cleanBoilerplate } from './clean-boilerplate';
export const boilerplate = series(
cleanBoilerplate,
copyBoilerplate
);
+13
View File
@@ -0,0 +1,13 @@
/**
* Automatic Deploy
*
* @description: Deploy Task for an automated Build Process
*/
import { series } from 'gulp'
import { copy } from './copy'
export const build = series(
copy
);
@@ -0,0 +1,23 @@
/*
* @title Copy
* @description A task to copy files to the output directory
*/
// Dependencies
import { src } from 'gulp';
import mergeStream from 'merge-stream';
import plumber from "gulp-plumber";
import errorHandler from "../util/errorHandler";
import clean from "gulp-clean";
// Config
import { pjson } from '../config';
// Task
export function cleanBoilerplate() {
return mergeStream(pjson.boilerplate.files.map(function(item) {
return src(item.dest, {allowEmpty: true})
.pipe(plumber({errorHandler}))
.pipe(clean({force: true}))
}))
}
+41
View File
@@ -0,0 +1,41 @@
/*
* @title Scripts
* @description A task to concatenate and compress js files via webpack
*/
// Dependencies
import { src, series } from 'gulp';
import plumber from 'gulp-plumber';
import clean from 'gulp-clean';
import errorHandler from '../util/errorHandler.js';
// Config
import { config } from '../config';
// Task
export function deleteReleasefilesFolder() {
return src(config.paths.cleaner.releasefiles, {allowEmpty: true})
.pipe(plumber({errorHandler}))
.pipe(clean({force: true}))
}
export function deleteSourcefilesFolder() {
return src(config.paths.cleaner.sourcefiles, {allowEmpty: true})
.pipe(plumber({errorHandler}))
.pipe(clean({force: true}))
}
export function deleteArchivesFolder() {
return src(config.paths.cleaner.archives, {allowEmpty: true})
.pipe(plumber({errorHandler}))
.pipe(clean({force: true}))
}
export function deletePackageFolder() {
return src(config.paths.cleaner.packages, {allowEmpty: true})
.pipe(plumber({errorHandler}))
.pipe(clean({force: true}))
}
export const cleaner = series(deleteReleasefilesFolder, deleteSourcefilesFolder, deleteArchivesFolder, deletePackageFolder);
@@ -0,0 +1,52 @@
/*
* @title Package Files
* @description A task to copy images
*/
// Dependencies
import {src, dest, series} from 'gulp';
import plumber from 'gulp-plumber';
import changed from 'gulp-changed';
import rename from 'gulp-rename';
import mergeStream from 'merge-stream'
import errorHandler from '../util/errorHandler.js';
import replaceStrings from '../util/replaceStrings.js';
// Config
import { isProd, pjson } from '../config';
import gulpif from "gulp-if";
// Task
function cleancopy() {
return mergeStream(pjson.boilerplate.files.map(function(item) {
return src(item.src)
.pipe(rename(function (path) {
path.dirname = path.dirname.replace(/joomlaboilerplate/g, pjson.casesensitive.joomlaboilerplate);
path.basename = path.basename.replace(/joomlaboilerplate/g, pjson.casesensitive.joomlaboilerplate);
}))
.pipe(plumber({errorHandler}))
.pipe(gulpif(!isProd, changed(item.dest)))
.pipe(dest(item.dest.replace(/joomlaboilerplate/g, pjson.casesensitive.joomlaboilerplate)))
}))
}
function replacecopy() {
return mergeStream(pjson.boilerplate.files.map(function(item) {
return src(item.replacesrc)
.pipe(rename(function (path) {
path.dirname = path.dirname.replace(/joomlaboilerplate/g, pjson.casesensitive.joomlaboilerplate);
path.basename = path.basename.replace(/joomlaboilerplate/g, pjson.casesensitive.joomlaboilerplate);
}))
.pipe(replaceStrings(pjson.casesensitive))
.pipe(plumber({errorHandler}))
.pipe(gulpif(!isProd, changed(item.dest)))
.pipe(dest(item.dest.replace(/joomlaboilerplate/g, pjson.casesensitive.joomlaboilerplate)))
}))
}
export const copyBoilerplate = series(
cleancopy,
replacecopy
);
@@ -0,0 +1,25 @@
/*
* @title Package Files
* @description A task to copy images
*/
// Dependencies
import { src, dest } from 'gulp';
import plumber from 'gulp-plumber';
import changed from 'gulp-changed';
import mergeStream from 'merge-stream'
import errorHandler from '../util/errorHandler.js';
// Config
import {config, isProd} from '../config';
import gulpif from "gulp-if";
// Task
export function copyPackageFiles() {
return mergeStream(config.packagefiles.map(function(item) {
return src([item.src])
.pipe(plumber({errorHandler}))
.pipe(gulpif(!isProd, changed(item.dest)))
.pipe(dest(item.dest))
}))
}
+33
View File
@@ -0,0 +1,33 @@
/*
* @title Copy
* @description A task to copy files to the output directory
*/
// Dependencies
import {src, dest, series} from 'gulp';
import changed from 'gulp-changed';
import replacestrings from '../util/replaceStrings.js';
import gulpif from 'gulp-if';
// Config
import {config, isProd, stringsreplace} from '../config';
function cleancopy() {
return src(config.paths.copyrelease.src)
.pipe(gulpif(!isProd, changed(config.paths.copyrelease.dest)))
.pipe(dest(config.paths.copyrelease.dest));
}
function replacecopy() {
return src(config.paths.copyrelease.replacesrc)
.pipe(replacestrings(stringsreplace))
.pipe(gulpif(!isProd, changed(config.paths.copyrelease.dest)))
.pipe(dest(config.paths.copyrelease.dest));
}
export const copyRelease = series(
cleancopy,
replacecopy
);
+33
View File
@@ -0,0 +1,33 @@
/*
* @title Copy
* @description A task to copy files to the output directory
*/
// Dependencies
import {src, dest, series} from 'gulp';
import changed from 'gulp-changed';
import replacestrings from '../util/replaceStrings.js';
import gulpif from 'gulp-if';
// Config
import {config, isProd, stringsreplace} from '../config';
function cleancopy() {
return src(config.paths.copy.src)
.pipe(gulpif(!isProd, changed(config.paths.copy.dest)))
.pipe(dest(config.paths.copy.dest));
}
function replacecopy() {
return src(config.paths.copy.replacesrc)
.pipe(replacestrings(stringsreplace))
.pipe(gulpif(!isProd, changed(config.paths.copy.dest)))
.pipe(dest(config.paths.copy.dest));
}
export const copy = series(
cleancopy,
replacecopy
);
+22
View File
@@ -0,0 +1,22 @@
/**
* Automatic Release
*
* @description: Deploy Task for an automated Build Process
*/
import { series, parallel } from 'gulp'
import { copyRelease } from './copy-release'
import { copyPackageFiles } from './copy-packagefiles'
import { buildArchives } from './archives'
import { cleaner, deleteReleasefilesFolder } from './clean';
// Config
import { config } from '../config';
export const release = series(
cleaner,
copyRelease,
copyPackageFiles,
buildArchives
);
+55
View File
@@ -0,0 +1,55 @@
/*
* @title serve
* @description A task to initialise browser-sync
* either via proxy or serving the files directly
* depending on your settings
*/
// Dependencies
import browserSync from 'browser-sync';
import gulp from 'gulp';
// Config
import {config} from '../config';
// Task
// const server = browserSync.create();
export function serve(cb) {
// Build a condition when Proxy is active
let bsProxy;
let bsServer;
// Condition for Proxy
if (config.browserSyncConfig.proxy != '') {
bsProxy = {
target: config.browserSyncConfig.proxy,
ws: true
};
bsServer = false;
} else {
bsProxy = false;
bsServer = {
baseDir: [config.paths.dest]
};
}
browserSync.init({
server: bsServer,
proxy: bsProxy,
notify: config.browserSyncConfig.notify,
open: config.browserSyncConfig.open,
https: config.browserSyncConfig.https,
ghostMode: config.browserSyncConfig.ghostMode,
debugInfo: config.browserSyncConfig.debugInfo,
watchTask: config.browserSyncConfig.watchTask,
});
cb();
}
gulp.task('browser-sync', serve);
export function reload(cb) {
browserSync.reload();
cb();
}
+24
View File
@@ -0,0 +1,24 @@
/*
* @title Watch
* @description A task to start the server and watch for changes.
*/
// Dependencies
import gulp from 'gulp';
import { series } from 'gulp';
// Tasks
import { reload, serve } from './server';
import { copy } from './copy';
// Config
import { config } from '../config';
function watchFiles() {
gulp.watch(config.paths.copy.watch, series(copy, reload));
}
export const watch = series(
serve,
watchFiles
);