| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- import { Task, TaskRunner } from './task';
- import chalk from 'chalk';
- import { coerce, satisfies } from 'semver';
- import { readFileSync } from 'fs';
- 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', '.circleci/config.yml'];
- 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("Don't forget to sync https://github.com/grafana/grafana-build-container"));
- console.log(chalk.yellow(`also if you changed the engine version in ${packageJsonFile}`));
- console.log(chalk.yellow('--------------------------------------------------------------------'));
- };
- export const nodeVersionCheckerTask = new Task<NodeVersionCheckerOptions>(
- 'Node Version Checker',
- nodeVersionCheckerRunner
- );
|