Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion ng-dev/misc/cli.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import {Argv} from 'yargs';
import {BuildAndLinkCommandModule} from './build-and-link/cli.js';
import {UpdateYarnCommandModule} from './update-yarn/cli.js';
import {ValidateLicensesModule} from './validate-licenses/cli.js';
import {GeneratedFilesModule} from './generated-files/cli.js';

/** Build the parser for the misc commands. */
export function buildMiscParser(localYargs: Argv) {
Expand All @@ -18,5 +19,6 @@ export function buildMiscParser(localYargs: Argv) {
.strict()
.command(BuildAndLinkCommandModule)
.command(UpdateYarnCommandModule)
.command(ValidateLicensesModule);
.command(ValidateLicensesModule)
.command(GeneratedFilesModule);
}
25 changes: 25 additions & 0 deletions ng-dev/misc/generated-files/cli.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
/**
* @license
* Copyright Google LLC
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/

import {Argv, CommandModule} from 'yargs';
import {updateGeneratedFileTargets} from './update-generated-files.js';

async function builder(argv: Argv) {
return argv;
}
async function handler() {
await updateGeneratedFileTargets();
}

/** CLI command module. */
export const GeneratedFilesModule: CommandModule = {
builder,
handler,
command: 'update-generated-files',
describe: 'Automatically discover all bazel generated file targets and update them.',
};
48 changes: 48 additions & 0 deletions ng-dev/misc/generated-files/update-generated-files.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
/**
* @license
* Copyright Google LLC
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/

import {ChildProcess} from '../../utils/child-process.js';
import {Spinner} from '../../utils/spinner.js';
import {getBazelBin} from '../../utils/bazel-bin.js';
import {green, Log} from '../../utils/logging.js';

export async function updateGeneratedFileTargets(): Promise<void> {
const spinner = new Spinner('Querying for all generated file targets');

// Query for all of the generated file targets
const result = await ChildProcess.spawn(
getBazelBin(),
['query', `"kind(nodejs_binary, //...) intersect attr(name, '.update$', //...)"`],
{mode: 'silent'},
);

if (result.status !== 0) {
spinner.complete();
throw Error(`Unexpected error: ${result.stderr}`);
}

const targets = result.stdout.trim().split(/\r?\n/);
spinner.update(`Found ${targets.length} generated file targets to update`);

// Build all of the generated file targets in parallel.
await ChildProcess.spawn(getBazelBin(), ['build', targets.join(' ')], {mode: 'silent'});

// Individually run the generated file update targets.
for (let idx = 0; idx < targets.length; idx++) {
const target = targets[idx];
spinner.update(`${idx + 1} of ${targets.length} updates completed`);
const updateResult = await ChildProcess.spawn(getBazelBin(), ['run', target], {mode: 'silent'});
if (updateResult.status !== 0) {
spinner.complete();
throw Error(`Unexpected error while updating: ${target}.`);
}
}

spinner.complete();
Log.info(` ${green('✔')} Updated all generated files (${targets.length} targets)`);
}
20 changes: 20 additions & 0 deletions ng-dev/utils/bazel-bin.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
/**
* @license
* Copyright Google LLC
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/

import {join} from 'path';
import {determineRepoBaseDirFromCwd} from './repo-directory.js';

let BAZEL_BIN: undefined | string = undefined;

export function getBazelBin() {
if (BAZEL_BIN === undefined) {
BAZEL_BIN = process.env.BAZEL || join(determineRepoBaseDirFromCwd(), 'node_modules/.bin/bazel');
}

return BAZEL_BIN;
}
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
"ng-dev": "bash ./tools/local-dev.sh",
"lint": "yarn tslint -c tslint.json --project tsconfig.json",
"build-env-stamp": "tsx --tsconfig tsconfig.json ./ng-dev/release/stamping/_private_main.ts build-env-stamp",
"update-generated-files": "tsx --tsconfig tsconfig.json ./tools/update-generated-files.ts",
"update-generated-files": "yarn ng-dev misc update-generated-files",
"pack": "bazel run //:npm_package.pack --config=release"
},
"exports": {
Expand Down
42 changes: 0 additions & 42 deletions tools/update-generated-files.ts

This file was deleted.