Skip to content

expose transitive dependencies via setup.bzl #109

@AlexanderLanin

Description

@AlexanderLanin

📦 Add Bazel extension to expose transitive dependencies via setup.bzl

We should provide a Bazel extension (setup.bzl) in this module to simplify integration for downstream consumers and follow best practices for reusable Bazel modules.


🎯 Motivation

Currently, downstream projects that use score_docs_as_code and its macros must also manually declare:

bazel_dep(name = "score_python_basics")

in their MODULE.bazel, even though it’s only used indirectly by macros from this module.

This violates the principle of encapsulated, reusable modules and puts an unnecessary burden on consumers.


✅ Goals

  • Provide a setup.bzl file with a public function (e.g. setup_dependencies(ctx)) that:
    • Uses ctx.use_repo() to expose transitive repos like score_python_basics
    • Optionally sets up further repo-level initialization (e.g. venv, toolchains)
  • Document this extension usage in the module README
  • Adapt examples and tests to use this new aproach

📐 Proposed Structure

setup/setup.bzl

def setup_dependencies(ctx):
    ctx.use_repo(dependency = "score_python_basics", repo_name = "score_python_basics")

Usage in downstream MODULE.bazel

bazel_dep(name = "score_docs_as_code", version = "...")

use_extension("@score_docs_as_code//setup:setup.bzl", "setup")
setup.setup_dependencies()

📝 Additional Ideas

  • Consider converting frequently-used macros (e.g. define_docs_env) into actual extensions using tag_class and module_extension.
  • Possibly wrap setup of the Python venv and Sphinx-Needs dependencies into a more declarative Bazel extension API in the future.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    Status

    Review Issue Before Implementation

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions