import execa from 'execa' ; import { resolve } from 'path' ; import { writeFileSync } from 'fs' ; import { promisify } from 'util' ; import { pipeline } from 'stream' ; import { REPO_ROOT } from '@kbn/utils' ; import { ToolingLog , transformFileStream , transformFileWithBabel } from '@kbn/dev-utils' ; import gulp from 'gulp' ; import del from 'del' ; import fancyLog from 'fancy-log' ; import chalk from 'chalk' ; import vfs from 'vinyl-fs' ; import { generateNoticeFromSource } from '../../src/dev/notice' ; import { gitInfo } from './helpers/git_info' ; import { PKG_NAME } from './helpers/pkg' ; import { BUILD_VERSION } from './helpers/build_version' ; const asyncPipeline = promisify ( pipeline ) ; const XPACK_DIR = resolve ( REPO_ROOT , 'x-pack' ) ; const BUILD_DIR = resolve ( XPACK_DIR , 'build' ) ; const PLUGIN_BUILD_DIR = resolve ( BUILD_DIR , 'plugin/kibana/x-pack' ) ; async function cleanBuildTask ( ) { fancyLog ( 'Deleting' , BUILD_DIR ) ; await del ( BUILD_DIR ) ; fancyLog ( '[canvas] Deleting Shareable Runtime' ) ; await del ( resolve ( XPACK_DIR , 'plugins/canvas/shareable_runtime/build' ) ) ; } async function reportTask ( ) { const info = await gitInfo ( ) ; fancyLog ( 'Package Name' , chalk . yellow ( PKG_NAME ) ) ; fancyLog ( 'Version' , chalk . yellow ( BUILD_VERSION ) ) ; fancyLog ( 'Build Number' , chalk . yellow ( `${ info . number }` ) ) ; fancyLog ( 'Build SHA' , chalk . yellow ( info . sha ) ) ; } async function copySourceAndBabelify ( ) { await asyncPipeline ( vfs . src ( [ 'LICENSE.txt' , 'NOTICE.txt' , 'package.json' , 'yarn.lock' , 'tsconfig.json' , 'index.js' , '.i18nrc.json' , 'plugins/**/*' , 'typings/**/*' , ] , { cwd : XPACK_DIR , base : XPACK_DIR , buffer : true , nodir : true , ignore : [ '**/*.{md,asciidoc}' , '**/jest.config.js' , '**/*.{test,test.mocks,mock,mocks}.*' , '**/*.d.ts' , '**/node_modules/**' , '**/public/**/*.{js,ts,tsx,json,scss}' , '**/{__tests__,__mocks__,__snapshots__,__fixtures__,__jest__,cypress}/**' , 'plugins/*/target/**' , 'plugins/canvas/shareable_runtime/test/**' , 'plugins/screenshotting/chromium/**' , 'plugins/telemetry_collection_xpack/schema/**' , ] , allowEmpty : true , } ) , transformFileStream ( async ( file ) => { if ( [ '.js' , '.ts' , '.tsx' ] . includes ( file . extname ) ) { await transformFileWithBabel ( file ) ; } } ) , vfs . dest ( PLUGIN_BUILD_DIR ) ) ; } async function buildCanvasShareableRuntime ( ) { await execa ( process . execPath , [ '--preserve-symlinks' , 'plugins/canvas/scripts/shareable_runtime' ] , { cwd : XPACK_DIR , stdio : [ 'ignore' , 'inherit' , 'inherit' ] , buffer : false , } ) ; } async function generateNoticeText ( ) { const log = new ToolingLog ( { level : 'info' , writeTo : process . stdout , } ) ; writeFileSync ( resolve ( PLUGIN_BUILD_DIR , 'NOTICE.txt' ) , await generateNoticeFromSource ( { productName : 'Kibana X-Pack' , log , directory : PLUGIN_BUILD_DIR , } ) ) ; } export const buildTask = gulp . series ( cleanBuildTask , reportTask , buildCanvasShareableRuntime , copySourceAndBabelify , generateNoticeText ) ;