diff --git a/.github/workflows/dump-refresh.yml b/.github/workflows/dump-refresh.yml index edc2a9d..a35019a 100644 --- a/.github/workflows/dump-refresh.yml +++ b/.github/workflows/dump-refresh.yml @@ -27,7 +27,7 @@ jobs: runs-on: ubuntu-latest # Well under GitHub's 6h ceiling, which reports an over-run as # "cancelled" rather than failed and so hides the breakage. - timeout-minutes: 330 + timeout-minutes: 355 env: TECHAPI_WRITE_TOKEN: ${{ secrets.TECHENGINEBOT_TOKEN || secrets.TECHAPI_TOKEN }} # seed/validate/dump read the data tree from here. @@ -91,7 +91,7 @@ jobs: path: ./techapi token: ${{ env.TECHAPI_WRITE_TOKEN }} branch: dump-refresh/${{ steps.meta.outputs.date }} - base: main + base: develop add-paths: | site/public/v1 site/public/openapi.json diff --git a/app/dump.py b/app/dump.py index 01445c8..c20761c 100644 --- a/app/dump.py +++ b/app/dump.py @@ -57,8 +57,15 @@ def resolve_collections(exclude: list[str] | None = None) -> list[str]: def _write_json(path: Path, data: object) -> None: - path.parent.mkdir(parents=True, exist_ok=True) - path.write_text(json.dumps(data, indent=2, ensure_ascii=False) + "\n", encoding="utf-8") + text = json.dumps(data, indent=2, ensure_ascii=False) + "\n" + # Leave identical pages untouched: rewriting ~1M unchanged files resets + # their mtimes, and git then rehashes the whole tree when committing. + try: + if path.read_text(encoding="utf-8") == text: + return + except FileNotFoundError: + path.parent.mkdir(parents=True, exist_ok=True) + path.write_text(text, encoding="utf-8") def _fetch_all(client: TestClient, resource: str) -> tuple[int, list[dict[str, Any]]]: