← Back to the site changelog
Site Changelog
Original commit record
Merge pull request #223 from nnneeeooo-nnneeeooo/codex/optional-radar-snapshot
雷達來源暫時無資料時仍可發布快報網站
- SHA
c39b2f5bb6d941f8c06a1a8bbf120df543543759
- Commit date
- Author
- nnneeeooo-nnneeeooo
- Committer
- web-flow
Changed files (5)
-
.github/workflows/briefing.yml
modified · +1 / −1
-
.github/workflows/hourly.yml
modified · +1 / −1
-
.github/workflows/manual-article-deploy.yml
modified · +1 / −1
-
pipeline/radar_snapshot.py
modified · +9 / −1
-
tests/test_radar_snapshot.py
modified · +14 / −0
Full diff
@@ -110,7 +110,7 @@ jobs:\n python pipeline/briefing.py --edition "${{ steps.ed.outputs.edition }}"\n fi\n python pipeline/build.py\n- python pipeline/radar_snapshot.py\n+ python pipeline/radar_snapshot.py --optional\n \n - name: Scan build output and committed data for secrets/reasoning\n run: |\n@@ -146,7 +146,7 @@ jobs:\n git fetch origin "${GITHUB_REF_NAME}"\n git checkout "origin/${GITHUB_REF_NAME}" -- data/briefings || true\n python pipeline/build.py\n- python pipeline/radar_snapshot.py\n+ python pipeline/radar_snapshot.py --optional\n \n # Audit the pipeline output after images.py has had a chance to remove\n # stale or misleading cached photos. This still fails closed before any\n@@ -66,7 +66,7 @@ jobs:\n python pipeline/image_captions.py\n python tests/test_image_captions.py\n python pipeline/build.py\n- python pipeline/radar_snapshot.py\n+ python pipeline/radar_snapshot.py --optional\n \n - name: Scan publishable output\n run: |\n@@ -54,8 +54,16 @@ def write_snapshot(output: Path) -> dict:\n def main() -> int:\n parser = argparse.ArgumentParser()\n parser.add_argument("--output", type=Path, default=DEFAULT_OUTPUT)\n+ parser.add_argument("--optional", action="store_true",\n+ help="Skip a missing provider snapshot during site builds")\n args = parser.parse_args()\n- payload = write_snapshot(args.output)\n+ try:\n+ payload = write_snapshot(args.output)\n+ except adsb.ProviderDown as exc:\n+ if not args.optional:\n+ raise\n+ print(f"radar snapshot: unavailable ({exc}); continuing site build")\n+ return 0\n print(\n f"radar snapshot: {len(payload['ac'])} public / "\n f"{payload['source_total']} source rows")\n@@ -60,14 +60,28 @@ def main() -> None:\n assert "emergency" not in serialized\n \n original = adsb.adsb_lol_point\n+ original_argv = sys.argv\n try:\n adsb.adsb_lol_point = lambda *_: [row()]\n with tempfile.TemporaryDirectory() as tmp:\n output = Path(tmp) / "assets" / "radar.json"\n written = radar_snapshot.write_snapshot(output)\n assert json.loads(output.read_text(encoding="utf-8")) == written\n+ adsb.adsb_lol_point = lambda *_: []\n+ sys.argv = ["radar_snapshot.py", "--output", str(output),\n+ "--optional"]\n+ assert radar_snapshot.main() == 0\n+ assert json.loads(output.read_text(encoding="utf-8")) == written\n+ sys.argv = ["radar_snapshot.py", "--output", str(output)]\n+ try:\n+ radar_snapshot.main()\n+ except adsb.ProviderDown:\n+ pass\n+ else:\n+ raise AssertionError("strict snapshot must fail on provider outage")\n finally:\n adsb.adsb_lol_point = original\n+ sys.argv = original_argv\n print("test_radar_snapshot: OK")\n \n