-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
gulpfile.js
149 lines (129 loc) · 5.51 KB
/
gulpfile.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
/* eslint-disable n/no-unpublished-require, sonarjs/no-duplicate-string, jsdoc/newline-after-description, jsdoc/require-param */
/**
* https://semaphoreci.com/community/tutorials/getting-started-with-gulp-js
* https://gulpjs.com/plugins/
* https://gulpjs.com/docs/en/api/concepts/
* Plugins
* https://www.npmjs.com/package/gulp-include - source file inline replacements
* https://www.npmjs.com/package/gulp-uglify - Minify
* https://www.npmjs.com/package/gulp-rename - Rename source filename on output
* https://www.npmjs.com/package/gulp-once - Only do things if files have changed
* https://www.npmjs.com/package/gulp-replace - String replacer
* https://www.npmjs.com/package/gulp-json-editor - Change data in a JSON file
* https://www.npmjs.com/package/gulp-debug
* https://github.com/jonschlinkert/gulp-htmlmin
* https://www.npmjs.com/package/gulp-esbuild - supports modern es modules
*
* https://www.npmjs.com/package/gulp-concat
* https://www.npmjs.com/package/gulp-sourcemaps
* https://www.npmjs.com/package/gulp-prompt - get input from user
* https://www.npmjs.com/package/gulp-if-else
* https://www.npmjs.com/package/gulp-minify-inline
* https://www.npmjs.com/package/gulp-tap - Easily tap into a pipeline. Could replace gulp-replace
* https://www.npmjs.com/package/webpack-stream - Use WebPack with gulp
* https://www.npmjs.com/package/tinyify - runs various optimizations
*
* ❌https://www.npmjs.com/package/gulp-changed - Does not work as expected
*/
'use strict'
const { src, dest, series, watch, parallel, } = require('gulp')
const uglify = require('gulp-uglify')
const rename = require('gulp-rename')
const include = require('gulp-include')
const once = require('gulp-once')
// const prompt = require('gulp-prompt')
const greplace = require('gulp-replace')
// const debug = require('gulp-debug')
const htmlmin = require('gulp-htmlmin')
const jeditor = require('gulp-json-editor')
const gulpEsbuild = require('gulp-esbuild')
const execa = require('execa')
const fs = require('fs-extra')
// const { promisify } = require('util')
// const dotenv = require('dotenv')
// print output of commands into the terminal
const stdio = 'inherit'
// @ts-ignore
const { version } = JSON.parse(fs.readFileSync('package.json'))
// npm version 4.2.1 --no-git-tag-version --allow-same-version
const release = '0.0.1'
console.log(`Current Version: ${version}. Requested Version: ${release}`)
const nodeDest = 'nodes'
const nodeSrcRoot = 'src/editor'
/** Build the uib-element panel */
function buildPanelUibUplot(cb) {
const nodeName = 'uib-uplot'
try {
src(`${nodeSrcRoot}/${nodeName}/main.html`, ) // { since: lastRun(buildMe) } )
// .pipe(debug({title:'debug1',minimal:false}))
.pipe( include() )
// Rename output to $dirname/editor.html
.pipe(rename(function(thispath) {
// thispath.dirname = `${thispath.dirname}`
thispath.basename = 'customNode'
// thispath.extname = 'html'
}))
// Minimise HTML output
// .pipe(htmlmin({ collapseWhitespace: true, removeComments: true, processScripts: ['text/html'], removeScriptTypeAttributes: true }))
.pipe(dest(`${nodeDest}/${nodeName}/`))
} catch (e) {
console.error('buildPanelUibUplot failed', e)
}
cb()
}
// const buildme = parallel(buildPanelUib, buildPanelSender, buildPanelReceiver)
const buildme = parallel(series(buildPanelUibUplot))
/** Watch for changes during development of uibuilderfe & editor */
function watchme(cb) {
watch('src/editor/uib-uplot/*', buildPanelUibUplot)
cb()
}
/** Set uibuilder version in package.json */
function setPackageVersion(cb) {
if (version !== release) {
// bump version without committing and tagging
// await execa('npm', ['version', release, '--no-git-tag-version'], {stdio})
src('./package.json')
.pipe(jeditor({ 'version': release } ) )
.pipe(dest('.') )
} else {
console.log('setPackageVersion: Requested version is same as current version - nothing will change')
}
cb()
}
/** Set uibuilder version in package-lock.json */
function setPackageLockVersion(cb) {
if (version !== release) {
src('./package-lock.json')
.pipe(jeditor({ 'version': release } ) )
.pipe(dest('.') )
}
cb()
}
/** Create a new GitHub tag for a release (only if release ver # different to last committed tag) */
async function createTag(cb) {
// Get the last committed tag: git describe --tags --abbrev=0
let lastTag
try {
lastTag = (await execa('git', ['describe', '--tags', '--abbrev=0'])).stdout
} catch (e) {
lastTag = ''
}
console.log(`Last committed tag: ${lastTag}`)
// If the last committed tag is different to the required release ...
if ( lastTag.replace('v','') !== release ) {
// const commitMsg = `chore: release ${release}`
// await execa('git', ['add', '.'], { stdio })
// await execa('git', ['commit', '--message', commitMsg], { stdio })
await execa('git', ['tag', `v${release}`], { stdio })
await execa('git', ['push', '--follow-tags'], { stdio })
await execa('git', ['push', 'origin', '--tags'], { stdio })
} else {
console.log('Requested release version is same as the latest tag - not creating tag')
}
cb()
}
exports.watch = watchme
exports.build = buildme
exports.createTag = createTag
exports.setVersion = series( setPackageVersion, setPackageLockVersion )