@@ -17,38 +17,57 @@ jobs:
1717      - name : Checkout repository 
1818        uses : actions/checkout@v5 
1919        with :
20+           #  Checkout the base branch but fetch all history to avoid a second fetch call
2021          ref : ${{ github.base_ref }} 
21-           fetch-depth : 1 
22+           fetch-depth : 0 
2223
2324      - name : Set up Python 
2425        uses : actions/setup-python@v6 
2526        with :
26-           python-version : ' 3.13' 
27+           python-version : " 3.13" 
2728
2829      - name : Install Poetry 
2930        uses : abatilo/actions-poetry@v4 
3031        with :
31-           poetry-version : ' latest' 
32+           poetry-version : " latest" 
3233
3334      - name : Install dependencies 
3435        run : | 
3536          poetry install --no-interaction --with dev 
3637
37- name : Drop in place updated manifest from base 
38+ name : Prepare JSON versions for comparison 
3839        run : | 
39-           cp sherlock_project/resources/data.json data.json.base 
40-           git fetch origin pull/${{ github.event.pull_request.number }}/head:pr --depth=1 
41-           git show pr:sherlock_project/resources/data.json > sherlock_project/resources/data.json 
42-           cp sherlock_project/resources/data.json data.json.head 
40+           # Fetch only the PR's branch head (single network call in this step) 
41+           git fetch origin pull/${{ github.event.pull_request.number }}/head:pr 
42+ 
43+           # Find the merge-base commit between the target branch and the PR branch 
44+           MERGE_BASE=$(git merge-base origin/${{ github.base_ref }} pr) 
45+           echo "Comparing PR head against merge-base commit: $MERGE_BASE" 
46+ 
47+           # Safely extract the file from the PR's head and the merge-base commit 
48+           git show pr:sherlock_project/resources/data.json > data.json.head 
49+           git show $MERGE_BASE:sherlock_project/resources/data.json > data.json.base 
50+ 
51+           # CRITICAL FIX: Overwrite the checked-out data.json with the one from the PR 
52+           # This ensures that pytest runs against the new, updated file. 
53+           cp data.json.head sherlock_project/resources/data.json 
4354
4455name : Discover modified targets 
4556        id : discover-modified 
4657        run : | 
4758          CHANGED=$( 
4859            python - <<'EOF' 
4960          import json 
50-           with open("data.json.base") as f: base = json.load(f) 
51-           with open("data.json.head") as f: head = json.load(f) 
61+           import sys 
62+           try: 
63+               with open("data.json.base") as f: base = json.load(f) 
64+               with open("data.json.head") as f: head = json.load(f) 
65+           except FileNotFoundError as e: 
66+               print(f"Error: Could not find {e.filename}", file=sys.stderr) 
67+               sys.exit(1) 
68+           except json.JSONDecodeError as e: 
69+               print(f"Error: Could not decode JSON from a file - {e}", file=sys.stderr) 
70+               sys.exit(1) 
5271
5372          changed = [] 
5473          for k, v in head.items(): 
6382          echo -e ">>> Changed targets: \n$(echo $CHANGED | tr ',' '\n')" 
6483          echo "changed_targets=$CHANGED" >> "$GITHUB_OUTPUT" 
6584
85+ #  --- The rest of the steps below are unchanged ---
86+ 
6687      - name : Validate modified targets 
6788        if : steps.discover-modified.outputs.changed_targets != '' 
6889        continue-on-error : true 
0 commit comments