Skip to content

Commit 4dce3b5

Browse files
committed
ci: add a versioning script to update versions automatically
1 parent 4f7e7cb commit 4dce3b5

File tree

10 files changed

+295
-61
lines changed

10 files changed

+295
-61
lines changed

bin/devkit-admin

Lines changed: 48 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,19 @@
1515
*/
1616
require('../lib/bootstrap-local');
1717

18+
19+
const {bold, gray, red, yellow, white} = require('chalk');
1820
const minimist = require('minimist');
1921
const fs = require('fs');
2022
const path = require('path');
2123

22-
const args = minimist(process.argv.slice(2));
23-
const scriptName = path.join('../scripts', args._.shift());
24+
const args = minimist(process.argv.slice(2), {
25+
boolean: ['verbose']
26+
});
27+
const scriptName = args._.shift();
28+
const scriptPath = path.join('../scripts', scriptName);
29+
30+
process.chdir(path.join(__dirname, '..'));
2431

2532

2633
// Check if we need to profile this CLI run.
@@ -50,5 +57,42 @@ if (process.env['DEVKIT_PROFILING']) {
5057
}
5158

5259

53-
process.chdir(path.join(__dirname, '..'));
54-
require(scriptName).default(args);
60+
// This might get awkward, so we fallback to console if there was an error.
61+
let logger = null;
62+
try {
63+
logger = new (require('@angular-devkit/core').IndentLogger)('root');
64+
65+
logger
66+
.filter(entry => (entry.level !== 'debug' || args.verbose))
67+
.subscribe(entry => {
68+
let color = gray;
69+
let output = process.stdout;
70+
switch (entry.level) {
71+
case 'info': color = white; break;
72+
case 'warn': color = yellow; break;
73+
case 'error': color = red; output = process.stderr; break;
74+
case 'fatal': color = x => bold(red(x)); output = process.stderr; break;
75+
}
76+
77+
output.write(color(entry.message) + '\n');
78+
});
79+
80+
logger
81+
.filter(entry => entry.level === 'fatal')
82+
.subscribe(() => {
83+
process.stderr.write('A fatal error happened. See details above.');
84+
process.exit(100);
85+
});
86+
} catch (e) {
87+
console.error(red(`Reverting to manual console logging.\nReason: ${e.message}.`));
88+
logger = {
89+
debug: console.debug.bind(console),
90+
info: console.log.bind(console),
91+
warn: console.warn.bind(console),
92+
error: console.error.bind(console),
93+
fatal: x => { console.error(x); process.exit(100); },
94+
};
95+
}
96+
97+
98+
require(scriptPath).default(args, logger);

lib/packages.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import * as path from 'path';
1313

1414
const packageRoot = path.join(__dirname, '../packages');
1515
const distRoot = path.join(__dirname, '../dist');
16-
const versions = require('../versions.json');
1716

1817

1918
export interface PackageInfo {
@@ -24,6 +23,7 @@ export interface PackageInfo {
2423
main: string;
2524
dist: string;
2625
build: string;
26+
private: boolean;
2727
packageJson: JsonObject;
2828
dependencies: string[];
2929
}
@@ -91,18 +91,14 @@ export const packages: PackageMap =
9191
bin[binName] = path.resolve(pkg.root, packageJson['bin'][binName]);
9292
});
9393

94-
if (!(name in versions)) {
95-
console.error(`ERROR: package ${name} does not have a version.`);
96-
process.exit(101);
97-
}
98-
9994
packages[name] = {
10095
build: path.join(distRoot, pkgRoot.substr(path.dirname(__dirname).length)),
10196
dist: path.join(distRoot, name),
10297
root: pkgRoot,
10398
relative: path.relative(path.dirname(__dirname), pkgRoot),
10499
main: path.resolve(pkgRoot, 'src/index.ts'),
105100
dependencies: [],
101+
private: packageJson.private,
106102
bin,
107103
name,
108104
packageJson,

package-lock.json

Lines changed: 35 additions & 19 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@
5757
"rxjs": "^5.0.1",
5858
"semver": "^5.3.0",
5959
"source-map": "^0.5.6",
60+
"tar": "^3.1.5",
6061
"temp": "^0.8.3",
6162
"ts-node": "^2.0.0",
6263
"tslint": "^4.0.2",

packages/_/benchmark/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,6 @@
33
"version": "0.0.0",
44
"description": "CLI tool for Angular",
55
"main": "src/index.js",
6-
"typings": "src/index.d.ts"
6+
"typings": "src/index.d.ts",
7+
"private": true
78
}

packages/_/schematics_cli/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,6 @@
88
},
99
"dependencies": {
1010
"@angular-devkit/schematics": "0.0.0"
11-
}
11+
},
12+
"private": true
1213
}

scripts/build.ts

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import * as fs from 'fs';
99
import * as glob from 'glob';
1010
import * as path from 'path';
1111

12-
import {JsonObject} from '@angular-devkit/core';
12+
import {JsonObject, Logger} from '@angular-devkit/core';
1313
import {packages} from '../lib/packages';
1414

1515
const minimatch = require('minimatch');
@@ -50,14 +50,14 @@ function copy(from: string, to: string) {
5050
}
5151

5252

