fix(ci): skip placeholder-integrity tests on forks in python-tests (#407)

Add @unittest.skipIf on GITHUB_REPOSITORY to TestCvSentinelsAreDataLocated
and TestProfileSentinelIsDataLocated so python-tests matches the upstream-only
placeholder-integrity job. Default unset GITHUB_REPOSITORY to upstream so local
pristine-template runs still execute the guards.

Fixes MadsLorentzen/ai-job-search#405

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: shahidbeig-a11y <shahidbeig-a11y@users.noreply.github.com>
This commit is contained in:
shahidbeig-a11y
2026-09-03 19:14:01 +02:00
committed by GitHub
co-authored by Cursor Agent shahidbeig-a11y
parent 7f709eda57
commit 6f0178a8a1
2 changed files with 18 additions and 0 deletions
+7
View File
@@ -41,6 +41,13 @@ per-file diff commands.
### Fixed ### Fixed
- **Placeholder-integrity tests in `python-tests` now skip on forks** (#405) - the dedicated
`placeholder-integrity` job already gates on the upstream repo name, but `python-tests` ran
`unittest discover` with no such guard, so forks that personalized files via `/setup` failed
three sentinel checks permanently. Both test classes now use `@unittest.skipIf` on
`GITHUB_REPOSITORY` (defaulting to upstream when unset so local pristine-template runs still
execute).
- **`convert_salary_excel.py` no longer mistakes a title/citation row for the header row** - **`convert_salary_excel.py` no longer mistakes a title/citation row for the header row**
(#414) - header-row detection accepted the first row in the first 10 where *any* cell merely (#414) - header-row detection accepted the first row in the first 10 where *any* cell merely
contained a company-pattern word, with no check that the row actually looked like a header. A contained a company-pattern word, with no check that the row actually looked like a header. A
+11
View File
@@ -15,9 +15,12 @@ the sentinels exist in the pristine files, and (c) that simulating the
/setup edit destroys at least one checked sentinel per file - i.e. the /setup edit destroys at least one checked sentinel per file - i.e. the
guard actually fires on the failure it exists to catch. guard actually fires on the failure it exists to catch.
""" """
import os
import unittest import unittest
from pathlib import Path from pathlib import Path
UPSTREAM = "MadsLorentzen/ai-job-search"
REPO = Path(__file__).resolve().parent.parent REPO = Path(__file__).resolve().parent.parent
CI = REPO / ".github" / "workflows" / "ci.yml" CI = REPO / ".github" / "workflows" / "ci.yml"
EXAMPLE_CV = REPO / "cv" / "main_example.tex" EXAMPLE_CV = REPO / "cv" / "main_example.tex"
@@ -41,6 +44,10 @@ def personalize_cv(text: str) -> str:
) )
@unittest.skipIf(
os.environ.get("GITHUB_REPOSITORY", UPSTREAM) != UPSTREAM,
"placeholder-integrity guards the pristine upstream template; forks personalize these files via /setup",
)
class TestCvSentinelsAreDataLocated(unittest.TestCase): class TestCvSentinelsAreDataLocated(unittest.TestCase):
def setUp(self): def setUp(self):
self.ci = CI.read_text(encoding="utf-8") self.ci = CI.read_text(encoding="utf-8")
@@ -74,6 +81,10 @@ class TestCvSentinelsAreDataLocated(unittest.TestCase):
) )
@unittest.skipIf(
os.environ.get("GITHUB_REPOSITORY", UPSTREAM) != UPSTREAM,
"placeholder-integrity guards the pristine upstream template; forks personalize these files via /setup",
)
class TestProfileSentinelIsDataLocated(unittest.TestCase): class TestProfileSentinelIsDataLocated(unittest.TestCase):
def test_ci_checks_a_data_placeholder_not_the_header_comment(self): def test_ci_checks_a_data_placeholder_not_the_header_comment(self):
ci = CI.read_text(encoding="utf-8") ci = CI.read_text(encoding="utf-8")