blob: 8b8917b13ddbf80ef163b10cc6e6ea2dcf2a0e4a [file] [log] [blame]
/**
* @fileoverview this program does a trivial job of writing a dummy string to an output
*/
const worker = require('@bazel/worker');
function runOneBuild(args, inputs) {
// IMPORTANT don't log with console.out - stdout is reserved for the worker protocol.
// This is true for any code running in the program, even if it comes from a third-party library.
worker.log('Performing a build with args', args);
if (inputs) {
// The inputs help you manage a cache within the worker process
// They are available only when run as a worker, not in standalone mode
worker.log('We were run as a worker so we also got a manifest of all the inputs', inputs);
}
// Parse our arguments as usual. The worker library handles getting these out of the protocol
// buffer.
const [output] = args;
require('fs').writeFileSync(output, 'Dummy output', {encoding: 'utf-8'});
// Return true if the tool succeeded, false otherwise.
return true;
}
if (require.main === module) {
// One reason to run a program under a worker is that it takes a long time to start
// Imagine that several seconds are spent here
// Bazel will pass a special argument to the program when it's running us as a worker
if (worker.runAsWorker(process.argv)) {
worker.log('Running as a Bazel worker');
worker.runWorkerLoop(runOneBuild);
} else {
// Running standalone so stdout is available as usual
console.log('Running as a standalone process');
// Help our users get on the fast path
console.error(
'Started a new process to perform this action. Your build might be misconfigured, try --strategy=DoWork=worker');
// The first argument to the program is prefixed with '@'
// because Bazel does that for param files. Strip it first.
const paramFile = process.argv[2].replace(/^@/, '');
const args = require('fs').readFileSync(paramFile, 'utf-8').trim().split('\n');
// Bazel is just running the program as a single action, don't act like a worker
if (!runOneBuild(args)) {
process.exitCode = 1;
}
}
}