feat(automation): weekly Forgejo package prune shell resolver (WP-0020)
Some checks are pending
CI Smoke / host-smoke (push) Waiting to run
CI Smoke / container-smoke (push) Waiting to run
Build and Publish Container Image / build-and-push (push) Successful in 35s

Add forgejo_package_prune query, weekly activity-definition (disabled),
State Hub evidence sink support for shell sources, and runbook notes.
This commit is contained in:
tegwick 2026-07-12 11:35:04 +02:00
parent a853cd3118
commit 5b6d9f4e95
7 changed files with 176 additions and 7 deletions

View file

@ -0,0 +1,39 @@
from __future__ import annotations
import json
from unittest import mock
from activity_core.context_resolvers.base import CONTEXT_RESOLVER_REGISTRY
class _Completed:
def __init__(self, payload: dict, returncode: int = 0, stderr: str = "") -> None:
self.stdout = json.dumps(payload)
self.stderr = stderr
self.returncode = returncode
def test_shell_resolver_runs_forgejo_package_prune(tmp_path, monkeypatch) -> None:
script = tmp_path / "forgejo-package-prune"
script.write_text("#!/usr/bin/env bash\necho '{}'\n", encoding="utf-8")
script.chmod(0o755)
payload = {
"candidate_count": 2,
"deleted_count": 0,
"skipped_protected_count": 1,
"errors": [],
}
monkeypatch.setattr(
"activity_core.context_resolvers.forgejo_prune.subprocess.run",
lambda *args, **kwargs: _Completed(payload),
)
result = CONTEXT_RESOLVER_REGISTRY["shell"]().resolve(
"forgejo_package_prune",
None,
{"prune_script": str(script), "max_versions": 3, "apply": False},
)
assert result["kind"] == "forgejo_package_prune"
assert result["candidate_count"] == 2