Skip to content

Feature-request: Better use_extension API for dev dependencies #28210

@luispadron

Description

@luispadron

Description of the feature request:

In rules_swift_package_manager we have a module extension which generates repositories for a Swift package representation, it also generates two other repositories for use as "development" dependencies (e.g. swift_deps_info, and swift_package). These repositories are not meant to be exposed outside of the root repo that the extension is used in.

The user-experience issue:

We could define these repositories as root_module_direct_dev_deps but doing so requires the extension to be in a use_extension with dev_dependency = True which means we need to split our extension into development and non-development. This complicates implementing extensions but it also complicates using them if the extensions shares attributes across dev/non-dev, you end up duplicating or creating a constant to reuse.

This ends up looking something like:

# Declare public deps
swift_deps = use_extension(
    "@rules_swift_package_manager//:extensions.bzl",
    "swift_deps",
)
swift_deps.from_package(
    swift = "//:Package.swift",
    ...
)
use_repo(
    swift_deps,
    ...
    "swiftpkg_swiftformat",
)

# Declare dev deps
swift_dev_deps = use_extension(
    "@rules_swift_package_manager//:extensions.bzl",
    "swift_dev_deps",
    dev_dependency = True,
)
swift_dev_deps.from_package(
    swift = "//:Package.swift",
    ...
)
use_repo(swift_dev_deps, "swift_package")

Alternative

# Declare deps
swift_deps = use_extension(
    "@rules_swift_package_manager//:extensions.bzl",
    "swift_deps",
)
swift_deps.from_package(
    swift = "//:Package.swift",
    ...
)
use_repo(
    swift_deps,
    "swiftpkg_swiftformat",
    dev_dependencies = [
       "swift_package"
    ],
)

Ideally, extension authors could just define dev dependencies without users needing to use dev_dependency = True but I'm not sure how to functionally make that work. Just think the end user experience here is less than ideal for more complicated Bazel modules.

Metadata

Metadata

Assignees

No one assigned

    Labels

    P4This is either out of scope or we don't have bandwidth to review a PR. (No assignee)team-ExternalDepsExternal dependency handling, remote repositiories, WORKSPACE file.type: feature request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions