|
| 1 | +# Dart toolchain + tasks. Loaded when MISE_ENV includes `dart`. |
| 2 | + |
| 3 | +[vars] |
| 4 | +# Google dart-archive base URLs — the release tree and the bucket listing — |
| 5 | +# referenced by [tools.dart] below so its url/version_list_url stay one line. |
| 6 | +dart_release = "https://storage.googleapis.com/dart-archive/channels/stable/release" |
| 7 | +dart_bucket = "https://storage.googleapis.com/storage/v1/b/dart-archive/o" |
| 8 | + |
| 9 | +[tools] |
| 10 | +"cargo:dart-typegen" = "latest" |
| 11 | + |
| 12 | +# dart isn't an aqua/registry tool — install it straight from Google's dart |
| 13 | +# archive, discovering the latest stable from the bucket listing. `{{ version }}` |
| 14 | +# etc. resolve in the tool-url context; the static host/path prefix is a var. |
| 15 | +[tools.dart] |
| 16 | +version = "latest" |
| 17 | +url = "{{ vars.dart_release }}/{{ version }}/sdk/dartsdk-{{ os() }}-{{ arch() }}-release.zip" |
| 18 | +version_list_url = "{{ vars.dart_bucket }}?prefix=channels/stable/release/&delimiter=/" |
| 19 | +version_expr = ''' |
| 20 | +fromJSON(body).prefixes |
| 21 | +| filter({ # matches "^channels/stable/release/(\\d+\\.\\d+\\.\\d+)/$" }) |
| 22 | +| map({split(#, "/")[3]}) |
| 23 | +| sortVersions()''' |
| 24 | + |
| 25 | +[tasks.dart-pub-get] |
| 26 | +# `dart format` and `dart analyze` walk up to find pubspec.yaml *and* read |
| 27 | +# `.dart_tool/package_config.json` if present. With package_config.json, the |
| 28 | +# formatter picks the package's exact language version; without it, it |
| 29 | +# falls back to a different default — same source file, different output. |
| 30 | +# That mismatch is invisible locally (we accumulate .dart_tool/ over time) |
| 31 | +# but bites CI's fresh checkout. Run `dart pub get` for every Dart package |
| 32 | +# before any dart-* task so .dart_tool/ exists and the format is stable. |
| 33 | +run = """ |
| 34 | +dart pub get --directory generated/dart-ws |
| 35 | +dart pub get --directory services/ws-modules/dart-comm1 |
| 36 | +""" |
| 37 | +shell = "bash -euo pipefail -c" |
| 38 | + |
| 39 | +[tasks.dart-check] |
| 40 | +depends = ["dart-pub-get"] |
| 41 | +run = "dart analyze services/ws-modules/dart-comm1/ generated/dart-ws/" |
| 42 | + |
| 43 | +[tasks.dart-fmt] |
| 44 | +depends = ["dart-pub-get"] |
| 45 | +run = "dart format services/ws-modules/dart-comm1/ generated/dart-ws/" |
| 46 | + |
| 47 | +[tasks.dart-fmt-check] |
| 48 | +depends = ["dart-pub-get"] |
| 49 | +# Parallel of cargo-fmt-check: fail if any tracked Dart source would be |
| 50 | +# reformatted, so CI enforces the same formatting `dart-fmt` applies. |
| 51 | +run = "dart format --output=none --set-exit-if-changed services/ws-modules/dart-comm1/ generated/dart-ws/" |
| 52 | + |
| 53 | +# Namespaced aggregators picked up by the default config's globbed `check`/`fmt`. |
| 54 | +[tasks."check:dart"] |
| 55 | +depends = ["dart-check", "dart-fmt-check"] |
| 56 | +description = "Run Dart checks (analyze + format-check)" |
| 57 | + |
| 58 | +[tasks."fmt:dart"] |
| 59 | +depends = ["dart-fmt"] |
| 60 | +description = "Format Dart sources" |
| 61 | + |
| 62 | +[tasks.build-ws-dart-comm1-module] |
| 63 | +description = "Build the dart-comm1 workflow module" |
| 64 | +dir = "services/ws-modules/dart-comm1" |
| 65 | +run = """ |
| 66 | +dart pub get |
| 67 | +dart compile js lib/dart_comm1.dart -o pkg/et_ws_dart_comm1_compiled.js --no-source-maps |
| 68 | +""" |
| 69 | +shell = "bash -euo pipefail -c" |
| 70 | + |
| 71 | +[tasks."prefetch:dart"] |
| 72 | +description = "Prefetch Dart (pub) dependencies" |
| 73 | +run = "dart pub get --directory services/ws-modules/dart-comm1" |
| 74 | + |
| 75 | +[tasks."gen:dart-ws"] |
| 76 | +depends = ["gen:ws-spec"] |
| 77 | +description = "Emit the Dart sealed-class WS client via dart-typegen (consumes generated/specs/ws.kdl from gen:ws-spec)" |
| 78 | +shell = "bash -euo pipefail -c" |
| 79 | +# dart-typegen exits 0 on Windows but writes an empty .dart file, which |
| 80 | +# would clobber the committed source and fail gen-specs-check. Skip the |
| 81 | +# regen there; the committed file (regenerated on Linux/macOS) stays |
| 82 | +# canonical. |
| 83 | +run = """ |
| 84 | +[[ "${OS:-}" == "Windows_NT" ]] && { echo "gen:dart-ws: skipped on Windows (dart-typegen empty output)"; exit 0; } |
| 85 | +mkdir -p generated/dart-ws/lib |
| 86 | +dart-typegen generate -i generated/specs/ws.kdl -o generated/dart-ws/lib/ws_messages.dart |
| 87 | +dart format generated/dart-ws/lib/ws_messages.dart |
| 88 | +""" |
0 commit comments