Add release notes and blog entry for Camel 3.19.0
[camel-website.git] / antora-ui-camel / gulpfile.js
index 07cc9aeff7e2869946e7fdd3b76c36f06c8e7fa8..44bc95410dd1e9d9fe899e9e575d882890150a4e 100644 (file)
 'use strict'
 
-const connect = require('gulp-connect')
-const path = require('path')
-const gulp = require('gulp')
-
-const build = require('./tasks/build')
-const buildPreview = require('./tasks/build-preview')
-const format = require('./tasks/format')
-const lintCss = require('./tasks/lint-css')
-const lintJs = require('./tasks/lint-js')
-const pack = require('./tasks/pack')
-const preview = require('./tasks/preview')
+const { parallel, series, watch } = require('gulp')
+const createTask = require('./gulp.d/lib/create-task')
+const exportTasks = require('./gulp.d/lib/export-tasks')
+const log = require('fancy-log')
 
 const bundleName = 'ui'
 const buildDir = 'build'
-const previewSiteSrcDir = 'preview-site-src'
-const previewSiteDestDir = 'public'
+const previewSrcDir = 'preview-src'
+const previewDestDir = 'public'
 const srcDir = 'src'
-const destDir = path.join(previewSiteDestDir, '_')
+const destDir = `${previewDestDir}/_`
+const { reload: livereload } = process.env.LIVERELOAD === 'true' ? require('gulp-connect') : {}
+const serverConfig = { host: '0.0.0.0', port: 5252, livereload }
 
-const jsFiles = ['gulpfile.js', 'tasks/**/*.js', path.join(srcDir, '{helpers,js}/**/*.js')]
+const task = require('./gulp.d/tasks')
+const glob = {
+  all: [srcDir, previewSrcDir],
+  lintcss: `${srcDir}/css/**/*.css`,
+  formatcss: [
+    `${srcDir}/css/**/*.css`,
+    `!${srcDir}/css/**/typeface-droid-sans-mono.css`,
+    `!${srcDir}/css/**/typeface-open-sans.css`,
+  ],
+  js: ['gulpfile.js', 'gulp.d/**/*.js', `${srcDir}/{helpers,js}/**/*.js`],
+}
 
-gulp.task('lint:css', () => lintCss(`${srcDir}/css/**/*.css`))
-gulp.task('lint:js', () => lintJs(jsFiles))
-gulp.task('lint', ['lint:css', 'lint:js'])
+const cleanTask = createTask({
+  name: 'clean',
+  desc: 'Clean files and folders generated by build',
+  call: task.remove(['build', 'public']),
+})
 
-gulp.task('format', () => format(jsFiles))
+const lintCssTask = createTask({
+  name: 'lint:css',
+  desc: 'Lint the CSS source files using stylelint (standard config)',
+  call: task.lintCss(glob.lintcss),
+})
 
-gulp.task('build', () => build(srcDir, destDir))
+const lintJsTask = createTask({
+  name: 'lint:js',
+  desc: 'Lint the JavaScript source files using eslint (JavaScript Standard Style)',
+  call: task.lintJs(glob.js),
+})
 
-gulp.task('build:preview', ['build'], () =>
-  buildPreview(srcDir, destDir, previewSiteSrcDir, previewSiteDestDir, connect.reload)
-)
+const lintTask = createTask({
+  name: 'lint',
+  desc: 'Lint the CSS and JavaScript source files',
+  call: parallel(lintCssTask, lintJsTask),
+})
 
-gulp.task('preview', ['build:preview'], () =>
-  preview(previewSiteDestDir, {
-    port: 5252,
-    livereload: process.env.LIVERELOAD === 'true',
-    watch: {
-      src: [srcDir, previewSiteSrcDir],
-      onChange: () => gulp.start('build:preview'),
-    },
-  })
-)
+const formatCssTask = createTask({
+  name: 'format:css',
+  desc: 'Format the CSS source files using prettify (Standard Style)',
+  call: task.format(glob.formatcss),
+})
+
+const formatJsTask = createTask({
+  name: 'format:js',
+  desc: 'Format the JavaScript source files using prettify (JavaScript Standard Style)',
+  call: task.format(glob.js),
+})
+
+const formatTask = createTask({
+  name: 'format',
+  desc: 'Format the JavaScript and CSS source files using prettify',
+  call: parallel(formatCssTask, formatJsTask),
+})
+
+const buildTask = createTask({
+  name: 'build',
+  desc: 'Build and stage the UI assets for bundling',
+  call: task.build(srcDir, destDir, process.argv.slice(2).some((name) => name.startsWith('preview'))),
+})
+
+const bundleBuildTask = createTask({
+  name: 'bundle:build',
+  call: series(cleanTask, lintTask, buildTask),
+})
+
+const bundlePackTask = createTask({
+  name: 'bundle:pack',
+  desc: 'Create a bundle of the staged UI assets for publishing',
+  call: task.pack(
+    destDir,
+    buildDir,
+    bundleName,
+    (bundlePath) => !process.env.CI && log(`Antora option: --ui-bundle-url=${bundlePath}`)
+  ),
+})
 
-gulp.task('pack', ['build', 'lint'], () => pack(destDir, buildDir, bundleName))
+const bundleTask = createTask({
+  name: 'bundle',
+  desc: 'Clean, lint, build, and bundle the UI for publishing',
+  call: series(bundleBuildTask, bundlePackTask),
+})
 
-gulp.task('default', ['build'])
+const packTask = createTask({
+  name: 'pack',
+  desc: '(deprecated; use bundle instead)',
+  call: series(bundleTask),
+})
+
+const buildPreviewPagesTask = createTask({
+  name: 'preview:build-pages',
+  call: task.buildPreviewPages(srcDir, previewSrcDir, previewDestDir, livereload),
+})
+
+const previewBuildTask = createTask({
+  name: 'preview:build',
+  desc: 'Process and stage the UI assets and generate pages for the preview',
+  call: parallel(buildTask, buildPreviewPagesTask),
+})
+
+const previewServeTask = createTask({
+  name: 'preview:serve',
+  call: task.serve(previewDestDir, serverConfig, () => watch(glob.all, previewBuildTask)),
+})
+
+const previewTask = createTask({
+  name: 'preview',
+  desc: 'Generate a preview site and launch a server to view it',
+  call: series(previewBuildTask, previewServeTask),
+})
+
+module.exports = exportTasks(
+  bundleTask,
+  cleanTask,
+  lintTask,
+  formatTask,
+  buildTask,
+  bundleTask,
+  bundlePackTask,
+  previewTask,
+  previewBuildTask,
+  packTask
+)