53-
function recursiveCopy(from: string, to: string) {
53+
function recursiveCopy(from: string, to: string, logger: Logger) {
5454
if (!fs.existsSync(from)) {
55-
console.error(`File "${from}" does not exist.`);
55+
logger.error(`File "${from}" does not exist.`);
5656
process.exit(4);
5757
}
5858
if (fs.statSync(from).isDirectory()) {
5959
fs.readdirSync(from).forEach(fileName => {
60-
recursiveCopy(path.join(from, fileName), path.join(to, fileName));
60+
recursiveCopy(path.join(from, fileName), path.join(to, fileName), logger);
6161
});
6262
} else {
6363
copy(from, to);
@@ -80,8 +80,8 @@ function rimraf(p: string) {
8080
}
8181

8282

83-
export default function() {
84-
console.log('Removing dist/...');
83+
export default function(_: {}, logger: Logger) {
84+
logger.info('Removing dist/...');
8585
rimraf(path.join(__dirname, '../dist'));
8686

8787
// Order packages in order of dependency.
@@ -108,31 +108,31 @@ export default function() {
108108
} while (swapped);
109109

110110

111-
console.log('Building...');
111+
logger.info('Building...');
112112
const tsConfigPath = path.relative(process.cwd(), path.join(__dirname, '../tsconfig.json'));
113113
try {
114114
npmRun.execSync(`tsc -p "${tsConfigPath}"`);
115115
} catch (err) {
116116
const stdout = err.stdout.toString().split('\n').join('\n ');
117-
console.error(`TypeScript compiler failed:\n\nSTDOUT:\n ${stdout}`);
117+
logger.error(`TypeScript compiler failed:\n\nSTDOUT:\n ${stdout}`);
118118
process.exit(1);
119119
}
120120

121-
console.log('Moving packages to dist/');
121+
logger.info('Moving packages to dist/');
122122
for (const packageName of sortedPackages) {
123-
console.log(` ${packageName}`);
123+
logger.info(` ${packageName}`);
124124
const pkg = packages[packageName];
125-
recursiveCopy(pkg.build, pkg.dist);
125+
recursiveCopy(pkg.build, pkg.dist, logger);
126126
rimraf(pkg.build);
127127
}
128128

129-
console.log('Copying resources...');
129+
logger.info('Copying resources...');
130130
for (const packageName of sortedPackages) {
131-
console.log(` ${packageName}`);
131+
logger.info(` ${packageName}`);
132132
const pkg = packages[packageName];
133133
const pkgJson = pkg.packageJson;
134134
const files = glob.sync(path.join(pkg.root, '**/*'), { dot: true, nodir: true });
135-
console.log(` ${files.length} files total...`);
135+
logger.info(` ${files.length} files total...`);
136136
const resources = files
137137
.map((fileName) => path.relative(pkg.root, fileName))
138138
.filter(fileName => {
@@ -153,7 +153,7 @@ export default function() {
153153
if (fileName.endsWith('.ts')) {
154154
// Verify that it was actually built.
155155
if (!fs.existsSync(path.join(pkg.dist, fileName).replace(/ts$/, 'js'))) {
156-
console.error(`\nSource found but compiled file not found: "${fileName}".`);
156+
logger.error(`\nSource found but compiled file not found: "${fileName}".`);
157157
process.exit(2);
158158
}
159159

@@ -174,40 +174,40 @@ export default function() {
174174
return true;
175175
});
176176

177-
console.log(` ${resources.length} resources...`);
177+
logger.info(` ${resources.length} resources...`);
178178
resources.forEach(fileName => {
179179
copy(path.join(pkg.root, fileName), path.join(pkg.dist, fileName));
180180
});
181181
}
182182

183-
console.log('Copying extra resources...');
183+
logger.info('Copying extra resources...');
184184
for (const packageName of sortedPackages) {
185185
const pkg = packages[packageName];
186186
copy(path.join(__dirname, '../LICENSE'), path.join(pkg.dist, 'LICENSE'));
187187
}
188188

189-
console.log('Removing spec files...');
189+
logger.info('Removing spec files...');
190190
for (const packageName of sortedPackages) {
191-
console.log(` ${packageName}`);
191+
logger.info(` ${packageName}`);
192192
const pkg = packages[packageName];
193193
const files = glob.sync(path.join(pkg.dist, '**/*_spec.js'));
194-
console.log(` ${files.length} spec files found...`);
194+
logger.info(` ${files.length} spec files found...`);
195195
files.forEach(fileName => rm(fileName));
196196
}
197197

198-
console.log('Setting versions...');
198+
logger.info('Setting versions...');
199199

200-
const versions = require(path.join(__dirname, '../versions.json'));
200+
const { versions } = require(path.join(__dirname, '../versions.json'));
201201
for (const packageName of sortedPackages) {
202-
console.log(` ${packageName}`);
202+
logger.info(` ${packageName}`);
203203
const pkg = packages[packageName];
204204
const packageJsonPath = path.join(pkg.dist, 'package.json');
205205
const packageJson = pkg.packageJson;
206206

207207
if (versions[packageName]) {
208208
packageJson['version'] = versions[packageName];
209209
} else {
210-
console.log(' No version found... Only updating dependencies.');
210+
logger.info(' No version found... Only updating dependencies.');
211211
}
212212

213213
for (const depName of Object.keys(versions)) {
@@ -223,5 +223,5 @@ export default function() {
223223
fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2) + '\n');
224224
}
225225

226-
console.log(`Done.`);
226+
logger.info(`Done.`);
227227
}

0 commit comments

Comments
 (0)