-
Notifications
You must be signed in to change notification settings - Fork 4.4k
Description
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.