🐛 fix(ci): route scheduled thirdparty updates through prepare
This commit is contained in:
@@ -11,6 +11,7 @@ from pathlib import Path
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
MANIFEST = ROOT / ".gitea" / "ci" / "thirdparty_skills.json"
|
||||
WORKFLOW = ROOT / ".gitea" / "workflows" / "update-thirdparty-skills.yml"
|
||||
PREPARE_WORKFLOW = ROOT / ".gitea" / "workflows" / "prepare.yml"
|
||||
TSL_SYNC_WORKFLOW = ROOT / ".gitea" / "workflows" / "sync-tsl-playbook.yml"
|
||||
LEGACY_WORKFLOW = ROOT / ".gitea" / "workflows" / "update-thirdparty-superpowers.yml"
|
||||
UPDATE_SCRIPT = ROOT / ".gitea" / "ci" / "update_thirdparty_skills.sh"
|
||||
@@ -21,6 +22,21 @@ def load_manifest() -> dict:
|
||||
return json.loads(MANIFEST.read_text(encoding="utf-8"))
|
||||
|
||||
|
||||
def workflow_mapping_keys(text: str, section: str) -> list[str]:
|
||||
lines = text.splitlines()
|
||||
section_line = f"{section}:"
|
||||
start = lines.index(section_line) + 1
|
||||
keys = []
|
||||
for line in lines[start:]:
|
||||
if line and not line.startswith(" "):
|
||||
break
|
||||
if line.startswith(" ") and not line.startswith(" "):
|
||||
stripped = line.strip()
|
||||
if stripped.endswith(":") and not stripped.startswith("#"):
|
||||
keys.append(stripped[:-1])
|
||||
return keys
|
||||
|
||||
|
||||
def bash_path(path: Path) -> str:
|
||||
resolved = path.resolve()
|
||||
if os.name != "nt":
|
||||
@@ -212,6 +228,45 @@ class ThirdpartySkillsPipelineTests(unittest.TestCase):
|
||||
self.assertIn("update_thirdparty_snapshots", text)
|
||||
self.assertIn("sync_thirdparty_skills", text)
|
||||
|
||||
def test_scheduled_prepare_calls_updater_without_an_independent_entry(self):
|
||||
prepare_text = PREPARE_WORKFLOW.read_text(encoding="utf-8")
|
||||
updater_text = WORKFLOW.read_text(encoding="utf-8")
|
||||
|
||||
self.assertEqual(
|
||||
workflow_mapping_keys(prepare_text, "jobs"),
|
||||
["prepare", "update_thirdparty_scheduled"],
|
||||
)
|
||||
self.assertEqual(
|
||||
workflow_mapping_keys(updater_text, "on"),
|
||||
["workflow_call", "workflow_run"],
|
||||
)
|
||||
self.assertIn(" needs: prepare", prepare_text)
|
||||
self.assertIn(" if: ${{ github.event_name == 'schedule' }}", prepare_text)
|
||||
self.assertIn(
|
||||
" uses: ./.gitea/workflows/update-thirdparty-skills.yml",
|
||||
prepare_text,
|
||||
)
|
||||
self.assertIn(" source_branch: ${{ github.ref_name }}", prepare_text)
|
||||
self.assertIn(" source_sha: ${{ github.sha }}", prepare_text)
|
||||
self.assertIn(" WORKFLOW: ${{ secrets.WORKFLOW }}", prepare_text)
|
||||
self.assertIn(" workflow_call:", updater_text)
|
||||
self.assertIn(" source_branch:", updater_text)
|
||||
self.assertIn(" source_sha:", updater_text)
|
||||
self.assertIn(" WORKFLOW:", updater_text)
|
||||
self.assertIn(" required: true", updater_text)
|
||||
self.assertIn(
|
||||
"SOURCE_BRANCH: ${{ inputs.source_branch || "
|
||||
"github.event.workflow_run.head_branch }}",
|
||||
updater_text,
|
||||
)
|
||||
self.assertIn(
|
||||
"SOURCE_SHA: ${{ inputs.source_sha || "
|
||||
"github.event.workflow_run.head_sha }}",
|
||||
updater_text,
|
||||
)
|
||||
self.assertIn("github.event_name == 'workflow_call' ||", updater_text)
|
||||
self.assertIn("github.event.workflow_run.event != 'schedule'", updater_text)
|
||||
|
||||
def test_inline_workflow_exposes_manifest_and_publish_contract(self):
|
||||
text = WORKFLOW.read_text(encoding="utf-8")
|
||||
self.assertIn('MANIFEST_PATH="${MANIFEST_PATH:-.gitea/ci/thirdparty_skills.json}"', text)
|
||||
|
||||
Reference in New Issue
Block a user