mirror of https://github.com/grafana/grafana
Toolkit: Remove deprecated `package:build`, `node-version-check` and `toolkit:build` commands (#67475)
parent
82838a2176
commit
0ec40a51eb
@ -1,77 +0,0 @@ |
|||||||
import chalk from 'chalk'; |
|
||||||
import { readFileSync } from 'fs'; |
|
||||||
import { coerce, satisfies } from 'semver'; |
|
||||||
|
|
||||||
import { Task, TaskRunner } from './task'; |
|
||||||
|
|
||||||
interface FailedVersionCheck { |
|
||||||
file: string; |
|
||||||
line: string; |
|
||||||
} |
|
||||||
|
|
||||||
interface NodeVersionCheckerOptions {} |
|
||||||
|
|
||||||
const pattern = /(circleci\/|FROM )node\:([0-9]+(\.[0-9]+){0,2})/gm; |
|
||||||
const packageJsonFile = 'package.json'; |
|
||||||
|
|
||||||
const failures: FailedVersionCheck[] = []; |
|
||||||
|
|
||||||
export const nodeVersionFiles = [packageJsonFile, 'Dockerfile']; |
|
||||||
|
|
||||||
const nodeVersionCheckerRunner: TaskRunner<NodeVersionCheckerOptions> = async () => { |
|
||||||
// Read version from package json and treat that as the expected version in all other locations
|
|
||||||
const packageJson = require(`${process.cwd()}/${packageJsonFile}`); |
|
||||||
const expectedVersion = packageJson.engines.node; |
|
||||||
|
|
||||||
console.log(chalk.yellow(`Specified node version in package.json is: ${expectedVersion}`)); |
|
||||||
|
|
||||||
for (const file of nodeVersionFiles) { |
|
||||||
const fileContent = readFileSync(`${process.cwd()}/${file}`); |
|
||||||
const matches = fileContent.toString('utf8').match(pattern); |
|
||||||
|
|
||||||
if (!matches) { |
|
||||||
continue; |
|
||||||
} |
|
||||||
|
|
||||||
for (const match of matches) { |
|
||||||
const actualVersion = coerce(match); |
|
||||||
if (!actualVersion) { |
|
||||||
failures.push({ |
|
||||||
file, |
|
||||||
line: match, |
|
||||||
}); |
|
||||||
continue; |
|
||||||
} |
|
||||||
|
|
||||||
const satisfied = satisfies(actualVersion, expectedVersion); |
|
||||||
if (!satisfied) { |
|
||||||
failures.push({ |
|
||||||
file, |
|
||||||
line: match, |
|
||||||
}); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
if (failures.length > 0) { |
|
||||||
console.log(chalk.red('--------------------------------------------------------------------')); |
|
||||||
console.log(chalk.red(`These entries don't satisfy the engine version in ${packageJsonFile}`)); |
|
||||||
console.log(chalk.red('--------------------------------------------------------------------')); |
|
||||||
|
|
||||||
for (let index = 0; index < failures.length; index++) { |
|
||||||
const failure = failures[index]; |
|
||||||
console.log(chalk.green(`\tIn ${failure.file} the line ${failure.line} does not satisfy ${expectedVersion}.`)); |
|
||||||
} |
|
||||||
|
|
||||||
throw new Error('Node versions not in sync'); |
|
||||||
} |
|
||||||
|
|
||||||
console.log(chalk.yellow('--------------------------------------------------------------------')); |
|
||||||
console.log(chalk.yellow('All node versions seem ok.')); |
|
||||||
console.log(chalk.yellow('--------------------------------------------------------------------')); |
|
||||||
}; |
|
||||||
|
|
||||||
export const nodeVersionCheckerTask = new Task<NodeVersionCheckerOptions>( |
|
||||||
'Node Version Checker', |
|
||||||
nodeVersionCheckerRunner |
|
||||||
); |
|
||||||
@ -1,92 +0,0 @@ |
|||||||
import chalk from 'chalk'; |
|
||||||
import execa = require('execa'); |
|
||||||
import { promises as fs } from 'fs'; |
|
||||||
import globby from 'globby'; |
|
||||||
import { cloneDeep } from 'lodash'; |
|
||||||
import * as path from 'path'; |
|
||||||
|
|
||||||
import { useSpinner } from '../utils/useSpinner'; |
|
||||||
|
|
||||||
import { Task, TaskRunner } from './task'; |
|
||||||
|
|
||||||
const clean = (cwd: string) => useSpinner('Cleaning', () => execa('npm', ['run', 'clean'], { cwd })); |
|
||||||
|
|
||||||
const compile = (cwd: string) => |
|
||||||
useSpinner('Compiling sources', () => execa('tsc', ['-p', './tsconfig.build.json'], { cwd })); |
|
||||||
|
|
||||||
const bundle = (cwd: string) => useSpinner('Bundling', () => execa('npm', ['run', 'bundle'], { cwd })); |
|
||||||
|
|
||||||
const preparePackage = async (packageDist: string, pkg: any) => { |
|
||||||
pkg = cloneDeep(pkg); // avoid mutations
|
|
||||||
|
|
||||||
pkg.main = 'index.js'; |
|
||||||
pkg.types = 'index.d.ts'; |
|
||||||
|
|
||||||
const version: string = pkg.version; |
|
||||||
const name: string = pkg.name; |
|
||||||
const deps: any = pkg.dependencies; |
|
||||||
|
|
||||||
// Below we are adding cross-dependencies to Grafana's packages
|
|
||||||
// with the version being published
|
|
||||||
if (name.endsWith('/ui')) { |
|
||||||
deps['@grafana/data'] = version; |
|
||||||
} else if (name.endsWith('/runtime')) { |
|
||||||
deps['@grafana/data'] = version; |
|
||||||
deps['@grafana/ui'] = version; |
|
||||||
} else if (name.endsWith('/toolkit')) { |
|
||||||
deps['@grafana/data'] = version; |
|
||||||
deps['@grafana/ui'] = version; |
|
||||||
} |
|
||||||
|
|
||||||
await useSpinner('Updating package.json', () => |
|
||||||
fs.writeFile(`${packageDist}/package.json`, JSON.stringify(pkg, null, 2)) |
|
||||||
); |
|
||||||
}; |
|
||||||
|
|
||||||
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(`${fromPath}/${file}`, `${toPath}/${file}`)); |
|
||||||
return Promise.all(promises); |
|
||||||
}); |
|
||||||
}; |
|
||||||
|
|
||||||
const moveStaticFiles = async (packageRoot: string, pkg: any) => { |
|
||||||
if (pkg.name.endsWith('/ui')) { |
|
||||||
return useSpinner('Moving static files', async () => { |
|
||||||
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); |
|
||||||
}); |
|
||||||
} |
|
||||||
}; |
|
||||||
|
|
||||||
interface PackageBuildOptions { |
|
||||||
scope: string; |
|
||||||
} |
|
||||||
|
|
||||||
const buildTaskRunner: TaskRunner<PackageBuildOptions> = async ({ scope }) => { |
|
||||||
if (!scope) { |
|
||||||
throw new Error('Provide packages with -s, --scope <packages>'); |
|
||||||
} |
|
||||||
|
|
||||||
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 Promise.all(scopes); |
|
||||||
}; |
|
||||||
|
|
||||||
export const buildPackageTask = new Task<PackageBuildOptions>('Package build', buildTaskRunner); |
|
||||||
@ -1,99 +0,0 @@ |
|||||||
import chalk from 'chalk'; |
|
||||||
import execa = require('execa'); |
|
||||||
import * as fs from 'fs'; |
|
||||||
|
|
||||||
import { useSpinner } from '../utils/useSpinner'; |
|
||||||
|
|
||||||
import { Task, TaskRunner } from './task'; |
|
||||||
|
|
||||||
const path = require('path'); |
|
||||||
|
|
||||||
let distDir: string, cwd: string; |
|
||||||
|
|
||||||
const clean = () => useSpinner('Cleaning', () => execa('npm', ['run', 'clean'])); |
|
||||||
|
|
||||||
const compile = () => |
|
||||||
useSpinner('Compiling sources', async () => { |
|
||||||
try { |
|
||||||
await execa('tsc', ['-p', './tsconfig.json']); |
|
||||||
} catch (e) { |
|
||||||
console.log(e); |
|
||||||
throw e; |
|
||||||
} |
|
||||||
}); |
|
||||||
|
|
||||||
const copyFiles = () => { |
|
||||||
const files = [ |
|
||||||
'src/config/prettier.plugin.config.json', |
|
||||||
'src/config/prettier.plugin.rc.js', |
|
||||||
'src/config/tsconfig.plugin.json', |
|
||||||
'src/config/tsconfig.plugin.local.json', |
|
||||||
'src/config/eslint.plugin.js', |
|
||||||
'src/config/styles.mock.js', |
|
||||||
'src/config/jest.babel.config.js', |
|
||||||
'src/config/jest.plugin.config.local.js', |
|
||||||
'src/config/matchMedia.js', |
|
||||||
'src/config/react-inlinesvg.tsx', |
|
||||||
]; |
|
||||||
|
|
||||||
return useSpinner(`Moving ${files.join(', ')} files`, async () => { |
|
||||||
const promises = files.map((file) => { |
|
||||||
return new Promise<void>((resolve, reject) => { |
|
||||||
const basedir = path.dirname(`${distDir}/${file}`); |
|
||||||
if (!fs.existsSync(basedir)) { |
|
||||||
fs.mkdirSync(basedir, { recursive: true }); |
|
||||||
} |
|
||||||
fs.copyFile(`${cwd}/${file}`, `${distDir}/${file}`, (err) => { |
|
||||||
if (err) { |
|
||||||
reject(err); |
|
||||||
return; |
|
||||||
} |
|
||||||
resolve(); |
|
||||||
}); |
|
||||||
}); |
|
||||||
}); |
|
||||||
|
|
||||||
await Promise.all(promises); |
|
||||||
}); |
|
||||||
}; |
|
||||||
|
|
||||||
const copySassFiles = () => { |
|
||||||
const files = ['_variables.generated.scss', '_variables.dark.generated.scss', '_variables.light.generated.scss']; |
|
||||||
const exportDir = `${cwd}/sass`; |
|
||||||
return useSpinner(`Copy scss files ${files.join(', ')} files`, async () => { |
|
||||||
const sassDir = path.resolve(cwd, '../../public/sass/'); |
|
||||||
if (!fs.existsSync(exportDir)) { |
|
||||||
fs.mkdirSync(exportDir); |
|
||||||
} |
|
||||||
const promises = files.map((file) => { |
|
||||||
return new Promise<void>((resolve, reject) => { |
|
||||||
const name = file.replace('.generated', ''); |
|
||||||
fs.copyFile(`${sassDir}/${file}`, `${exportDir}/${name}`, (err) => { |
|
||||||
if (err) { |
|
||||||
reject(err); |
|
||||||
return; |
|
||||||
} |
|
||||||
resolve(); |
|
||||||
}); |
|
||||||
}); |
|
||||||
}); |
|
||||||
|
|
||||||
await Promise.all(promises); |
|
||||||
}); |
|
||||||
}; |
|
||||||
|
|
||||||
interface ToolkitBuildOptions {} |
|
||||||
|
|
||||||
const toolkitBuildTaskRunner: TaskRunner<ToolkitBuildOptions> = async () => { |
|
||||||
cwd = path.resolve(__dirname, '../../../'); |
|
||||||
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 copyFiles(); |
|
||||||
await copySassFiles(); |
|
||||||
}; |
|
||||||
|
|
||||||
export const toolkitBuildTask = new Task<ToolkitBuildOptions>('@grafana/toolkit build', toolkitBuildTaskRunner); |
|
||||||
Loading…
Reference in new issue