Skip to content

feat: optional conf.py - #684

Draft
AlexanderLanin wants to merge 4 commits into
eclipse-score:mainfrom
etas-contrib:optional-conf-py
Draft

feat: optional conf.py#684
AlexanderLanin wants to merge 4 commits into
eclipse-score:mainfrom
etas-contrib:optional-conf-py

Conversation

@AlexanderLanin

@AlexanderLanin AlexanderLanin commented Aug 3, 2026

Copy link
Copy Markdown
Member

Motivation: 90-100% of users don't know how changes to conf.py affect documentation build. They assume they can just add code there. While this may be helpful for some quick fixes or workarounds, we need to discourage people from touching the file. As long as the file is there, people will touch it. So let's get rid of the file!

work in progress. 90% done.

Note: created downstream PRs in score and persistency. They are unrelated to any of the currently open PRs in docs-as-code.

@github-actions

github-actions Bot commented Aug 3, 2026

Copy link
Copy Markdown

License Check Results

🚀 The license check job ran with the Bazel command:

bazel run --lockfile_mode=error //src:license-check

Status: ⚠️ Needs Review

Click to expand output
[License Check Output]
Extracting Bazel installation...
Starting local Bazel server (8.6.0) and connecting to it...
INFO: Invocation ID: 858adc5f-a10c-4b6c-8b40-25d811ccd2a7
Computing main repo mapping: 
Computing main repo mapping: 
Loading: 
Loading: 0 packages loaded
Loading: 0 packages loaded
Loading: 0 packages loaded
    currently loading: src
WARNING: Target pattern parsing failed.
ERROR: Skipping '//src:license-check': no such target '//src:license-check': target 'license-check' not declared in package 'src' defined by /home/runner/work/docs-as-code/docs-as-code/src/BUILD
ERROR: no such target '//src:license-check': target 'license-check' not declared in package 'src' defined by /home/runner/work/docs-as-code/docs-as-code/src/BUILD
INFO: Elapsed time: 6.399s
INFO: 0 processes.
ERROR: Build did NOT complete successfully
ERROR: Build failed. Not running target

@github-actions

github-actions Bot commented Aug 3, 2026

Copy link
Copy Markdown

The created documentation from the pull request is available at: docu-html

Comment thread docs.bzl
source_config = ":" + ("" if source_dir == "." else source_dir + "/") + "conf.py"
config_file_path = join_path(source_dir, "conf.py")
sphinx_config_for_bazel_build = ":" + config_file_path
has_source_config = len(native.glob([config_file_path], allow_empty = True)) == 1

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you use the bundle sources instead of globbing yourself again here?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

config.py is not included in the bundle sources

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR makes conf.py optional for Bazel-driven Sphinx builds by generating a baseline Sphinx configuration from docs() macro attributes, and updates docs/tests to validate the new behavior.

Changes:

  • Added project / project_url to docs() and implemented generated conf.py templating when no source conf.py exists.
  • Updated runtime invocation to pass a generated config directory to Sphinx under bazel run.
  • Expanded integration tests and documentation to cover “no conf.py” scenarios and the new macro parameters.

Reviewed changes

Copilot reviewed 12 out of 12 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
src/tests/docs_bzl/test_missing_docs_config.py New negative test asserting analysis fails when neither conf.py nor required macro values are provided
src/tests/docs_bzl/test_basic_docs.py Adds a scenario build test for :needs_json without conf.py
src/tests/docs_bzl/scenarios/missing_docs_config/docs/index.rst Adds scenario documentation content for missing-config fixture
src/tests/docs_bzl/scenarios/missing_docs_config/BUILD.negative Adds negative BUILD fixture omitting project/project_url
src/tests/docs_bzl/scenarios/basic_docs/BUILD Supplies project/project_url for a scenario that has no conf.py
src/incremental.py Supports SPHINX_CONFIG_FILE to pass -c <dir> to Sphinx under bazel run
docs/reference/bazel_macros.rst Documents optional conf.py and required project/project_url when absent
docs/how-to/setup.md Updates setup instructions to make conf.py optional and recommend avoiding it
docs/conf.py Removes the repository’s docs/conf.py
docs.bzl Adds config generation rule, optional macro args, and uses generated config for needs_json; introduces docs alias for CLI
default_conf.py.tpl Adds default generated Sphinx config template parameterized by project metadata
BUILD Exports default_conf.py.tpl and sets project/project_url for the repo’s own docs() invocation

Comment thread docs.bzl
Comment on lines +243 to +246
# Generate the config at an internal location for ``bazel run``
# targets. ``source_dir/conf.py`` would conflict with the generated
# ``:docs`` executable when source_dir is named ``docs``.
_generated_conf(
Comment thread docs/how-to/setup.md
Comment on lines +89 to +92
Note that conf.py will affect only local builds. It will not affect the integrated
documentation build by reference_integration. Local builds are useful for testing and
debugging your documentation before committing changes. Not for final delivery. HAving a
custom conf.py is highly discouraged.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: No status

Development

Successfully merging this pull request may close these issues.

3 participants