From 306f50d5b8092e1e0531c6d38dc43594ab3316e8 Mon Sep 17 00:00:00 2001 From: Moritz Date: Mon, 6 Oct 2025 16:21:56 +0200 Subject: [PATCH 1/6] Update bazel_worker --- .github/workflows/bazel_worker.yaml | 16 ++++++++++++--- pkgs/bazel_worker/CHANGELOG.md | 5 +++++ pkgs/bazel_worker/e2e_test/pubspec.yaml | 7 ++++--- pkgs/bazel_worker/pubspec.yaml | 9 ++++++--- pkgs/bazel_worker/tool/travis.sh | 26 ------------------------- 5 files changed, 28 insertions(+), 35 deletions(-) delete mode 100755 pkgs/bazel_worker/tool/travis.sh diff --git a/.github/workflows/bazel_worker.yaml b/.github/workflows/bazel_worker.yaml index 40b922757..c633e1a4b 100644 --- a/.github/workflows/bazel_worker.yaml +++ b/.github/workflows/bazel_worker.yaml @@ -34,7 +34,17 @@ jobs: with: sdk: ${{ matrix.sdk }} - run: dart pub get - - run: "dart format --output=none --set-exit-if-changed ." + + - run: dart format --output=none --set-exit-if-changed . if: ${{ matrix.sdk == 'dev' }} - - name: Test - run: ./tool/travis.sh + + - run: dart analyze --fatal-infos + + - run: dart run benchmark/benchmark.dart + + - run: dart test + + - name: dart test e2e_test + run: | + cd e2e_test + dart test diff --git a/pkgs/bazel_worker/CHANGELOG.md b/pkgs/bazel_worker/CHANGELOG.md index bdc46f5f8..6eb3eb30b 100644 --- a/pkgs/bazel_worker/CHANGELOG.md +++ b/pkgs/bazel_worker/CHANGELOG.md @@ -1,3 +1,8 @@ +## 1.1.4 + +* Require Dart SDK `^3.9.0`. +* Widen `package:protobuf` constraint to allow 5.0.0 and requiring minimum 4.0.0. + ## 1.1.3 * Require Dart SDK `^3.4.0`. diff --git a/pkgs/bazel_worker/e2e_test/pubspec.yaml b/pkgs/bazel_worker/e2e_test/pubspec.yaml index 7eaa89a16..91928c56a 100644 --- a/pkgs/bazel_worker/e2e_test/pubspec.yaml +++ b/pkgs/bazel_worker/e2e_test/pubspec.yaml @@ -1,12 +1,13 @@ name: e2e_test publish_to: none +resolution: workspace + environment: - sdk: ^3.4.0 + sdk: ^3.9.0 dependencies: - bazel_worker: - path: ../ + bazel_worker: any dev_dependencies: cli_util: ^0.4.2 diff --git a/pkgs/bazel_worker/pubspec.yaml b/pkgs/bazel_worker/pubspec.yaml index 4bd06443f..b88b7d49e 100644 --- a/pkgs/bazel_worker/pubspec.yaml +++ b/pkgs/bazel_worker/pubspec.yaml @@ -1,16 +1,19 @@ name: bazel_worker -version: 1.1.3 +version: 1.1.4 description: >- Protocol and utilities to implement or invoke persistent bazel workers. repository: https://github.com/dart-lang/tools/tree/main/pkgs/bazel_worker issue_tracker: https://github.com/dart-lang/tools/issues?q=is%3Aissue+is%3Aopen+label%3Apackage%3Abazel_worker +workspace: + - e2e_test + environment: - sdk: ^3.4.0 + sdk: ^3.8.0 dependencies: async: ^2.5.0 - protobuf: ">=3.0.0 <5.0.0" + protobuf: ">=4.0.0 <6.0.0" dev_dependencies: dart_flutter_team_lints: ^3.0.0 diff --git a/pkgs/bazel_worker/tool/travis.sh b/pkgs/bazel_worker/tool/travis.sh deleted file mode 100755 index 05adb02d5..000000000 --- a/pkgs/bazel_worker/tool/travis.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file -# for details. All rights reserved. Use of this source code is governed by a -# BSD-style license that can be found in the LICENSE file. - -# Fast fail the script on failures. -set -e - -dart pub get - -# Verify that the libraries are error free. -dart analyze --fatal-infos \ - lib/bazel_worker.dart \ - lib/driver.dart \ - lib/testing.dart \ - test/test_all.dart - -# Run the tests. -dart test - -pushd e2e_test -dart pub get -dart analyze --fatal-infos test/e2e_test.dart -dart test -popd From afc3e713badb087d04b914875e3dd66bff0cb949 Mon Sep 17 00:00:00 2001 From: Moritz Date: Mon, 6 Oct 2025 16:23:57 +0200 Subject: [PATCH 2/6] run stable --- .github/workflows/bazel_worker.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/bazel_worker.yaml b/.github/workflows/bazel_worker.yaml index c633e1a4b..5582a9f80 100644 --- a/.github/workflows/bazel_worker.yaml +++ b/.github/workflows/bazel_worker.yaml @@ -27,7 +27,7 @@ jobs: strategy: fail-fast: false matrix: - sdk: [3.4, dev] + sdk: [stable, dev] steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 - uses: dart-lang/setup-dart@e51d8e571e22473a2ddebf0ef8a2123f0ab2c02c From 5fe6ba78dde84d07c4a39223ed1322124d6cc5d8 Mon Sep 17 00:00:00 2001 From: Moritz Date: Mon, 6 Oct 2025 16:24:29 +0200 Subject: [PATCH 3/6] Formatting --- .../e2e_test/lib/async_worker.dart | 2 +- pkgs/bazel_worker/example/client.dart | 9 ++-- .../lib/src/async_message_grouper.dart | 6 +-- pkgs/bazel_worker/lib/src/driver/driver.dart | 54 ++++++++++--------- .../lib/src/driver/driver_connection.dart | 10 ++-- .../lib/src/message_grouper_state.dart | 6 +-- .../lib/src/worker/async_worker_loop.dart | 2 +- .../lib/src/worker/sync_worker_loop.dart | 2 +- .../lib/src/worker/worker_connection.dart | 23 ++++---- pkgs/bazel_worker/lib/testing.dart | 6 +-- pkgs/bazel_worker/test/worker_loop_test.dart | 3 +- 11 files changed, 61 insertions(+), 62 deletions(-) diff --git a/pkgs/bazel_worker/e2e_test/lib/async_worker.dart b/pkgs/bazel_worker/e2e_test/lib/async_worker.dart index 55f517134..1c10bc0f8 100644 --- a/pkgs/bazel_worker/e2e_test/lib/async_worker.dart +++ b/pkgs/bazel_worker/e2e_test/lib/async_worker.dart @@ -12,7 +12,7 @@ import 'package:bazel_worker/bazel_worker.dart'; class ExampleAsyncWorker extends AsyncWorkerLoop { /// Set [sendPort] to run in an isolate. ExampleAsyncWorker([SendPort? sendPort]) - : super(connection: AsyncWorkerConnection(sendPort: sendPort)); + : super(connection: AsyncWorkerConnection(sendPort: sendPort)); @override Future performRequest(WorkRequest request) async { diff --git a/pkgs/bazel_worker/example/client.dart b/pkgs/bazel_worker/example/client.dart index 326bb180b..13cbea77e 100644 --- a/pkgs/bazel_worker/example/client.dart +++ b/pkgs/bazel_worker/example/client.dart @@ -5,12 +5,9 @@ import 'package:bazel_worker/driver.dart'; void main() async { var scratchSpace = await Directory.systemTemp.createTemp(); var driver = BazelWorkerDriver( - () => Process.start( - Platform.resolvedExecutable, - [ - Platform.script.resolve('worker.dart').toFilePath(), - ], - workingDirectory: scratchSpace.path), + () => Process.start(Platform.resolvedExecutable, [ + Platform.script.resolve('worker.dart').toFilePath(), + ], workingDirectory: scratchSpace.path), maxWorkers: 4, ); var response = await driver.doWork(WorkRequest(arguments: ['foo'])); diff --git a/pkgs/bazel_worker/lib/src/async_message_grouper.dart b/pkgs/bazel_worker/lib/src/async_message_grouper.dart index 8fc47780a..547ee6af0 100644 --- a/pkgs/bazel_worker/lib/src/async_message_grouper.dart +++ b/pkgs/bazel_worker/lib/src/async_message_grouper.dart @@ -41,15 +41,15 @@ class AsyncMessageGrouper implements MessageGrouper { int _messagePos = 0; AsyncMessageGrouper(Stream> inputStream) - : _inputQueue = StreamQueue(inputStream); + : _inputQueue = StreamQueue(inputStream); /// Returns the next full message that is received, or null if none are left. @override Future?> get next async { try { // Loop while there is data in the input buffer or the input stream. - while ( - _inputBufferPos != _inputBuffer.length || await _inputQueue.hasNext) { + while (_inputBufferPos != _inputBuffer.length || + await _inputQueue.hasNext) { // If the input buffer is empty fill it from the input stream. if (_inputBufferPos == _inputBuffer.length) { _inputBuffer = await _inputQueue.next; diff --git a/pkgs/bazel_worker/lib/src/driver/driver.dart b/pkgs/bazel_worker/lib/src/driver/driver.dart index 06cf0feb1..954517e4e 100644 --- a/pkgs/bazel_worker/lib/src/driver/driver.dart +++ b/pkgs/bazel_worker/lib/src/driver/driver.dart @@ -49,9 +49,9 @@ class BazelWorkerDriver { int? maxIdleWorkers, int? maxWorkers, int? maxRetries, - }) : _maxIdleWorkers = maxIdleWorkers ?? 4, - _maxWorkers = maxWorkers ?? 4, - _maxRetries = maxRetries ?? 4; + }) : _maxIdleWorkers = maxIdleWorkers ?? 4, + _maxWorkers = maxWorkers ?? 4, + _maxRetries = maxRetries ?? 4; /// Waits for an available worker, and then sends [WorkRequest] to it. /// @@ -111,29 +111,31 @@ class BazelWorkerDriver { // work queue. var futureWorker = _spawnWorker(); _spawningWorkers.add(futureWorker); - futureWorker.then((worker) { - _spawningWorkers.remove(futureWorker); - _readyWorkers.add(worker); - var connection = StdDriverConnection.forWorker(worker); - _workerConnections[worker] = connection; - _runWorker(worker, attempt); - - // When the worker exits we should retry running the work queue in case - // there is more work to be done. This is primarily just a defensive - // thing but is cheap to do. - // - // We don't use `exitCode` because it is null for detached processes ( - // which is common for workers). - connection.done.then((_) { - _idleWorkers.remove(worker); - _readyWorkers.remove(worker); - _runWorkQueue(); - }); - }).onError((e, s) { - _spawningWorkers.remove(futureWorker); - if (attempt.responseCompleter.isCompleted) return; - attempt.responseCompleter.completeError(e, s); - }); + futureWorker + .then((worker) { + _spawningWorkers.remove(futureWorker); + _readyWorkers.add(worker); + var connection = StdDriverConnection.forWorker(worker); + _workerConnections[worker] = connection; + _runWorker(worker, attempt); + + // When the worker exits we should retry running the work queue in case + // there is more work to be done. This is primarily just a defensive + // thing but is cheap to do. + // + // We don't use `exitCode` because it is null for detached processes ( + // which is common for workers). + connection.done.then((_) { + _idleWorkers.remove(worker); + _readyWorkers.remove(worker); + _runWorkQueue(); + }); + }) + .onError((e, s) { + _spawningWorkers.remove(futureWorker); + if (attempt.responseCompleter.isCompleted) return; + attempt.responseCompleter.completeError(e, s); + }); } // Recursively calls itself until one of the bail out conditions are met. _runWorkQueue(); diff --git a/pkgs/bazel_worker/lib/src/driver/driver_connection.dart b/pkgs/bazel_worker/lib/src/driver/driver_connection.dart index 80d5c98cf..0d3e54dc3 100644 --- a/pkgs/bazel_worker/lib/src/driver/driver_connection.dart +++ b/pkgs/bazel_worker/lib/src/driver/driver_connection.dart @@ -37,13 +37,13 @@ class StdDriverConnection implements DriverConnection { StdDriverConnection({ Stream>? inputStream, StreamSink>? outputStream, - }) : _messageGrouper = AsyncMessageGrouper(inputStream ?? stdin), - _outputStream = outputStream ?? stdout; + }) : _messageGrouper = AsyncMessageGrouper(inputStream ?? stdin), + _outputStream = outputStream ?? stdout; factory StdDriverConnection.forWorker(Process worker) => StdDriverConnection( - inputStream: worker.stdout, - outputStream: worker.stdin, - ); + inputStream: worker.stdout, + outputStream: worker.stdin, + ); /// Note: This will attempts to recover from invalid proto messages by parsing /// them as strings. This is a common error case for workers (they print a diff --git a/pkgs/bazel_worker/lib/src/message_grouper_state.dart b/pkgs/bazel_worker/lib/src/message_grouper_state.dart index 26568354b..3b90096ad 100644 --- a/pkgs/bazel_worker/lib/src/message_grouper_state.dart +++ b/pkgs/bazel_worker/lib/src/message_grouper_state.dart @@ -109,9 +109,9 @@ class _MessageReader { int _numMessageBytesReceived = 0; _MessageReader(int length) - : _message = Uint8List(length), - _length = length, - _done = length == 0; + : _message = Uint8List(length), + _length = length, + _done = length == 0; /// Reads [byte] into [_message]. void readByte(int byte) { diff --git a/pkgs/bazel_worker/lib/src/worker/async_worker_loop.dart b/pkgs/bazel_worker/lib/src/worker/async_worker_loop.dart index a95d09a1f..2d36810bd 100644 --- a/pkgs/bazel_worker/lib/src/worker/async_worker_loop.dart +++ b/pkgs/bazel_worker/lib/src/worker/async_worker_loop.dart @@ -16,7 +16,7 @@ abstract class AsyncWorkerLoop implements WorkerLoop { final AsyncWorkerConnection connection; AsyncWorkerLoop({AsyncWorkerConnection? connection}) - : connection = connection ?? StdAsyncWorkerConnection(); + : connection = connection ?? StdAsyncWorkerConnection(); /// Perform a single [WorkRequest], and return a [WorkResponse]. @override diff --git a/pkgs/bazel_worker/lib/src/worker/sync_worker_loop.dart b/pkgs/bazel_worker/lib/src/worker/sync_worker_loop.dart index 51da684ab..116588e90 100644 --- a/pkgs/bazel_worker/lib/src/worker/sync_worker_loop.dart +++ b/pkgs/bazel_worker/lib/src/worker/sync_worker_loop.dart @@ -15,7 +15,7 @@ abstract class SyncWorkerLoop implements WorkerLoop { final SyncWorkerConnection connection; SyncWorkerLoop({SyncWorkerConnection? connection}) - : connection = connection ?? StdSyncWorkerConnection(); + : connection = connection ?? StdSyncWorkerConnection(); /// Perform a single [WorkRequest], and return a [WorkResponse]. @override diff --git a/pkgs/bazel_worker/lib/src/worker/worker_connection.dart b/pkgs/bazel_worker/lib/src/worker/worker_connection.dart index fd5508e4a..203c384f3 100644 --- a/pkgs/bazel_worker/lib/src/worker/worker_connection.dart +++ b/pkgs/bazel_worker/lib/src/worker/worker_connection.dart @@ -33,13 +33,12 @@ abstract class AsyncWorkerConnection implements WorkerConnection { Stream>? inputStream, StreamSink>? outputStream, SendPort? sendPort, - }) => - sendPort == null - ? StdAsyncWorkerConnection( - inputStream: inputStream, - outputStream: outputStream, - ) - : SendPortAsyncWorkerConnection(sendPort); + }) => sendPort == null + ? StdAsyncWorkerConnection( + inputStream: inputStream, + outputStream: outputStream, + ) + : SendPortAsyncWorkerConnection(sendPort); @override Future readRequest(); @@ -59,8 +58,8 @@ class StdAsyncWorkerConnection implements AsyncWorkerConnection { StdAsyncWorkerConnection({ Stream>? inputStream, StreamSink>? outputStream, - }) : _messageGrouper = AsyncMessageGrouper(inputStream ?? stdin), - _outputStream = outputStream ?? stdout; + }) : _messageGrouper = AsyncMessageGrouper(inputStream ?? stdin), + _outputStream = outputStream ?? stdout; @override Future readRequest() async { @@ -89,7 +88,7 @@ class SendPortAsyncWorkerConnection implements AsyncWorkerConnection { } SendPortAsyncWorkerConnection._(this.receivePort, this.sendPort) - : receivePortIterator = StreamIterator(receivePort.cast()); + : receivePortIterator = StreamIterator(receivePort.cast()); @override Future readRequest() async { @@ -110,8 +109,8 @@ class StdSyncWorkerConnection implements SyncWorkerConnection { final Stdout _stdoutStream; StdSyncWorkerConnection({Stdin? stdinStream, Stdout? stdoutStream}) - : _messageGrouper = SyncMessageGrouper(stdinStream ?? stdin), - _stdoutStream = stdoutStream ?? stdout; + : _messageGrouper = SyncMessageGrouper(stdinStream ?? stdin), + _stdoutStream = stdoutStream ?? stdout; @override WorkRequest? readRequest() { diff --git a/pkgs/bazel_worker/lib/testing.dart b/pkgs/bazel_worker/lib/testing.dart index 7aefabbd8..7593872fb 100644 --- a/pkgs/bazel_worker/lib/testing.dart +++ b/pkgs/bazel_worker/lib/testing.dart @@ -130,7 +130,7 @@ class TestSyncWorkerConnection extends StdSyncWorkerConnection final List responses = []; TestSyncWorkerConnection(Stdin stdinStream, Stdout stdoutStream) - : super(stdinStream: stdinStream, stdoutStream: stdoutStream); + : super(stdinStream: stdinStream, stdoutStream: stdoutStream); @override void writeResponse(WorkResponse response) { @@ -148,7 +148,7 @@ class TestSyncWorkerLoop extends SyncWorkerLoop implements TestWorkerLoop { final String? printMessage; TestSyncWorkerLoop(SyncWorkerConnection connection, {this.printMessage}) - : super(connection: connection); + : super(connection: connection); @override WorkResponse performRequest(WorkRequest request) { @@ -193,7 +193,7 @@ class TestAsyncWorkerLoop extends AsyncWorkerLoop implements TestWorkerLoop { final String? printMessage; TestAsyncWorkerLoop(AsyncWorkerConnection connection, {this.printMessage}) - : super(connection: connection); + : super(connection: connection); @override Future performRequest(WorkRequest request) async { diff --git a/pkgs/bazel_worker/test/worker_loop_test.dart b/pkgs/bazel_worker/test/worker_loop_test.dart index 24068b1d8..4461c7324 100644 --- a/pkgs/bazel_worker/test/worker_loop_test.dart +++ b/pkgs/bazel_worker/test/worker_loop_test.dart @@ -83,7 +83,8 @@ void runTests( expect( printMessages, isEmpty, - reason: 'The worker loop should hide all print calls from the parent ' + reason: + 'The worker loop should hide all print calls from the parent ' 'zone.', ); From 23c2d5c3fc2405f32808aa20cbe613d413f1106f Mon Sep 17 00:00:00 2001 From: Moritz Date: Mon, 6 Oct 2025 16:26:57 +0200 Subject: [PATCH 4/6] use 3.9 --- pkgs/bazel_worker/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/bazel_worker/pubspec.yaml b/pkgs/bazel_worker/pubspec.yaml index b88b7d49e..42855a05d 100644 --- a/pkgs/bazel_worker/pubspec.yaml +++ b/pkgs/bazel_worker/pubspec.yaml @@ -9,7 +9,7 @@ workspace: - e2e_test environment: - sdk: ^3.8.0 + sdk: ^3.9.0 dependencies: async: ^2.5.0 From c79fc982731323acc7e85d024e58dbab0b3c8b11 Mon Sep 17 00:00:00 2001 From: Moritz Date: Mon, 6 Oct 2025 16:29:26 +0200 Subject: [PATCH 5/6] Add licenses --- pkgs/bazel_worker/example/client.dart | 4 ++++ pkgs/bazel_worker/example/worker.dart | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/pkgs/bazel_worker/example/client.dart b/pkgs/bazel_worker/example/client.dart index 13cbea77e..847e80a77 100644 --- a/pkgs/bazel_worker/example/client.dart +++ b/pkgs/bazel_worker/example/client.dart @@ -1,3 +1,7 @@ +// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + import 'dart:io'; import 'package:bazel_worker/driver.dart'; diff --git a/pkgs/bazel_worker/example/worker.dart b/pkgs/bazel_worker/example/worker.dart index ba3f48cc7..bba2c20c4 100644 --- a/pkgs/bazel_worker/example/worker.dart +++ b/pkgs/bazel_worker/example/worker.dart @@ -1,3 +1,7 @@ +// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + import 'dart:io'; import 'package:bazel_worker/bazel_worker.dart'; From e1cf583c8109a860a7f8670503a34894af3dfe57 Mon Sep 17 00:00:00 2001 From: Moritz Date: Tue, 7 Oct 2025 09:40:30 +0200 Subject: [PATCH 6/6] Add commetn --- pkgs/bazel_worker/pubspec.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/pkgs/bazel_worker/pubspec.yaml b/pkgs/bazel_worker/pubspec.yaml index 42855a05d..dd10193fc 100644 --- a/pkgs/bazel_worker/pubspec.yaml +++ b/pkgs/bazel_worker/pubspec.yaml @@ -5,6 +5,7 @@ description: >- repository: https://github.com/dart-lang/tools/tree/main/pkgs/bazel_worker issue_tracker: https://github.com/dart-lang/tools/issues?q=is%3Aissue+is%3Aopen+label%3Apackage%3Abazel_worker +# Using a workspace so the integration tests resolve to the local version of this package. workspace: - e2e_test