From 5c4a3d343a3e2e7dd485ad51454ecaa52c2c4414 Mon Sep 17 00:00:00 2001 From: omit-test Date: Thu, 7 May 2026 23:39:37 +0200 Subject: [PATCH 1/3] fix code review semgrep runtime dirs --- .../specfact-code-review/module-package.yaml | 5 ++-- .../tools/semgrep_runner.py | 8 ++++-- .../tools/test_semgrep_runner.py | 25 +++++++++++++++++++ 3 files changed, 33 insertions(+), 5 deletions(-) diff --git a/packages/specfact-code-review/module-package.yaml b/packages/specfact-code-review/module-package.yaml index 2f5114f0..71b4d1ae 100644 --- a/packages/specfact-code-review/module-package.yaml +++ b/packages/specfact-code-review/module-package.yaml @@ -1,5 +1,5 @@ name: nold-ai/specfact-code-review -version: 0.47.14 +version: 0.47.15 commands: - code tier: official @@ -23,5 +23,4 @@ description: Official SpecFact code review bundle package. category: codebase bundle_group_command: code integrity: - checksum: sha256:9feec110298126ea77f58789dc4c7ba61ff9bfdcaee91b580afd57b9178903ae - signature: kIHPg05QU/PSTuGYnn1a2JtXooCCWx1gGZ4bmjoJqOjRQpso/tD2xaApAjYOwCEpXXpRceaBMa+PC3DrniKrCA== + checksum: sha256:f9b3b54bcbf8f481607bbfe7bf02fb77625953d19ccce8b11d74e44580608e8c diff --git a/packages/specfact-code-review/src/specfact_code_review/tools/semgrep_runner.py b/packages/specfact-code-review/src/specfact_code_review/tools/semgrep_runner.py index 67fdb70f..5fee2b58 100644 --- a/packages/specfact-code-review/src/specfact_code_review/tools/semgrep_runner.py +++ b/packages/specfact-code-review/src/specfact_code_review/tools/semgrep_runner.py @@ -169,11 +169,15 @@ def _run_semgrep_command( with tempfile.TemporaryDirectory(prefix="semgrep-home-") as temp_home: semgrep_home = Path(temp_home) semgrep_log_dir = semgrep_home / ".semgrep" + semgrep_config_dir = semgrep_home / ".config" + semgrep_cache_dir = semgrep_home / ".cache" semgrep_log_dir.mkdir(parents=True, exist_ok=True) + semgrep_config_dir.mkdir(parents=True, exist_ok=True) + semgrep_cache_dir.mkdir(parents=True, exist_ok=True) env = os.environ.copy() env["HOME"] = str(semgrep_home) - env["XDG_CONFIG_HOME"] = str(semgrep_home / ".config") - env["XDG_CACHE_HOME"] = str(semgrep_home / ".cache") + env["XDG_CONFIG_HOME"] = str(semgrep_config_dir) + env["XDG_CACHE_HOME"] = str(semgrep_cache_dir) env["SEMGREP_SETTINGS_FILE"] = str(semgrep_log_dir / "settings.yml") env.setdefault("SEMGREP_SEND_METRICS", "off") return subprocess.run( diff --git a/tests/unit/specfact_code_review/tools/test_semgrep_runner.py b/tests/unit/specfact_code_review/tools/test_semgrep_runner.py index b2f12078..6661ec83 100644 --- a/tests/unit/specfact_code_review/tools/test_semgrep_runner.py +++ b/tests/unit/specfact_code_review/tools/test_semgrep_runner.py @@ -10,6 +10,7 @@ from pytest import MonkeyPatch from specfact_code_review.tools.semgrep_runner import ( + _run_semgrep_command, _snip_stderr_tail, find_semgrep_config, run_semgrep, @@ -35,6 +36,30 @@ ] +def test_run_semgrep_command_creates_runtime_dirs(tmp_path: Path, monkeypatch: MonkeyPatch) -> None: + target = tmp_path / "target.py" + config = tmp_path / "clean_code.yaml" + target.write_text("print('x')\n", encoding="utf-8") + config.write_text("rules: []\n", encoding="utf-8") + captured_env: dict[str, str] = {} + + def _run(command: list[str], **kwargs: object) -> subprocess.CompletedProcess[str]: + del command + env = kwargs["env"] + assert isinstance(env, dict) + captured_env.update({str(key): str(value) for key, value in env.items()}) + assert Path(captured_env["XDG_CONFIG_HOME"]).is_dir() + assert Path(captured_env["XDG_CACHE_HOME"]).is_dir() + assert Path(captured_env["SEMGREP_SETTINGS_FILE"]).parent.is_dir() + return completed_process("semgrep", stdout='{"results": []}', returncode=0) + + monkeypatch.setattr(subprocess, "run", _run) + + _run_semgrep_command([target], bundle_root=None, config_file=config) + + assert captured_env["XDG_CONFIG_HOME"].endswith(".config") + + @pytest.fixture(autouse=True) def _stub_semgrep_on_path(monkeypatch: MonkeyPatch) -> None: # pyright: ignore[reportUnusedFunction] real_which = shutil.which From 866e64d677581a17bfe3ebedfef79c0340fc68df Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 7 May 2026 21:44:32 +0000 Subject: [PATCH 2/3] chore(modules): ci sign changed modules --- packages/specfact-code-review/module-package.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/specfact-code-review/module-package.yaml b/packages/specfact-code-review/module-package.yaml index 71b4d1ae..2c4d4843 100644 --- a/packages/specfact-code-review/module-package.yaml +++ b/packages/specfact-code-review/module-package.yaml @@ -24,3 +24,4 @@ category: codebase bundle_group_command: code integrity: checksum: sha256:f9b3b54bcbf8f481607bbfe7bf02fb77625953d19ccce8b11d74e44580608e8c + signature: w5tEmlYK7MGBFVD19g7b7D3pob27CgP2dF12J3fxbr268LskXZZ1rNvwhK/7FRYYjGci8pIJAfg8ZtRCeWTfBg== From 31964038dbc10f4b0a3647f980cd83dae0058cfd Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 7 May 2026 21:49:18 +0000 Subject: [PATCH 3/3] chore(registry): publish changed modules [skip ci] --- registry/index.json | 6 +++--- .../modules/specfact-code-review-0.47.15.tar.gz | Bin 0 -> 37975 bytes .../specfact-code-review-0.47.15.tar.gz.sha256 | 1 + .../specfact-code-review-0.47.15.tar.sig | 1 + 4 files changed, 5 insertions(+), 3 deletions(-) create mode 100644 registry/modules/specfact-code-review-0.47.15.tar.gz create mode 100644 registry/modules/specfact-code-review-0.47.15.tar.gz.sha256 create mode 100644 registry/signatures/specfact-code-review-0.47.15.tar.sig diff --git a/registry/index.json b/registry/index.json index a2caa4bd..b4b431c2 100644 --- a/registry/index.json +++ b/registry/index.json @@ -78,9 +78,9 @@ }, { "id": "nold-ai/specfact-code-review", - "latest_version": "0.47.14", - "download_url": "modules/specfact-code-review-0.47.14.tar.gz", - "checksum_sha256": "2dbe299a82c3fc48f676a5b90ddc35f0454abf6fa48abc1913b8aaba07fba321", + "latest_version": "0.47.15", + "download_url": "modules/specfact-code-review-0.47.15.tar.gz", + "checksum_sha256": "f9b675348b58aec57c13250bd999f8adf6edb9a1db6c99d418e10a9eb69979ca", "core_compatibility": ">=0.44.0,<1.0.0", "tier": "official", "publisher": { diff --git a/registry/modules/specfact-code-review-0.47.15.tar.gz b/registry/modules/specfact-code-review-0.47.15.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..852aca9cbeb0dbd8e2b58694f0d7810a8ef0d66c GIT binary patch literal 37975 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 literal 0 HcmV?d00001 diff --git a/registry/modules/specfact-code-review-0.47.15.tar.gz.sha256 b/registry/modules/specfact-code-review-0.47.15.tar.gz.sha256 new file mode 100644 index 00000000..4b9c71f3 --- /dev/null +++ b/registry/modules/specfact-code-review-0.47.15.tar.gz.sha256 @@ -0,0 +1 @@ +f9b675348b58aec57c13250bd999f8adf6edb9a1db6c99d418e10a9eb69979ca diff --git a/registry/signatures/specfact-code-review-0.47.15.tar.sig b/registry/signatures/specfact-code-review-0.47.15.tar.sig new file mode 100644 index 00000000..1808ab54 --- /dev/null +++ b/registry/signatures/specfact-code-review-0.47.15.tar.sig @@ -0,0 +1 @@ +w5tEmlYK7MGBFVD19g7b7D3pob27CgP2dF12J3fxbr268LskXZZ1rNvwhK/7FRYYjGci8pIJAfg8ZtRCeWTfBg==