From 3ec2807e38912fd875fa110ff51b09ca5fabaff3 Mon Sep 17 00:00:00 2001 From: JoostK Date: Sat, 5 Dec 2020 16:48:04 +0100 Subject: [PATCH] refactor(compiler-cli): add script to update all golden partial files (#39989) The golden files for the partial compliance tests need to be updated with individual Bazel run invocations, which is not very ergonomic when a large number of golden files need to updated. This commit adds a script to query the Bazel targets that update the goldens and then runs those targets sequentially. PR Close #39989 --- .../compiler-cli/test/compliance/README.md | 5 +++ .../test/compliance/update_all_goldens.js | 35 +++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 packages/compiler-cli/test/compliance/update_all_goldens.js diff --git a/packages/compiler-cli/test/compliance/README.md b/packages/compiler-cli/test/compliance/README.md index acfa605089462..0f63b497ed719 100644 --- a/packages/compiler-cli/test/compliance/README.md +++ b/packages/compiler-cli/test/compliance/README.md @@ -185,6 +185,11 @@ bazel run //packages/compiler-cli/test/compliance/test_cases: where to replace `` with the path (relative to `test_cases`) of the directory that contains the `GOLDEN_PARTIAL.js` to update. +To update all golden partial files, the following command can be run: + +```sh +node packages/compiler-cli/test/compliance/update_all_goldens.js +``` ## Debugging test-cases diff --git a/packages/compiler-cli/test/compliance/update_all_goldens.js b/packages/compiler-cli/test/compliance/update_all_goldens.js new file mode 100644 index 0000000000000..be56ef57d579f --- /dev/null +++ b/packages/compiler-cli/test/compliance/update_all_goldens.js @@ -0,0 +1,35 @@ +#!/usr/bin/env node +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * 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 + */ + +// tslint:disable:no-console +const {exec} = require('shelljs'); + +process.stdout.write('Gathering all partial golden update targets'); +const queryCommand = + `yarn -s bazel query --output label 'filter('golden.update', kind(nodejs_binary, //packages/compiler-cli/test/compliance/test_cases:*))'`; +const allUpdateTargets = + exec(queryCommand, {silent: true}).trim().split('\n').map(test => test.trim()); +process.stdout.clearLine(); +process.stdout.cursorTo(0); + +for (const [index, target] of allUpdateTargets.entries()) { + const progress = `${index + 1} / ${allUpdateTargets.length}`; + process.stdout.write(`[${progress}] Running: ${target}`); + const commandResult = exec(`yarn -s bazel run ${target}`, {silent: true}); + process.stdout.clearLine(); + process.stdout.cursorTo(0); + if (commandResult.code) { + console.error(`[${progress}] Failed run: ${target}`); + console.group(); + console.error(commandResult.stdout || commandResult.stderr); + console.groupEnd(); + } else { + console.log(`[${progress}] Successful run: ${target}`); + } +}