test(ci): enforce preview publish step order

This commit is contained in:
yeasy
2026-07-10 19:29:30 -07:00
parent 1f970681ee
commit 44822cea16
+23 -3
View File
@@ -159,6 +159,14 @@ def workflow_step_script(workflow_text, step_name):
return textwrap.dedent(workflow_text[script_start:script_end]) return textwrap.dedent(workflow_text[script_start:script_end])
def workflow_step_scripts_in_document_order(workflow_text, step_names):
ordered_names = sorted(
step_names,
key=lambda name: workflow_text.index(f" - name: {name}\n"),
)
return tuple(workflow_step_script(workflow_text, name) for name in ordered_names)
class WorkflowSecurityTests(unittest.TestCase): class WorkflowSecurityTests(unittest.TestCase):
@staticmethod @staticmethod
def workflows(): def workflows():
@@ -212,6 +220,15 @@ class WorkflowSecurityTests(unittest.TestCase):
name, name,
) )
def test_preview_publish_steps_follow_tag_release_asset_order(self):
preview = (WORKFLOW_DIR / "preview-pdf.yml").read_text(encoding="utf-8")
synchronize = preview.index(" - name: Synchronize mutable preview tag\n")
release = preview.index(" - name: Create or update preview release\n")
upload = preview.index(" - name: Replace preview assets\n")
self.assertLess(synchronize, release)
self.assertLess(release, upload)
def run_preview_scripts( def run_preview_scripts(
self, self,
scenario, scenario,
@@ -220,9 +237,12 @@ class WorkflowSecurityTests(unittest.TestCase):
sha=TEST_SHA, sha=TEST_SHA,
): ):
preview = (WORKFLOW_DIR / "preview-pdf.yml").read_text(encoding="utf-8") preview = (WORKFLOW_DIR / "preview-pdf.yml").read_text(encoding="utf-8")
scripts = ( scripts = workflow_step_scripts_in_document_order(
workflow_step_script(preview, "Synchronize mutable preview tag"), preview,
workflow_step_script(preview, "Create or update preview release"), (
"Synchronize mutable preview tag",
"Create or update preview release",
),
) )
with tempfile.TemporaryDirectory() as directory: with tempfile.TemporaryDirectory() as directory:
root = Path(directory) root = Path(directory)