From b36113be940bd7aa5e2fc71e225a60c96c15e731 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 5 Oct 2026 21:06:22 +0000 Subject: [PATCH 1/6] [pre-commit.ci] pre-commit autoupdate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/astral-sh/ruff-pre-commit: v0.15.20 → v0.16.10](https://github.com/astral-sh/ruff-pre-commit/compare/v0.15.20...v0.16.10) - [github.com/astral-sh/uv-pre-commit: 0.11.26 → 0.12.23](https://github.com/astral-sh/uv-pre-commit/compare/0.11.26...0.12.23) - [github.com/biomejs/pre-commit: v2.5.2 → v2.5.15](https://github.com/biomejs/pre-commit/compare/v2.5.2...v2.5.15) (cherry picked from commit a4b388006d5ed332f41378d37ec0a129f8b9e73a) --- .pre-commit-config.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index fa2a642f..2f2e1cbd 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -3,18 +3,18 @@ ci: skip: [pip-compile] repos: - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.15.20 + rev: v0.16.10 hooks: - id: ruff-check - id: ruff-format - repo: https://github.com/astral-sh/uv-pre-commit - rev: 0.11.26 + rev: 0.12.23 hooks: - id: pip-compile name: pip-compile common-requirements.in args: [common-requirements.in, -o, common-requirements.txt] files: ^common-requirements\.(in|txt)$ - repo: https://github.com/biomejs/pre-commit - rev: v2.5.2 + rev: v2.5.15 hooks: - id: biome-check From 940c83d2c98d6f7669c9e906ed136d77235bc945 Mon Sep 17 00:00:00 2001 From: James McKinney <26463+jpmckinney@users.noreply.github.com> Date: Thu, 8 Oct 2026 14:16:23 -0400 Subject: [PATCH 2/6] build: Update to latest profile template (cherry picked from commit 8afe99a654170616ac7ad41812ac606e52117656) --- common-requirements.in | 2 ++ common-requirements.txt | 44 ++++++++++++++++++++++++++++++++++------- requirements.txt | 2 -- tests/test_common.py | 2 +- 4 files changed, 40 insertions(+), 10 deletions(-) diff --git a/common-requirements.in b/common-requirements.in index bc75f323..19c193ba 100644 --- a/common-requirements.in +++ b/common-requirements.in @@ -2,6 +2,8 @@ linkify-it-py myst-parser ocds-babel Sphinx +sphinxcontrib-opendataservices +sphinxcontrib-opendataservices-jsonschema git+https://github.com/open-contracting/standard_theme.git@open_contracting#egg=standard_theme # Profile diff --git a/common-requirements.txt b/common-requirements.txt index dde16c01..3ca97fa2 100644 --- a/common-requirements.txt +++ b/common-requirements.txt @@ -13,6 +13,7 @@ attrs==25.4.0 # via # cattrs # outcome + # referencing # requests-cache # trio babel==2.18.0 @@ -40,9 +41,11 @@ docutils==0.18 # via # myst-parser # sphinx + # sphinxcontrib-opendataservices + # sphinxcontrib-opendataservices-jsonschema elastic-transport==9.2.1 # via elasticsearch -elasticsearch==9.3.0 +elasticsearch[requests]==9.3.0 # via ocdsindex h11==0.16.0 # via @@ -63,10 +66,21 @@ jinja2==3.1.6 # via # myst-parser # sphinx +jscc==0.5.0 + # via sphinxcontrib-opendataservices-jsonschema json-merge-patch==0.2 - # via ocdsextensionregistry + # via + # jscc + # ocdsextensionregistry +jsonpointer==3.1.1 + # via + # sphinxcontrib-opendataservices + # sphinxcontrib-opendataservices-jsonschema jsonref==1.0.0.post1 - # via ocdsextensionregistry + # via + # jscc + # ocdsextensionregistry + # sphinxcontrib-opendataservices-jsonschema linkify-it-py==1.0.1 # via -r common-requirements.in lxml==6.1.0 @@ -84,7 +98,10 @@ mdurl==0.1.2 mypy-extensions==1.1.0 # via trio-typing myst-parser==0.18.1 - # via -r common-requirements.in + # via + # -r common-requirements.in + # sphinxcontrib-opendataservices + # sphinxcontrib-opendataservices-jsonschema ocds-babel==0.3.7 # via -r common-requirements.in ocdsextensionregistry==0.6.5 @@ -116,18 +133,21 @@ python-dateutil==2.9.0.post0 # via elasticsearch pyyaml==6.0.1 # via myst-parser +referencing==0.37.0 + # via sphinxcontrib-opendataservices-jsonschema requests==2.33.0 # via # elasticsearch + # jscc # ocdsextensionregistry # requests-cache # sphinx requests-cache==1.1.0 # via ocdsextensionregistry +rpds-py==2026.6.3 + # via referencing selenium==4.40.0 # via -r common-requirements.in -setuptools==84.0.0 - # via sphinx-intl six==1.16.0 # via # python-dateutil @@ -147,6 +167,7 @@ sphinx==5.3.0 # myst-parser # sphinx-autobuild # sphinx-intl + # sphinxcontrib-opendataservices sphinx-autobuild==2024.9.3 # via -r common-requirements.in sphinx-intl==2.2.0 @@ -159,6 +180,12 @@ sphinxcontrib-htmlhelp==2.0.0 # via sphinx sphinxcontrib-jsmath==1.0.1 # via sphinx +sphinxcontrib-opendataservices==0.6.0 + # via -r common-requirements.in +sphinxcontrib-opendataservices-jsonschema==0.7.1 + # via + # -r common-requirements.in + # sphinxcontrib-opendataservices sphinxcontrib-qthelp==1.0.3 # via sphinx sphinxcontrib-serializinghtml==1.1.5 @@ -182,15 +209,18 @@ types-urllib3==1.26.25.14 # via selenium typing-extensions==4.15.0 # via + # anyio # elasticsearch # myst-parser + # referencing # selenium + # starlette # trio-typing uc-micro-py==1.0.1 # via linkify-it-py url-normalize==1.4.3 # via requests-cache -urllib3==2.7.0 +urllib3[socks]==2.8.0 # via # elastic-transport # requests diff --git a/requirements.txt b/requirements.txt index 29a36aba..768e3b09 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,8 +3,6 @@ # Add your own requirements below. sphinxcontrib-opencontracting==0.0.8 -sphinxcontrib-opendataservices-jsonschema==0.7.1 -sphinxcontrib-opendataservices==0.5.0 sphinx-design # Build diff --git a/tests/test_common.py b/tests/test_common.py index 417759f1..6e3de23a 100644 --- a/tests/test_common.py +++ b/tests/test_common.py @@ -26,7 +26,7 @@ def test_search(browser, server, lang, regex): # This seems to be an issue in Selenium and/or ChromeDriver. @pytest.mark.filterwarnings("ignore:unclosed Date: Thu, 8 Oct 2026 14:31:08 -0400 Subject: [PATCH 3/6] build: Move standard_theme to uncompiled theme-requirements.txt, to track the branch instead of a commit Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01RmJqv44wXNcNkarFBjvyzT (cherry picked from commit 5db7c256d16a82bbd1f69a90dec811924e1b6770) --- common-requirements.in | 1 - common-requirements.txt | 2 -- requirements.txt | 1 + script/update | 2 +- theme-requirements.txt | 2 ++ 5 files changed, 4 insertions(+), 4 deletions(-) create mode 100644 theme-requirements.txt diff --git a/common-requirements.in b/common-requirements.in index 19c193ba..2e26689f 100644 --- a/common-requirements.in +++ b/common-requirements.in @@ -4,7 +4,6 @@ ocds-babel Sphinx sphinxcontrib-opendataservices sphinxcontrib-opendataservices-jsonschema -git+https://github.com/open-contracting/standard_theme.git@open_contracting#egg=standard_theme # Profile ocdsextensionregistry diff --git a/common-requirements.txt b/common-requirements.txt index 3ca97fa2..f41370d7 100644 --- a/common-requirements.txt +++ b/common-requirements.txt @@ -190,8 +190,6 @@ sphinxcontrib-qthelp==1.0.3 # via sphinx sphinxcontrib-serializinghtml==1.1.5 # via sphinx -standard-theme @ git+https://github.com/open-contracting/standard_theme.git@open_contracting - # via -r common-requirements.in starlette==1.3.1 # via sphinx-autobuild trio==0.32.0 diff --git a/requirements.txt b/requirements.txt index 768e3b09..a7b4f96b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,5 @@ -r common-requirements.txt +-r theme-requirements.txt # Add your own requirements below. diff --git a/script/update b/script/update index ede828d3..d3590428 100755 --- a/script/update +++ b/script/update @@ -5,7 +5,7 @@ set -eu main() { mkdir -p script include tests - for f in .pre-commit-config.yaml .python-version Makefile common-requirements.in common-requirements.txt pyproject.toml .github/dependabot.yml .github/workflows/js.yml .github/workflows/shell.yml docs/_static/favicon-16x16.ico include/common.mk include/prologue.mk script/diff script/update tests/conftest.py tests/test_common.py; do + for f in .pre-commit-config.yaml .python-version Makefile common-requirements.in common-requirements.txt pyproject.toml .github/dependabot.yml .github/workflows/js.yml .github/workflows/shell.yml docs/_static/favicon-16x16.ico include/common.mk include/prologue.mk script/diff script/update tests/conftest.py tests/test_common.py theme-requirements.txt; do curl -sS -o $f https://raw.githubusercontent.com/open-contracting/standard_profile_template/refs/heads/latest/$f done diff --git a/theme-requirements.txt b/theme-requirements.txt new file mode 100644 index 00000000..dd74015d --- /dev/null +++ b/theme-requirements.txt @@ -0,0 +1,2 @@ +# Not compiled, so that the theme tracks the branch instead of a commit. +git+https://github.com/open-contracting/standard_theme.git@open_contracting#egg=standard_theme From 51d0def7ea73c881c2a9b31009d1649cb11c08bc Mon Sep 17 00:00:00 2001 From: James McKinney <26463+jpmckinney@users.noreply.github.com> Date: Thu, 8 Oct 2026 14:59:17 -0400 Subject: [PATCH 4/6] build: Let the theme register itself, instead of setting its paths The theme registers itself and its message catalogs through the `sphinx.html_themes` entry point, so its catalogs are found: `get_html_theme_path()` returns site-packages, where they were never installed, and every theme string fell back to English. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01UAeUtu5XGYmmSwtyjVU7gL (cherry picked from commit deb7213925564345c5909bc6828bd6435f22e511) --- docs/conf.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index 50731a33..75a8fe78 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -8,7 +8,6 @@ from glob import glob from pathlib import Path -import standard_theme from docutils.nodes import make_id from ocds_babel.translate import translate from sphinx.locale import get_translation @@ -41,7 +40,6 @@ # https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output html_theme = "standard_theme" # 'pydata_sphinx_theme' -html_theme_path = [standard_theme.get_html_theme_path()] html_favicon = "_static/favicon-16x16.ico" html_static_path = ["_static", "examples", "../mapping/sustainability.yaml"] html_css_files = ["renderjson.css", "https://fonts.googleapis.com/css?family=Montserrat", "custom.css"] @@ -59,7 +57,7 @@ gettext_compact = False # `DOMAIN_PREFIX` from `config.mk`. gettext_domain_prefix = f"{profile_identifier}-" if profile_identifier else "" -locale_dirs = ["locale/", os.path.join(standard_theme.get_html_theme_path(), "locale")] +locale_dirs = ["locale/"] # We use single quotes for codes, which docutils will change to double quotes. # https://sourceforge.net/p/docutils/code/HEAD/tree/trunk/docutils/docutils/utils/smartquotes.py smartquotes = False From 38b6815aa9e9454585bfad501ab0a894b8b5c9ee Mon Sep 17 00:00:00 2001 From: James McKinney <26463+jpmckinney@users.noreply.github.com> Date: Thu, 8 Oct 2026 16:03:37 -0400 Subject: [PATCH 5/6] build: Let the theme provide its defaults and favicon standard_theme defaults analytics_id, copyright, license_name, license_url, versions_url and display_version, and provides the favicon. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01RmJqv44wXNcNkarFBjvyzT (cherry picked from commit 623a5563b897e32f4b1e077a2628b9d7f54d8fa9) --- docs/_static/favicon-16x16.ico | Bin 1406 -> 0 bytes docs/conf.py | 6 ------ script/update | 2 +- 3 files changed, 1 insertion(+), 7 deletions(-) delete mode 100644 docs/_static/favicon-16x16.ico diff --git a/docs/_static/favicon-16x16.ico b/docs/_static/favicon-16x16.ico deleted file mode 100644 index 40159444df4205bf4b951f36bf7677998df5f7ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1406 zcmeH{-A|HX7{-4H6n=$Tni`2f0z!tpydqc$scA-l#jCcJ9eZN6va+)_w>oOM)ojDQ z*E*?;YT`$!o2GNknsZ`SYW1J=(7C5=ZQjp*&+}Z@!M)wr!3`>La&i#2j!rEU0Cs_} zC>5mqjmj%Yc-?NQWf^Z(71cf;9)B&KfFG%$9#4vFgOn2bQi*D$jROdEp$cE0-wkxrpm(H^yt-xOy&A(R-bWo4pj?x`Fe~ zZJc-eF!%T2i1p(bxQF9m4Ev)Pna>AMy}Xa=)dN)V$ATxMy?KiI-80e?FR%^8DI9){ zZgdb^B98j~AlBix=spaRIUc8IVhHQ_2%4!OK?3W9_)jO$P7kB`I70E%7@C<;a%aaV zo0%lz(u)2hKHA%@@5~IMhwoJ+TGRF0< zn0~Hc`t=Rd@9!JMz3Fcz@V_UJSFA~mpefw`cM^SF%O0^`be2$Et}wE^iV~G_^scC) z9LOfqrHG1F`%{l1Wt9dMr8RQ6;!x8`p@SxEfgC#KDR=k+4aYL1r1;qi%H diff --git a/docs/conf.py b/docs/conf.py index 75a8fe78..fc6b2104 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -40,7 +40,6 @@ # https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output html_theme = "standard_theme" # 'pydata_sphinx_theme' -html_favicon = "_static/favicon-16x16.ico" html_static_path = ["_static", "examples", "../mapping/sustainability.yaml"] html_css_files = ["renderjson.css", "https://fonts.googleapis.com/css?family=Montserrat", "custom.css"] html_js_files = ["renderjson.js", "json-example-format.js"] @@ -76,13 +75,8 @@ "analytics_id": "YEWDOOEQ", "display_version": True, "root_url": f"/{profile_identifier}" if profile_identifier else "", - # Relative to the version's directory, so that one value serves the live and staging copies. - "versions_url": "../versions.json", "languages": {"en": "English", "es": "Español"}, "short_project": "OC4IDS", - "copyright": copyright, - "license_name": "Apache License 2.0", - "license_url": f"{repository_url}/blob/HEAD/LICENSE", "repository_url": repository_url, } html_short_title = f"{html_theme_options['short_project']} v{release}" diff --git a/script/update b/script/update index d3590428..3be6fa8c 100755 --- a/script/update +++ b/script/update @@ -5,7 +5,7 @@ set -eu main() { mkdir -p script include tests - for f in .pre-commit-config.yaml .python-version Makefile common-requirements.in common-requirements.txt pyproject.toml .github/dependabot.yml .github/workflows/js.yml .github/workflows/shell.yml docs/_static/favicon-16x16.ico include/common.mk include/prologue.mk script/diff script/update tests/conftest.py tests/test_common.py theme-requirements.txt; do + for f in .pre-commit-config.yaml .python-version Makefile common-requirements.in common-requirements.txt pyproject.toml .github/dependabot.yml .github/workflows/js.yml .github/workflows/shell.yml include/common.mk include/prologue.mk script/diff script/update tests/conftest.py tests/test_common.py theme-requirements.txt; do curl -sS -o $f https://raw.githubusercontent.com/open-contracting/standard_profile_template/refs/heads/latest/$f done From 868b9fed78bedec45060b48a420d78c1c0b23217 Mon Sep 17 00:00:00 2001 From: James McKinney <26463+jpmckinney@users.noreply.github.com> Date: Thu, 8 Oct 2026 21:44:26 -0400 Subject: [PATCH 6/6] ci: Allow the workflow to be dispatched manually, to rebuild against a new theme Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01UAeUtu5XGYmmSwtyjVU7gL (cherry picked from commit 4671f8efdf77a44aca6792861017c5f4ad195818) --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index eed44d62..3db04f5c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,5 +1,5 @@ name: CI -on: [push, pull_request] +on: [push, pull_request, workflow_dispatch] jobs: ci: uses: open-contracting/.github/.github/workflows/ci-profile.yml@main