Skip to content

Commit 36fdb9a

Browse files
author
Alex Eagle
committed
refactor: explicitly use runfiles helper
This reduces our dependence on the monkey-patched require() that makes NodeJS look at the runfiles manifest when resolving modules. Pre-factoring for changing the default of --bazel_patch_module_resolver to false
1 parent bb2a302 commit 36fdb9a

File tree

15 files changed

+46
-33
lines changed

15 files changed

+46
-33
lines changed

e2e/webapp/test.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
const fs = require('fs');
2-
const content = fs.readFileSync(require.resolve('e2e_webapp/out.min/app.js'), 'utf-8');
2+
const runfiles = require(process.env['BAZEL_NODE_RUNFILES_HELPER']);
3+
const content = fs.readFileSync(runfiles.resolve('e2e_webapp/out.min/app.js'), 'utf-8');
34
if (content.indexOf('import("./strings') < 0) {
45
console.error(content);
56
process.exitCode = 1;

internal/bazel_integration_test/test_runner.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ const spawnSync = require('child_process').spawnSync;
2323
const fs = require('fs');
2424
const path = require('path');
2525
const tmp = require('tmp');
26-
26+
const runfiles = require(process.env['BAZEL_NODE_RUNFILES_HELPER']);
2727
const DEBUG = !!process.env['BAZEL_INTEGRATION_TEST_DEBUG'];
2828
const VERBOSE_LOGS = !!process.env['VERBOSE_LOGS'];
2929

@@ -189,7 +189,7 @@ if (bazelrcImportsKeys.length && isFile(bazelrcFile)) {
189189
let bazelrcContents = fs.readFileSync(bazelrcFile, {encoding: 'utf-8'});
190190
for (const importKey of bazelrcImportsKeys) {
191191
const importContents =
192-
fs.readFileSync(require.resolve(config.bazelrcImports[importKey]), {encoding: 'utf-8'});
192+
fs.readFileSync(runfiles.resolve(config.bazelrcImports[importKey]), {encoding: 'utf-8'});
193193
bazelrcContents = bazelrcContents.replace(importKey, importContents);
194194
}
195195
fs.writeFileSync(bazelrcFile, bazelrcContents);
@@ -212,7 +212,7 @@ if (config.bazelrcAppend) {
212212
let workspaceContents = fs.readFileSync(workspaceFile, {encoding: 'utf-8'});
213213
// replace repositories
214214
for (const repositoryKey of Object.keys(config.repositories)) {
215-
const archiveFile = require.resolve(config.repositories[repositoryKey]).replace(/\\/g, '/');
215+
const archiveFile = runfiles.resolve(config.repositories[repositoryKey]).replace(/\\/g, '/');
216216
const regex =
217217
new RegExp(`(local_repository|http_archive|git_repository)\\(\\s*name\\s*\\=\\s*"${
218218
repositoryKey}"[^)]+`);
@@ -281,7 +281,7 @@ if (isFile(packageJsonFile)) {
281281

282282
const isWindows = process.platform === 'win32';
283283
const bazelBinary =
284-
require.resolve(`${config.bazelBinaryWorkspace}/bazel${isWindows ? '.exe' : ''}`);
284+
runfiles.resolve(`${config.bazelBinaryWorkspace}/bazel${isWindows ? '.exe' : ''}`);
285285

286286
if (DEBUG) {
287287
log(`

internal/check_bazel_version.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,16 @@
1616
*/
1717
'use strict';
1818

19+
const runfiles = require(process.env['BAZEL_NODE_RUNFILES_HELPER']);
1920
const fs = require('fs');
2021
const args = process.argv.slice(2);
2122

2223
const BAZEL_VERSION = args[0];
2324

2425
const version =
25-
fs.readFileSync(require.resolve('build_bazel_rules_nodejs/.bazelversion'), 'utf-8').trim();
26+
fs.readFileSync(runfiles.resolve('build_bazel_rules_nodejs/.bazelversion'), 'utf-8').trim();
2627
const bazelci_version =
27-
fs.readFileSync(require.resolve('build_bazel_rules_nodejs/.bazelci/presubmit.yml'), 'utf-8')
28+
fs.readFileSync(runfiles.resolve('build_bazel_rules_nodejs/.bazelci/presubmit.yml'), 'utf-8')
2829
.split('\n')
2930
.find(v => v.startsWith('bazel:'));
3031

internal/npm_install/test/browserify.spec.js

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
const fs = require('fs');
22
const path = require('path');
3-
const mainFile = 'build_bazel_rules_nodejs/third_party/npm/node_modules/browserify/index.js';
4-
const directory = 'build_bazel_rules_nodejs/internal/npm_install/test';
3+
const runfiles = require(process.env['BAZEL_NODE_RUNFILES_HELPER']);
4+
const mainFile =
5+
runfiles.resolve('build_bazel_rules_nodejs/third_party/npm/node_modules/browserify/index.js');
6+
const directory = runfiles.resolve('build_bazel_rules_nodejs/internal/npm_install/test');
57

68
describe('our bundled, vendored browserify binary', () => {
79
it('should preserve licenses', () => {

internal/npm_install/test/check.js

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
const fs = require('fs');
22
const path = require('path');
3-
const unidiff = require('unidiff')
3+
const unidiff = require('unidiff');
4+
const runfiles = require(process.env['BAZEL_NODE_RUNFILES_HELPER']);
45

56
function check(file, updateGolden = false) {
67
// Strip comments from generated file for comparison to golden
78
// to make comparison less brittle
8-
const actual = require.resolve(path.posix.join('fine_grained_goldens', file));
9+
const actual = runfiles.resolve(path.posix.join('fine_grained_goldens', file));
910
const actualContents =
1011
fs.readFileSync(actual, {encoding: 'utf-8'})
1112
.replace(/\r\n/g, '\n')
@@ -18,7 +19,7 @@ function check(file, updateGolden = false) {
1819
.replace(/[\n]+/g, '\n');
1920

2021
// Load the golden file for comparison
21-
const golden = require.resolve('./golden/' + file + '.golden');
22+
const golden = runfiles.resolvePackageRelative('./golden/' + file + '.golden');
2223

2324
if (updateGolden) {
2425
// Write to golden file

internal/pkg_web/test2/spec.js

+3-4
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
const fs = require('fs');
22
const path = require('path');
3+
const runfiles = require(process.env['BAZEL_NODE_RUNFILES_HELPER']);
34

4-
process.chdir(path.join(process.env['TEST_SRCDIR'], 'build_bazel_rules_nodejs'));
5-
console.error(fs.readdirSync('.'));
65
describe('pkg_web paths', () => {
76
it('should match the golden file', () => {
87
const output = 'build_bazel_rules_nodejs/internal/pkg_web/test2/pkg/index.html';
98
const golden = 'build_bazel_rules_nodejs/internal/pkg_web/test2/index_golden.html_';
10-
const actual = fs.readFileSync(require.resolve(output), {encoding: 'utf-8'});
11-
const expected = fs.readFileSync(require.resolve(golden), {encoding: 'utf-8'});
9+
const actual = fs.readFileSync(runfiles.resolve(output), {encoding: 'utf-8'});
10+
const expected = fs.readFileSync(runfiles.resolve(golden), {encoding: 'utf-8'});
1211
// make the input hermetic by replacing the cache-buster timestamp
1312
expect(actual.replace(/\?v=\d+/g, '?v=123').trim()).toBe(expected.trim());
1413
});

packages/concatjs/web_test/test/karma_typescript/user_files.spec.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
const fs = require('fs');
2+
const runfiles = require(process.env['BAZEL_NODE_RUNFILES_HELPER']);
23

34
describe('karma_web_test_suite', () => {
45
let config;
56

67
beforeAll(() => {
78
config = fs.readFileSync(
8-
require.resolve(
9+
runfiles.resolve(
910
'build_bazel_rules_nodejs/packages/concatjs/web_test/test/karma_typescript/testing_wrapped_test.conf.js'),
1011
'utf-8');
1112
});

packages/create/test.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22
* Simple node program to test that workspace creation works.
33
* We don't use a test framework here since dependencies are awkward.
44
*/
5-
const pkg = 'build_bazel_rules_nodejs/packages/create/npm_package';
5+
const runfiles = require(process.env['BAZEL_NODE_RUNFILES_HELPER']);
6+
const pkg = runfiles.resolve('build_bazel_rules_nodejs/packages/create/npm_package');
67
const fs = require('fs');
78
const {main} = require(pkg);
89

packages/labs/test/protobufjs/BUILD.bazel

+1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ ts_library(
99
deps = [
1010
":test_ts_proto",
1111
"@npm//@types/jasmine",
12+
"@npm//@types/node",
1213
],
1314
)
1415

packages/labs/test/protobufjs/test.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
import {TestMessage} from 'build_bazel_rules_nodejs/packages/labs/test/protobufjs/test_ts_proto';
1+
const runfiles = require(process.env['BAZEL_NODE_RUNFILES_HELPER']!);
2+
const {TestMessage} = require(runfiles.resolvePackageRelative('test_ts_proto.js'));
23

34
describe('protobufjs', () => {
45
it('should work in node', () => {

packages/protractor/protractor-utils.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
* limitations under the License.
1616
*/
1717

18+
const runfiles = require(process.env['BAZEL_NODE_RUNFILES_HELPER']!);
1819
import * as child_process from 'child_process';
1920
import * as net from 'net';
2021

@@ -98,7 +99,7 @@ export interface ServerSpec {
9899
export async function runServer(
99100
workspace: string, serverTarget: string, portFlag: string, serverArgs: string[],
100101
timeout = 5000): Promise<ServerSpec> {
101-
const serverPath = require.resolve(`${workspace}/${serverTarget}`);
102+
const serverPath = runfiles.resolve(`${workspace}/${serverTarget}`);
102103
const port = await findFreeTcpPort();
103104

104105
// Start the Bazel server binary with a random free TCP port.

packages/protractor/protractor.conf.js

+8-7
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
* See the License for the specific language governing permissions and
1515
* limitations under the License.
1616
*/
17+
const runfiles = require(process.env['BAZEL_NODE_RUNFILES_HELPER']);
1718
const path = require('path');
1819

1920
function log_verbose(...m) {
@@ -76,7 +77,7 @@ let conf = {};
7677

7778
// Import the user's base protractor configuration if specified
7879
if (configPath) {
79-
const baseConf = require(configPath);
80+
const baseConf = require(runfiles.resolve(configPath));
8081
if (!baseConf.config) {
8182
throw new Error('Invalid base protractor configuration. Expected config to be exported.');
8283
}
@@ -86,7 +87,7 @@ if (configPath) {
8687

8788
// Import the user's on prepare function if specified
8889
if (onPreparePath) {
89-
const onPrepare = require(onPreparePath);
90+
const onPrepare = require(runfiles.resolve(onPreparePath));
9091
if (typeof onPrepare === 'function') {
9192
const original = conf.onPrepare;
9293
conf.onPrepare = function() {
@@ -104,15 +105,15 @@ if (onPreparePath) {
104105
setConf(conf, 'framework', 'jasmine2', 'is set to jasmine2');
105106

106107
const specs =
107-
[TMPL_specs].map(s => require.resolve(s)).filter(s => /(\b|_)(spec|test)\.js$/.test(s));
108+
[TMPL_specs].map(s => runfiles.resolve(s)).filter(s => /(\b|_)(spec|test)\.js$/.test(s));
108109

109110
setConf(conf, 'specs', specs, 'are determined by the srcs and deps attribute');
110111

111112
// WEB_TEST_METADATA is configured in rules_webtesting based on value
112113
// of the browsers attribute passed to karma_web_test_suite
113114
// We setup the protractor configuration based on the values in this object
114115
if (process.env['WEB_TEST_METADATA']) {
115-
const webTestMetadata = require(process.env['WEB_TEST_METADATA']);
116+
const webTestMetadata = require(runfiles.resolve(process.env['WEB_TEST_METADATA']));
116117
log_verbose(`WEB_TEST_METADATA: ${JSON.stringify(webTestMetadata, null, 2)}`);
117118
if (webTestMetadata['environment'] === 'local') {
118119
// When a local chrome or firefox browser is chosen such as
@@ -123,8 +124,8 @@ if (process.env['WEB_TEST_METADATA']) {
123124
const webTestNamedFiles = webTestMetadata['webTestFiles'][0]['namedFiles'];
124125
const headless = !process.env['DISPLAY'];
125126
if (webTestNamedFiles['CHROMIUM']) {
126-
const chromeBin = require.resolve(webTestNamedFiles['CHROMIUM']);
127-
const chromeDriver = require.resolve(webTestNamedFiles['CHROMEDRIVER']);
127+
const chromeBin = runfiles.resolve(webTestNamedFiles['CHROMIUM']);
128+
const chromeDriver = runfiles.resolve(webTestNamedFiles['CHROMEDRIVER']);
128129

129130
// The sandbox needs to be disabled, because it causes Chrome to crash on some environments.
130131
// See: http://chromedriver.chromium.org/help/chrome-doesn-t-start
@@ -146,7 +147,7 @@ if (process.env['WEB_TEST_METADATA']) {
146147
// TODO(gmagolan): implement firefox support for protractor
147148
throw new Error('Firefox not yet support by protractor_web_test_suite');
148149

149-
// const firefoxBin = require.resolve(webTestNamedFiles['FIREFOX'])
150+
// const firefoxBin = runfiles.resolve(webTestNamedFiles['FIREFOX'])
150151
// const args = [];
151152
// if (headless) {
152153
// args.push("--headless")

packages/terser/test/directory-args.spec.js

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
const {directoryArgs} = require('build_bazel_rules_nodejs/packages/terser/index')
1+
const runfiles = require(process.env['BAZEL_NODE_RUNFILES_HELPER']);
2+
const {directoryArgs} =
3+
require(runfiles.resolve('build_bazel_rules_nodejs/packages/terser/index.js'));
24
const fs = require('fs');
35
const path = require('path');
46
const tmp = require('tmp');
@@ -43,4 +45,4 @@ describe('directoryArgs', () => {
4345
'--keep-fnames',
4446
]);
4547
});
46-
})
48+
})

packages/terser/test/exec/spec.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ const fs = require('fs');
22
const cp = require('child_process');
33
const util = require('util');
44
const assert = require('assert');
5-
6-
const terserWrap = require.resolve('build_bazel_rules_nodejs/packages/terser/index.js');
5+
const runfiles = require(process.env['BAZEL_NODE_RUNFILES_HELPER']);
6+
const terserWrap = runfiles.resolve('build_bazel_rules_nodejs/packages/terser/index.js');
77

88
if (!fs.existsSync(terserWrap)) {
99
throw new Error(

packages/terser/test/sourcemap/terser_spec.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
const fs = require('fs');
22
const sm = require('source-map');
3+
const runfiles = require(process.env['BAZEL_NODE_RUNFILES_HELPER']);
34
const DIR = 'build_bazel_rules_nodejs/packages/terser/test/sourcemap';
45

56
describe('terser sourcemap handling', () => {
67
it('should produce a sourcemap output', async () => {
7-
const file = require.resolve(DIR + '/src1.min.js.map');
8+
const file = runfiles.resolve(DIR + '/src1.min.js.map');
89
const debugBuild = /\/bazel-out\/[^/\s]*-dbg\//.test(file);
910
const rawSourceMap = JSON.parse(fs.readFileSync(file, 'utf-8'));
1011
await sm.SourceMapConsumer.with(rawSourceMap, null, consumer => {
@@ -18,4 +19,4 @@ describe('terser sourcemap handling', () => {
1819
expect(pos.name).toBe('MyClass');
1920
});
2021
});
21-
});
22+
});

0 commit comments

Comments
 (0)