Track publishing the wdio_flutter Dart contract to pub.dev, gated on standing up the official webdriverio verified publisher.
Context
wdio_flutter is the app-side cooperative contract for @wdio/flutter-service — it gates browser.flutter.execute (Dart handlers) and browser.flutter.mock (the cooperative mock registry). It is not needed for native automation (find/tap/deeplink/contexts/logs all work via appium-flutter-driver without it), so it does not block the flutter service itself — only the execute/mock features for end users.
#466 wired releasekit's pub.dev publishing but left it disabled (publish.pub.enabled: false) so it doesn't gate @wdio/flutter-service prereleases. pub.dev rights are stricter than crates.io (no personal-token "create on first publish"; the first publish must be manual on an already-registered package, then automated publishing is configured), so we want the official publisher in place rather than publishing under a personal account.
Blocker
Release runbook (once the publisher exists)
- Flip
publish.pub.enabled → true in releasekit.config.json.
- Manual first publish:
dart pub publish from packages/flutter-service/wdio_flutter under the webdriverio publisher (pub.dev OIDC only works after the package exists). The pubspec is linked to the service version, so this publishes whatever @wdio/flutter-service is at by then.
- On pub.dev → the package → Admin → enable "Automated publishing from GitHub Actions" (repo
webdriverio/desktop-mobile, the release workflow). The Setup Dart step + id-token: write are already wired in _release.reusable.yml.
- Subsequent versions auto-publish via releasekit, linked to
@wdio/flutter-service.
Pre-staged in #466 (ready to flip on)
version.groups.flutter (linked: @wdio/flutter-service + wdio_flutter), version.pub (pubspec bump), scope:flutter covers wdio_flutter.
wdio_flutter/LICENSE + CHANGELOG.md (pub.dev requirements); pubspec aligned to the linked baseline.
Setup Dart CI step (dart-lang/setup-dart@v1, OIDC token exchange).
Naming — verified wdio_flutter is correct
- The underscore is mandatory, not just preferred. Dart/pub.dev package names must be
lowercase_with_underscores (the name is also the import identifier — import 'package:wdio_flutter/wdio_flutter.dart'). A hyphenated wdio-flutter would be rejected by dart pub publish.
- Consistent with our
wdio-first crate family — wdio-dioxus-bridge / wdio-dioxus-driver / wdio-dioxus-embedded-driver (crates.io, hyphenated per cargo); wdio_flutter is the same wdio-first pattern adapted to Dart's mandatory underscore. (The tauri crates tauri-plugin-wdio* are framework-first only because Tauri mandates the tauri-plugin-* prefix; Dart has no equivalent rule.)
- Appropriate for the service: concise, available on pub.dev, and internally consistent (pubspec
name, lib/wdio_flutter.dart, and the import all agree). No component suffix needed — it's the single Dart contract (unlike the multi-crate dioxus set).
Refs: #466
Track publishing the
wdio_flutterDart contract to pub.dev, gated on standing up the official webdriverio verified publisher.Context
wdio_flutteris the app-side cooperative contract for@wdio/flutter-service— it gatesbrowser.flutter.execute(Dart handlers) andbrowser.flutter.mock(the cooperative mock registry). It is not needed for native automation (find/tap/deeplink/contexts/logs all work via appium-flutter-driver without it), so it does not block the flutter service itself — only theexecute/mockfeatures for end users.#466 wired releasekit's pub.dev publishing but left it disabled (
publish.pub.enabled: false) so it doesn't gate@wdio/flutter-serviceprereleases. pub.dev rights are stricter than crates.io (no personal-token "create on first publish"; the first publish must be manual on an already-registered package, then automated publishing is configured), so we want the official publisher in place rather than publishing under a personal account.Blocker
Release runbook (once the publisher exists)
publish.pub.enabled→trueinreleasekit.config.json.dart pub publishfrompackages/flutter-service/wdio_flutterunder the webdriverio publisher (pub.dev OIDC only works after the package exists). The pubspec is linked to the service version, so this publishes whatever@wdio/flutter-serviceis at by then.webdriverio/desktop-mobile, the release workflow). TheSetup Dartstep +id-token: writeare already wired in_release.reusable.yml.@wdio/flutter-service.Pre-staged in #466 (ready to flip on)
version.groups.flutter(linked:@wdio/flutter-service+wdio_flutter),version.pub(pubspec bump),scope:fluttercoverswdio_flutter.wdio_flutter/LICENSE+CHANGELOG.md(pub.dev requirements); pubspec aligned to the linked baseline.Setup DartCI step (dart-lang/setup-dart@v1, OIDC token exchange).Naming — verified
wdio_flutteris correctlowercase_with_underscores(the name is also the import identifier —import 'package:wdio_flutter/wdio_flutter.dart'). A hyphenatedwdio-flutterwould be rejected bydart pub publish.wdio-first crate family —wdio-dioxus-bridge/wdio-dioxus-driver/wdio-dioxus-embedded-driver(crates.io, hyphenated per cargo);wdio_flutteris the same wdio-first pattern adapted to Dart's mandatory underscore. (The tauri cratestauri-plugin-wdio*are framework-first only because Tauri mandates thetauri-plugin-*prefix; Dart has no equivalent rule.)name,lib/wdio_flutter.dart, and the import all agree). No component suffix needed — it's the single Dart contract (unlike the multi-crate dioxus set).Refs: #466