-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
gulpfile.js
168 lines (142 loc) · 6.11 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
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
/* eslint-disable sonarjs/no-duplicate-string */
/* eslint-disable 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-debug
* https://github.com/jonschlinkert/gulp-htmlmin
*
* 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 replace = require('gulp-replace')
const debug = require('gulp-debug')
const htmlmin = require('gulp-htmlmin')
const execa = require('execa')
const fs = require('fs')
//const { promisify } = require('util')
//const dotenv = require('dotenv')
const nodeDest = 'nodes'
// 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.2'
console.log(`Current Version: ${version}. Requested Version: ${release}`)
/**
* TODO
* - Add text replace to ensure 2021 in (c) blocks is current year
*/
/** Combine the parts of wiser.html */
function buildPanelWiser1(cb) {
src('src/editor/wiser/editor.js')
.pipe(uglify())
.pipe(rename('editor.min.js'))
.pipe(dest('src/editor/wiser'))
cb()
}
/** compress */
function buildPanelWiser2(cb) {
src('src/editor/wiser/main.html')
.pipe(include())
.pipe(rename('wiser.html'))
.pipe(htmlmin({ collapseWhitespace: true, removeComments: true, processScripts: ['text/html'], removeScriptTypeAttributes: true }))
.pipe(dest(nodeDest))
cb()
}
/** Combine the parts of uib-sender.html */
function buildPanelListen(cb) {
src('src/editor/wiser-listen/main.html')
.pipe(include())
//.pipe(once())
.pipe(rename('wiser-listen.html'))
.pipe(htmlmin({ collapseWhitespace: true, removeComments: true, minifyJS: true }))
.pipe(dest(nodeDest))
cb()
}
const buildme = parallel(series(buildPanelWiser1, buildPanelWiser2), buildPanelListen )
/** Watch for changes during development editor */
function watchme(cb) {
// Pack panel .js if it changes - creates .min.js
watch(['src/editor/wiser/editor.js'], buildPanelWiser1)
// Re-combine and minimise .html if the source changes - ignore changes to .js, those are handled above
watch(['src/editor/wiser/*', '!src/editor/wiser/editor.js'], buildPanelWiser2)
// Re-combine and minimise wiser-listen
watch(['src/editor/wiser-listen/*'], buildPanelListen)
cb()
}
/** Set version in package.json */
async function setPackageVersion() {
if (version !== release) {
console.log(`Changing release version in package.json to ${version} from ${release}`)
// bump version without committing and tagging
await execa('npm', ['version', release, '--no-git-tag-version'], {stdio})
} else {
console.log(`Requested version is same as current version - nothing will change. ${version}`)
}
}
/** Create a new GitHub tag for a release (only if release ver # different to last committed tag) */
async function createTag(cb) {
console.log(`Creating GitHub Tag with version string: ${version} \n If the version is wrong, please change in gulpfile.js.`)
//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 ) {
console.log(`Creating new git tag of v${release} and pushing to GitHub.`)
//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 (${version}) is same as the latest tag - not creating tag`)
}
cb()
}
/** Publish to npmjs.org registry as a public package */
async function publish(cb) {
await execa('npm', ['publish', '--access', 'public'], { stdio })
cb()
}
exports.default = series( buildme ) // series(runLinter,parallel(generateCSS,generateHTML),runTests)
exports.watch = watchme
exports.buildPanelWiser = series(buildPanelWiser1, buildPanelWiser2)
exports.build = buildme
exports.createTag = series( setPackageVersion, createTag)
exports.setVersion = series( setPackageVersion )
exports.publish = publish
/*
* "npmtags": "npm dist-tag ls node-red-contrib-drayton-wiser",
* "npmtagnext": "npm dist-tag add node-red-contrib-drayton-wiser@$npm_package_version next",
* "gitmergemain": "git merge origin/main",
*/