Skip to content

Release wdio_flutter to pub.dev (under the official webdriverio verified publisher) #479

Open

Description

@goosewobbler

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). Native automation doesn't need it: find, tap, deeplink, contexts and logs all work through appium-flutter-driver. So it doesn't 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: there's no personal-token "create on first publish", so the first publish must be manual on an already-registered package before automated publishing can be configured. We want the official publisher in place rather than publishing under a personal account.

Blocker

  • Set up the official webdriverio verified publisher on pub.dev (an org/admin task, and the long pole).

Also needed before the first release

Found when standing PR #642's publish was refused on 2026-10-06:

Release runbook (once the above is done)

  1. Flip publish.pub.enabled → true in releasekit.config.json.
  2. Manual first publish: run dart pub publish from packages/flutter-bridge under the webdriverio publisher, because pub.dev OIDC only works after the package exists. The flutter version group is independent, so this publishes the pubspec's own version (currently 1.0.0-next.0), not @wdio/flutter-service's. Tag it wdio_flutter@v<version> so ReleaseKit has a baseline.
  3. On pub.dev, open the package → Admin → enable "Automated publishing from GitHub Actions" (repo webdriverio/desktop-mobile, the release workflow). The Setup Dart step and id-token: write are already wired in _release.reusable.yml.
  4. Later versions auto-publish through ReleaseKit, on their own version line in the independent flutter group with @wdio/flutter-service.

Pre-staged in #466 (ready to flip on)

Naming — verified wdio_flutter is correct

  • The underscore is mandatory, not just preferred. Dart/pub.dev package names must be lowercase_with_underscores, because 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.
  • It matches our wdio-first crate family. The crates.io names wdio-dioxus-bridge, wdio-dioxus-driver and wdio-dioxus-embedded-driver are hyphenated per cargo; wdio_flutter is the same wdio-first pattern with 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.
  • It suits the service. It's concise, available on pub.dev, and internally consistent: the pubspec name, lib/wdio_flutter.dart and the import all agree. It needs no component suffix, because it's the single Dart contract (unlike the multi-crate Dioxus set).

Refs: #466, #642, #707, goosewobbler/releasekit#649

Activity

  1. added
    status:blockedWork cannot start until something is resolved
    scope:flutterFlutter service and wdio_flutter Dart contract
    on Jun 24, 2026
  2. added this to the Flutter v1.0.0 milestone on Jun 25, 2026
  3. added a commit that references this issue on Oct 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    scope:flutterFlutter service and wdio_flutter Dart contractstatus:blockedWork cannot start until something is resolved

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions