|
|
|
@ -7,25 +7,15 @@ import { useSpinner } from '../utils/useSpinner'; |
|
|
|
|
import { Task, TaskRunner } from './task'; |
|
|
|
|
import { cloneDeep } from 'lodash'; |
|
|
|
|
import globby from 'globby'; |
|
|
|
|
import series from 'p-series'; |
|
|
|
|
|
|
|
|
|
let distDir: string, cwd: string; |
|
|
|
|
const clean = (cwd: string) => useSpinner('Cleaning', () => execa('npm', ['run', 'clean'], { cwd })); |
|
|
|
|
|
|
|
|
|
const clean = () => useSpinner('Cleaning', () => execa('npm', ['run', 'clean'])); |
|
|
|
|
const compile = (cwd: string) => |
|
|
|
|
useSpinner('Compiling sources', () => execa('tsc', ['-p', './tsconfig.build.json'], { cwd })); |
|
|
|
|
|
|
|
|
|
const compile = () => useSpinner('Compiling sources', () => execa('tsc', ['-p', './tsconfig.build.json'])); |
|
|
|
|
const bundle = (cwd: string) => useSpinner('Bundling', () => execa('npm', ['run', 'bundle'], { cwd })); |
|
|
|
|
|
|
|
|
|
const bundle = () => useSpinner('Bundling', () => execa('npm', ['run', 'bundle'])); |
|
|
|
|
|
|
|
|
|
interface SavePackageOptions { |
|
|
|
|
path: string; |
|
|
|
|
pkg: {}; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
const savePackage = ({ path, pkg }: SavePackageOptions) => |
|
|
|
|
useSpinner('Updating package.json', () => fs.writeFile(path, JSON.stringify(pkg, null, 2))); |
|
|
|
|
|
|
|
|
|
const preparePackage = async (pkg: any) => { |
|
|
|
|
const preparePackage = async (packageDist: string, pkg: any) => { |
|
|
|
|
pkg = cloneDeep(pkg); // avoid mutations
|
|
|
|
|
|
|
|
|
|
pkg.main = 'index.js'; |
|
|
|
@ -47,26 +37,27 @@ const preparePackage = async (pkg: any) => { |
|
|
|
|
deps['@grafana/ui'] = version; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
await savePackage({ |
|
|
|
|
path: `${cwd}/dist/package.json`, |
|
|
|
|
pkg, |
|
|
|
|
}); |
|
|
|
|
await useSpinner('Updating package.json', () => |
|
|
|
|
fs.writeFile(`${packageDist}/package.json`, JSON.stringify(pkg, null, 2)) |
|
|
|
|
); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
const moveFiles = () => { |
|
|
|
|
const moveFiles = (fromPath: string, toPath: string) => { |
|
|
|
|
const files = ['README.md', 'CHANGELOG.md', 'index.js']; |
|
|
|
|
|
|
|
|
|
return useSpinner(`Moving ${files.join(', ')} files`, () => { |
|
|
|
|
const promises = files.map(file => fs.copyFile(`${cwd}/${file}`, `${distDir}/${file}`)); |
|
|
|
|
const promises = files.map(file => fs.copyFile(`${fromPath}/${file}`, `${toPath}/${file}`)); |
|
|
|
|
return Promise.all(promises); |
|
|
|
|
}); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
const moveStaticFiles = async (pkg: any) => { |
|
|
|
|
const moveStaticFiles = async (packageRoot: string, pkg: any) => { |
|
|
|
|
if (pkg.name.endsWith('/ui')) { |
|
|
|
|
return useSpinner('Moving static files', async () => { |
|
|
|
|
const staticFiles = await globby('src/**/*.{png,svg,gif,jpg}'); |
|
|
|
|
const promises = staticFiles.map(file => fs.copyFile(file, file.replace(/^src/, 'compiled'))); |
|
|
|
|
const staticFiles = await globby(`${packageRoot}/src/**/*.{png,svg,gif,jpg}`); |
|
|
|
|
const pathSearch = new RegExp(`^${packageRoot}/src`); |
|
|
|
|
const pathReplace = `${packageRoot}/compiled`; |
|
|
|
|
const promises = staticFiles.map(file => fs.copyFile(file, file.replace(pathSearch, pathReplace))); |
|
|
|
|
await Promise.all(promises); |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
@ -81,26 +72,20 @@ const buildTaskRunner: TaskRunner<PackageBuildOptions> = async ({ scope }) => { |
|
|
|
|
throw new Error('Provide packages with -s, --scope <packages>'); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
const scopes = scope.split(',').map(s => { |
|
|
|
|
return async () => { |
|
|
|
|
cwd = path.resolve(__dirname, `../../../../grafana-${s}`); |
|
|
|
|
// Lerna executes this in package's dir context, but for testing purposes I want to be able to run from root:
|
|
|
|
|
// grafana-toolkit package:build --scope=<package>
|
|
|
|
|
process.chdir(cwd); |
|
|
|
|
distDir = `${cwd}/dist`; |
|
|
|
|
const pkg = require(`${cwd}/package.json`); |
|
|
|
|
console.log(chalk.yellow(`Building ${pkg.name} (package.json version: ${pkg.version})`)); |
|
|
|
|
|
|
|
|
|
await clean(); |
|
|
|
|
await compile(); |
|
|
|
|
await moveStaticFiles(pkg); |
|
|
|
|
await bundle(); |
|
|
|
|
await preparePackage(pkg); |
|
|
|
|
await moveFiles(); |
|
|
|
|
}; |
|
|
|
|
const scopes = scope.split(',').map(async s => { |
|
|
|
|
const packageRoot = path.resolve(__dirname, `../../../../grafana-${s}`); |
|
|
|
|
const packageDist = `${packageRoot}/dist`; |
|
|
|
|
const pkg = require(`${packageRoot}/package.json`); |
|
|
|
|
console.log(chalk.yellow(`Building ${pkg.name} (package.json version: ${pkg.version})`)); |
|
|
|
|
await clean(packageRoot); |
|
|
|
|
await compile(packageRoot); |
|
|
|
|
await moveStaticFiles(packageRoot, pkg); |
|
|
|
|
await bundle(packageRoot); |
|
|
|
|
await preparePackage(packageDist, pkg); |
|
|
|
|
await moveFiles(packageRoot, packageDist); |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
await series(scopes); |
|
|
|
|
await Promise.all(scopes); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
export const buildPackageTask = new Task<PackageBuildOptions>('Package build', buildTaskRunner); |
|
|
|
|