main
js 51 lines 1.54 KB
Raw
1 #!/usr/bin/env node
2
3 'use strict';
4
5 // IMPORTANT:
6 // Changes below should be mirrored in ../ci-add-build-info-json.js
7
8 const {existsSync} = require('fs');
9 const {writeJson, readJson} = require('fs-extra');
10 const {join} = require('path');
11 const {getPublicPackages, logPromise} = require('../utils');
12 const theme = require('../theme');
13
14 const run = async ({branch, checksum, commit, reactVersion, tempDirectory}) => {
15 const isExperimental = reactVersion.includes('experimental');
16 const packages = getPublicPackages(isExperimental);
17 const packagesDir = join(tempDirectory, 'packages');
18
19 const buildInfoJSON = {
20 branch,
21 buildNumber: null,
22 checksum,
23 commit,
24 environment: 'local',
25 reactVersion,
26 };
27
28 for (let i = 0; i < packages.length; i++) {
29 const packageName = packages[i];
30 const packagePath = join(packagesDir, packageName);
31 const packageJSON = await readJson(join(packagePath, 'package.json'));
32
33 // Verify all public packages include "build-info.json" in the files array.
34 if (!packageJSON.files.includes('build-info.json')) {
35 console.error(
36 theme`{error ${packageName} must include "build-info.json" in files array.}`
37 );
38 process.exit(1);
39 }
40
41 // Add build info JSON to package.
42 if (existsSync(join(packagePath, 'npm'))) {
43 const buildInfoJSONPath = join(packagePath, 'npm', 'build-info.json');
44 await writeJson(buildInfoJSONPath, buildInfoJSON, {spaces: 2});
45 }
46 }
47 };
48
49 module.exports = async params => {
50 return logPromise(run(params), 'Adding build metadata to packages');
51 };