Clone this repo:
  1. 3d9cd58 Bump actions/checkout from 4.1.0 to 4.1.1 (#83) by dependabot[bot] · 5 weeks ago master
  2. 1d7bed3 Bump dart-lang/setup-dart from 1.5.1 to 1.6.0 (#84) by dependabot[bot] · 5 weeks ago
  3. b1b6a66 Bump actions/checkout from 3.6.0 to 4.1.0 (#82) by dependabot[bot] · 9 weeks ago
  4. bb9e48d Bump dart-lang/setup-dart from 1.5.0 to 1.5.1 (#81) by dependabot[bot] · 10 weeks ago
  5. 159e671 Bump actions/checkout from 3.5.3 to 3.6.0 (#80) by dependabot[bot] · 3 months ago

Tools for creating a persistent worker loop for bazel.

Usage

There are two abstract classes provided by this package, AsyncWorkerLoop and SyncWorkerLoop. These each have a performRequest method which you must implement.

Lets look at a simple example of a SyncWorkerLoop implementation:

import 'dart:io';
import 'package:bazel_worker/bazel_worker.dart';

void main() {
  // Blocks until it gets an EOF from stdin.
  SyncSimpleWorker().run();
}

class SyncSimpleWorker extends SyncWorkerLoop {
  /// Must synchronously return a [WorkResponse], since this is a
  /// [SyncWorkerLoop].
  WorkResponse performRequest(WorkRequest request) {
    File('hello.txt').writeAsStringSync('hello world!');
    return WorkResponse()..exitCode = EXIT_CODE_OK;
  }
}

And now the same thing, implemented as an AsyncWorkerLoop:

import 'dart:io';
import 'package:bazel_worker/bazel_worker.dart';

void main() {
  // Doesn't block, runs tasks async as they are received on stdin.
  AsyncSimpleWorker().run();
}

class AsyncSimpleWorker extends AsyncWorkerLoop {
  /// Must return a [Future<WorkResponse>], since this is an
  /// [AsyncWorkerLoop].
  Future<WorkResponse> performRequest(WorkRequest request) async {
    await File('hello.txt').writeAsString('hello world!');
    return WorkResponse()..exitCode = EXIT_CODE_OK;
  }
}

As you can see, these are nearly identical, it mostly comes down to the constraints on your package and personal preference which one you choose to implement.

Testing

A package:bazel_worker/testing.dart file is also provided, which can greatly assist with writing unit tests for your worker. See the test/worker_loop_test.dart test included in this package for an example of how the helpers can be used.

Features and bugs

Please file feature requests and bugs at the issue tracker.