From 6aa9b0313b116bc2198e223a76d0f39f24edc696 Mon Sep 17 00:00:00 2001 From: Neelima J <78197684+neelima-j@users.noreply.github.com> Date: Mon, 27 Apr 2026 13:07:13 +0100 Subject: [PATCH 01/22] example.json: Fix logical error in lifecyle cost Closes #521 --- docs/examples/example.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/examples/example.json b/docs/examples/example.json index 46dce6a1..500a851e 100644 --- a/docs/examples/example.json +++ b/docs/examples/example.json @@ -233,7 +233,7 @@ "date": "2024-05-01T00:00:00Z", "lifeCycleCosting": { "value": { - "amount": 10000000, + "amount": 60000000, "currency": "USD" } }, @@ -245,7 +245,7 @@ { "id": "1", "value": { - "amount": 50000000, + "amount": 5000000, "currency": "USD" }, "classification": { From 4aee7ecf171e1f0d7c96a86a26f3238b24685776 Mon Sep 17 00:00:00 2001 From: Neelima J <78197684+neelima-j@users.noreply.github.com> Date: Mon, 27 Apr 2026 13:58:38 +0100 Subject: [PATCH 02/22] Update changelog.md --- docs/reference/changelog.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/reference/changelog.md b/docs/reference/changelog.md index 2ee6d072..419d7147 100644 --- a/docs/reference/changelog.md +++ b/docs/reference/changelog.md @@ -1,5 +1,11 @@ # Changelog +## [X.X.X] - YYYY-MM-DD + +### Documentation + +* [#287](https://github.com/open-contracting/infrastructure/pull/522) - correct `costMeasurements` so that the sum of cost groups is less than `lifeCycleCosting` in example file. + ## [0.9.5] - 2025-04-02 ### Documentation From 97800f33a5679141192b9652e66c722c40df9795 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 6 Jul 2026 19:42:04 +0000 Subject: [PATCH 03/22] [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.9 → v0.15.20](https://github.com/astral-sh/ruff-pre-commit/compare/v0.15.9...v0.15.20) - [github.com/astral-sh/uv-pre-commit: 0.11.3 → 0.11.26](https://github.com/astral-sh/uv-pre-commit/compare/0.11.3...0.11.26) --- .pre-commit-config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index a48a5f03..041dee99 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -3,12 +3,12 @@ ci: skip: [pip-compile] repos: - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.15.9 + rev: v0.15.20 hooks: - id: ruff-check - id: ruff-format - repo: https://github.com/astral-sh/uv-pre-commit - rev: 0.11.3 + rev: 0.11.26 hooks: - id: pip-compile name: pip-compile common-requirements.in From c51df5f599e97c78a376e383b428d8e5c84ac023 Mon Sep 17 00:00:00 2001 From: James McKinney <26463+jpmckinney@users.noreply.github.com> Date: Tue, 7 Jul 2026 12:25:18 -0400 Subject: [PATCH 04/22] build: Update to latest profile template --- .github/workflows/lint.yml | 2 -- common-requirements.txt | 10 +++++----- script/diff | 2 +- script/update | 2 +- 4 files changed, 7 insertions(+), 9 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 079ddeca..1f620102 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -7,5 +7,3 @@ jobs: contents: write secrets: personal-access-token: ${{ secrets.PAT }} - with: - ocds-disallow-null: true diff --git a/common-requirements.txt b/common-requirements.txt index d1616fcb..09dbd234 100644 --- a/common-requirements.txt +++ b/common-requirements.txt @@ -48,7 +48,7 @@ h11==0.16.0 # via # uvicorn # wsproto -idna==3.7 +idna==3.15 # via # anyio # requests @@ -69,7 +69,7 @@ jsonref==1.0.0.post1 # via ocdsextensionregistry linkify-it-py==1.0.1 # via -r common-requirements.in -lxml==6.0.4 +lxml==6.1.0 # via ocdsindex markdown-it-py==2.2.0 # via @@ -164,9 +164,9 @@ 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@91c74b23da0079f05813fc8b4a4bc795026e8ae7#egg=standard_theme +standard-theme @ git+https://github.com/open-contracting/standard_theme.git@e86740617bdff1e9518b7905423201a1eca00a37#egg=standard_theme # via -r common-requirements.in -starlette==0.50.0 +starlette==1.3.1 # via sphinx-autobuild trio==0.32.0 # via @@ -191,7 +191,7 @@ uc-micro-py==1.0.1 # via linkify-it-py url-normalize==1.4.3 # via requests-cache -urllib3==2.6.3 +urllib3==2.7.0 # via # elastic-transport # requests diff --git a/script/diff b/script/diff index 9de4f793..6bbbd9a0 100755 --- a/script/diff +++ b/script/diff @@ -5,7 +5,7 @@ set -u curl -sS https://raw.githubusercontent.com/open-contracting/standard_profile_template/refs/heads/latest/docs/conf.py | diff -u - docs/conf.py -for f in .github/workflows/ci.yml .github/workflows/spellcheck.yml include/config.mk; do +for f in .github/workflows/ci.yml .github/workflows/lint.yml .github/workflows/spellcheck.yml include/config.mk; do curl -sS https://raw.githubusercontent.com/open-contracting/standard_profile_template/refs/heads/latest/$f | diff -u - $f done diff --git a/script/update b/script/update index ca0d1345..21025608 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/lint.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/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 curl -sS -o $f https://raw.githubusercontent.com/open-contracting/standard_profile_template/refs/heads/latest/$f done From be13fe7d0f7f97b8ad83b9590bc1951e811627c0 Mon Sep 17 00:00:00 2001 From: James McKinney <26463+jpmckinney@users.noreply.github.com> Date: Tue, 7 Jul 2026 13:42:08 -0400 Subject: [PATCH 05/22] ci: Restore ocds-disallow-null --- .github/workflows/lint.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 1f620102..079ddeca 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -7,3 +7,5 @@ jobs: contents: write secrets: personal-access-token: ${{ secrets.PAT }} + with: + ocds-disallow-null: true From 60e9bf4243e340fae0b4ed23ea503da341dd6a6b Mon Sep 17 00:00:00 2001 From: James McKinney <26463+jpmckinney@users.noreply.github.com> Date: Wed, 8 Jul 2026 00:31:41 -0400 Subject: [PATCH 06/22] build: Update to latest profile template --- .github/workflows/js.yml | 2 -- .pre-commit-config.yaml | 4 ++++ biome.json | 41 ++++++++++++++++++++++++++++++++++++++++ common-requirements.txt | 2 +- docs/_static/custom.css | 17 ++++++++++++++--- script/diff | 4 +--- script/update | 2 +- 7 files changed, 62 insertions(+), 10 deletions(-) create mode 100644 biome.json diff --git a/.github/workflows/js.yml b/.github/workflows/js.yml index df3414f6..7c4689fb 100644 --- a/.github/workflows/js.yml +++ b/.github/workflows/js.yml @@ -5,5 +5,3 @@ jobs: uses: open-contracting/.github/.github/workflows/js.yml@main permissions: contents: read - with: - filenames: docs/_static/json-example-format.js # ignore renderjson.js, docson diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 041dee99..fa2a642f 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -14,3 +14,7 @@ repos: 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 + hooks: + - id: biome-check diff --git a/biome.json b/biome.json new file mode 100644 index 00000000..ed90fb14 --- /dev/null +++ b/biome.json @@ -0,0 +1,41 @@ +{ + "vcs": { + "enabled": true, + "clientKind": "git", + "useIgnoreFile": true, + "defaultBranch": "main" + }, + "files": { + "includes": [ + "**", + "!docs/_static/docson", + "!docs/_static/renderjson.*", + "!docs/_templates", + "!docs/examples", + "!schema" + ] + }, + "assist": { + "actions": { + "source": { + "organizeImports": "on" + } + } + }, + "formatter": { + "indentStyle": "space", + "indentWidth": 2, + "lineWidth": 119 + }, + "json": { + "formatter": { + "indentWidth": 2 + } + }, + "linter": { + "enabled": true, + "rules": { + "recommended": true + } + } +} diff --git a/common-requirements.txt b/common-requirements.txt index 09dbd234..e608011f 100644 --- a/common-requirements.txt +++ b/common-requirements.txt @@ -164,7 +164,7 @@ 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@e86740617bdff1e9518b7905423201a1eca00a37#egg=standard_theme +standard-theme @ git+https://github.com/open-contracting/standard_theme.git@267fa534587afba86f5569bcaff256cff9d30746#egg=standard_theme # via -r common-requirements.in starlette==1.3.1 # via sphinx-autobuild diff --git a/docs/_static/custom.css b/docs/_static/custom.css index 03d59ce4..d20e7951 100644 --- a/docs/_static/custom.css +++ b/docs/_static/custom.css @@ -13,10 +13,21 @@ text-decoration-style: dotted; } -h1, h2, .rst-content .toctree-wrapper p.caption, h3, h4, h5, h6, legend, .wy-menu-vertical a, .oc-custom-select, #rtd-search-form input, .wy-side-nav-search > a{ - font-family: 'Montserrat',"Helvetica Neue",Helvetica,Arial,sans-serif; +h1, +h2, +.rst-content .toctree-wrapper p.caption, +h3, +h4, +h5, +h6, +legend, +.wy-menu-vertical a, +.oc-custom-select, +#rtd-search-form input, +.wy-side-nav-search > a { + font-family: "Montserrat", "Helvetica Neue", Helvetica, Arial, sans-serif; } .wy-menu-vertical a { - font-size: 95% + font-size: 95%; } diff --git a/script/diff b/script/diff index 6bbbd9a0..18f5fbdc 100755 --- a/script/diff +++ b/script/diff @@ -3,9 +3,7 @@ # No -e, because diff uses exit status 1 when differences are found. set -u -curl -sS https://raw.githubusercontent.com/open-contracting/standard_profile_template/refs/heads/latest/docs/conf.py | diff -u - docs/conf.py - -for f in .github/workflows/ci.yml .github/workflows/lint.yml .github/workflows/spellcheck.yml include/config.mk; do +for f in biome.json .github/workflows/ci.yml .github/workflows/lint.yml .github/workflows/spellcheck.yml docs/conf.py include/config.mk; do curl -sS https://raw.githubusercontent.com/open-contracting/standard_profile_template/refs/heads/latest/$f | diff -u - $f done diff --git a/script/update b/script/update index 21025608..ede828d3 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/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; do curl -sS -o $f https://raw.githubusercontent.com/open-contracting/standard_profile_template/refs/heads/latest/$f done From a1c3b7193c948512f2f7f54dec9283f8858f1a9b Mon Sep 17 00:00:00 2001 From: James McKinney <26463+jpmckinney@users.noreply.github.com> Date: Thu, 9 Jul 2026 22:46:57 -0400 Subject: [PATCH 07/22] chore(biome): linter.rules.recommended is true by default and deprecated (use linter.rules.preset) --- biome.json | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/biome.json b/biome.json index ed90fb14..95e612be 100644 --- a/biome.json +++ b/biome.json @@ -33,9 +33,6 @@ } }, "linter": { - "enabled": true, - "rules": { - "recommended": true - } + "enabled": true } } From ff6358ea357cbc84453bd53f986b88ea004a7b3d Mon Sep 17 00:00:00 2001 From: James McKinney <26463+jpmckinney@users.noreply.github.com> Date: Fri, 10 Jul 2026 16:46:33 -0400 Subject: [PATCH 08/22] build: Update to latest profile template --- biome.json | 30 ++++-------------------------- 1 file changed, 4 insertions(+), 26 deletions(-) diff --git a/biome.json b/biome.json index 95e612be..4c0f7722 100644 --- a/biome.json +++ b/biome.json @@ -5,34 +5,12 @@ "useIgnoreFile": true, "defaultBranch": "main" }, - "files": { - "includes": [ - "**", - "!docs/_static/docson", - "!docs/_static/renderjson.*", - "!docs/_templates", - "!docs/examples", - "!schema" - ] - }, - "assist": { - "actions": { - "source": { - "organizeImports": "on" - } - } - }, "formatter": { "indentStyle": "space", - "indentWidth": 2, - "lineWidth": 119 + "lineWidth": 119, + "includes": ["**", "!docs/examples/**/*.json", "!schema/**/*.json"] }, - "json": { - "formatter": { - "indentWidth": 2 - } - }, - "linter": { - "enabled": true + "files": { + "includes": ["**", "!docs/_static/docson", "!docs/_templates", "!docs/_static/renderjson.*"] } } From 452076fde47cc0b71e9ca9ff0212565442599248 Mon Sep 17 00:00:00 2001 From: James McKinney <26463+jpmckinney@users.noreply.github.com> Date: Thu, 23 Jul 2026 16:13:56 -0400 Subject: [PATCH 09/22] chore: Upgrade ruff --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 8dd8c13f..53049583 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -9,7 +9,7 @@ target-version = "py310" [tool.ruff.lint] select = ["ALL"] ignore = [ - "ANN", "C901", "COM812", "D203", "D212", "D415", "EM", "ISC001", "PERF203", "PLR091", "Q000", + "ANN", "C901", "COM812", "CPY001", "D203", "D212", "D415", "EM", "ISC001", "PERF203", "PLR091", "Q000", "D1", "D205", "PTH", "D200", # https://github.com/astral-sh/ruff/issues/6269 From 5b36a96113a37a2d2942f352065ac687f3a222f5 Mon Sep 17 00:00:00 2001 From: James McKinney <26463+jpmckinney@users.noreply.github.com> Date: Fri, 24 Jul 2026 11:06:45 -0400 Subject: [PATCH 10/22] chore: Remove ruff target-version --- pyproject.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 53049583..66170be1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,6 @@ version = "0.0.0" [tool.ruff] line-length = 119 -target-version = "py310" [tool.ruff.lint] select = ["ALL"] From f0d5851fd57eef62e4abf7a564369e054b3ba9d3 Mon Sep 17 00:00:00 2001 From: James McKinney <26463+jpmckinney@users.noreply.github.com> Date: Thu, 6 Aug 2026 23:39:54 -0400 Subject: [PATCH 11/22] chore: Use python3 interpreter (python not found on macOS) --- manage.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manage.py b/manage.py index 9b59fc4a..497b084b 100755 --- a/manage.py +++ b/manage.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 import csv import json import re From e0b5ba064de149a8952b4bef637cd931b4ac833d Mon Sep 17 00:00:00 2001 From: James McKinney <26463+jpmckinney@users.noreply.github.com> Date: Thu, 17 Sep 2026 21:47:17 -0400 Subject: [PATCH 12/22] build: Update to latest profile template --- .github/workflows/js.yml | 2 +- .github/workflows/lint.yml | 4 +--- .github/workflows/shell.yml | 2 +- .github/workflows/spellcheck.yml | 2 +- common-requirements.txt | 4 ++-- 5 files changed, 6 insertions(+), 8 deletions(-) diff --git a/.github/workflows/js.yml b/.github/workflows/js.yml index 7c4689fb..ab79551b 100644 --- a/.github/workflows/js.yml +++ b/.github/workflows/js.yml @@ -1,7 +1,7 @@ name: Lint JavaScript on: [push, pull_request] jobs: - lint: + js: uses: open-contracting/.github/.github/workflows/js.yml@main permissions: contents: read diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 079ddeca..e37180e8 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -4,8 +4,6 @@ jobs: lint: uses: open-contracting/.github/.github/workflows/lint.yml@main permissions: - contents: write - secrets: - personal-access-token: ${{ secrets.PAT }} + contents: read with: ocds-disallow-null: true diff --git a/.github/workflows/shell.yml b/.github/workflows/shell.yml index 67df87a1..db657bed 100644 --- a/.github/workflows/shell.yml +++ b/.github/workflows/shell.yml @@ -1,7 +1,7 @@ name: Lint Shell on: [push, pull_request] jobs: - lint: + shell: uses: open-contracting/.github/.github/workflows/shell.yml@main permissions: contents: read diff --git a/.github/workflows/spellcheck.yml b/.github/workflows/spellcheck.yml index 3fe75a97..7e98c567 100644 --- a/.github/workflows/spellcheck.yml +++ b/.github/workflows/spellcheck.yml @@ -1,7 +1,7 @@ name: Spell-check on: [push, pull_request] jobs: - lint: + spellcheck: uses: open-contracting/.github/.github/workflows/spellcheck.yml@main permissions: contents: read diff --git a/common-requirements.txt b/common-requirements.txt index e608011f..cc4e2acc 100644 --- a/common-requirements.txt +++ b/common-requirements.txt @@ -126,7 +126,7 @@ requests-cache==1.1.0 # via ocdsextensionregistry selenium==4.40.0 # via -r common-requirements.in -setuptools==82.0.1 +setuptools==84.0.0 # via sphinx-intl six==1.16.0 # via @@ -164,7 +164,7 @@ 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@267fa534587afba86f5569bcaff256cff9d30746#egg=standard_theme +standard-theme @ git+https://github.com/open-contracting/standard_theme.git@c1594b82ed4f9d75b85b3cd0dfb86b3a0d9ef965#egg=standard_theme # via -r common-requirements.in starlette==1.3.1 # via sphinx-autobuild From 143f96d0402549179c901bea0e5bb38b38efb9e3 Mon Sep 17 00:00:00 2001 From: James McKinney <26463+jpmckinney@users.noreply.github.com> Date: Thu, 17 Sep 2026 23:10:46 -0400 Subject: [PATCH 13/22] ci: Make job name consistent --- .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 b1829c54..eed44d62 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,7 +1,7 @@ name: CI on: [push, pull_request] jobs: - build: + ci: uses: open-contracting/.github/.github/workflows/ci-profile.yml@main permissions: contents: read From d31026d3cfd6eb12915bdabacbda48d722d90fe8 Mon Sep 17 00:00:00 2001 From: James McKinney <26463+jpmckinney@users.noreply.github.com> Date: Mon, 21 Sep 2026 19:10:02 -0400 Subject: [PATCH 14/22] feat: Render the banner and version switcher in the theme, not with Apache's server-side includes Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01UAeUtu5XGYmmSwtyjVU7gL --- docs/_templates/layout.html | 4 ---- docs/conf.py | 2 ++ 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/docs/_templates/layout.html b/docs/_templates/layout.html index 017e66e4..fb14c0ac 100644 --- a/docs/_templates/layout.html +++ b/docs/_templates/layout.html @@ -19,7 +19,3 @@ {% endblock %} - -{% block version_options %} - -{% endblock %} diff --git a/docs/conf.py b/docs/conf.py index 73972714..420d3d66 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -78,6 +78,8 @@ "analytics_id": "YEWDOOEQ", "display_version": True, "root_url": f"/{profile_identifier}" if profile_identifier else "", + # Render the banner and version switcher in the theme, instead of with Apache's server-side includes. + "versions_url": "../versions.json", "short_project": "OC4IDS", "copyright": copyright, "license_name": "Apache License 2.0", From 11ddf9fb0528989fe2afc2bec30725c5f6ce7e84 Mon Sep 17 00:00:00 2001 From: James McKinney <26463+jpmckinney@users.noreply.github.com> Date: Mon, 21 Sep 2026 21:14:42 -0400 Subject: [PATCH 15/22] feat: Build the language switcher from the languages theme option The option also emits relative links as the no-JavaScript fallback, in place of a form posted to `{root}/{version}/switcher`. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01UAeUtu5XGYmmSwtyjVU7gL --- docs/_templates/layout.html | 6 ------ docs/conf.py | 3 ++- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/docs/_templates/layout.html b/docs/_templates/layout.html index fb14c0ac..951c2e00 100644 --- a/docs/_templates/layout.html +++ b/docs/_templates/layout.html @@ -13,9 +13,3 @@
  • {%trans%}Data Review Tool{% endtrans %}
  • {% endblock %} - -{% block language_options %} - - - -{% endblock %} diff --git a/docs/conf.py b/docs/conf.py index 420d3d66..50731a33 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -78,8 +78,9 @@ "analytics_id": "YEWDOOEQ", "display_version": True, "root_url": f"/{profile_identifier}" if profile_identifier else "", - # Render the banner and version switcher in the theme, instead of with Apache's server-side includes. + # 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", From aeae552b6625b71a263c144b6af8fc3f6ffdcec3 Mon Sep 17 00:00:00 2001 From: James McKinney <26463+jpmckinney@users.noreply.github.com> Date: Wed, 23 Sep 2026 23:04:12 -0400 Subject: [PATCH 16/22] build: Update to latest profile template --- common-requirements.txt | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/common-requirements.txt b/common-requirements.txt index cc4e2acc..dde16c01 100644 --- a/common-requirements.txt +++ b/common-requirements.txt @@ -2,7 +2,7 @@ # uv pip compile common-requirements.in -o common-requirements.txt alabaster==0.7.12 # via sphinx -anyio==4.4.0 +anyio==4.14.2 # via # elasticsearch # starlette @@ -134,7 +134,6 @@ six==1.16.0 # url-normalize sniffio==1.3.1 # via - # anyio # elastic-transport # elasticsearch # trio @@ -164,7 +163,7 @@ 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@c1594b82ed4f9d75b85b3cd0dfb86b3a0d9ef965#egg=standard_theme +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 From a4b388006d5ed332f41378d37ec0a129f8b9e73a 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 17/22] [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) --- .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 8afe99a654170616ac7ad41812ac606e52117656 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 18/22] build: Update to latest profile template --- 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 19/22] 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 --- 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 deb7213925564345c5909bc6828bd6435f22e511 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 20/22] 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 --- 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 623a5563b897e32f4b1e077a2628b9d7f54d8fa9 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 21/22] 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 --- 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 4671f8efdf77a44aca6792861017c5f4ad195818 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 22/22] 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 --- .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