@@ -135,24 +135,49 @@ def __init__(self, path: str):
135
135
github_base_ref = os .getenv ('GITHUB_BASE_REF' )
136
136
github_head_ref = os .getenv ('GITHUB_HEAD_REF' )
137
137
github_event_name = os .getenv ('GITHUB_EVENT_NAME' )
138
+ github_before_sha = os .getenv ('GITHUB_EVENT_BEFORE' ) # previous commit for push
139
+ github_sha = os .getenv ('GITHUB_SHA' ) # current commit
138
140
if github_event_name == 'pull_request' and github_base_ref and github_head_ref :
139
141
try :
140
- self .repo .git .fetch ('origin' , github_base_ref , github_head_ref )
142
+ # Fetch both branches individually
143
+ self .repo .git .fetch ('origin' , github_base_ref )
144
+ self .repo .git .fetch ('origin' , github_head_ref )
145
+ # Try remote diff first
141
146
diff_range = f"origin/{ github_base_ref } ...origin/{ github_head_ref } "
142
- diff_files = self .repo .git .diff ('--name-only' , diff_range )
147
+ try :
148
+ diff_files = self .repo .git .diff ('--name-only' , diff_range )
149
+ self .show_files = diff_files .splitlines ()
150
+ log .debug (f"Changed files detected via git diff (GitHub PR remote): { self .show_files } " )
151
+ detected = True
152
+ except Exception as remote_error :
153
+ log .debug (f"Remote diff failed: { remote_error } " )
154
+ # Try local branch diff
155
+ local_diff_range = f"{ github_base_ref } ...{ github_head_ref } "
156
+ try :
157
+ diff_files = self .repo .git .diff ('--name-only' , local_diff_range )
158
+ self .show_files = diff_files .splitlines ()
159
+ log .debug (f"Changed files detected via git diff (GitHub PR local): { self .show_files } " )
160
+ detected = True
161
+ except Exception as local_error :
162
+ log .debug (f"Local diff failed: { local_error } " )
163
+ except Exception as error :
164
+ log .debug (f"Failed to fetch branches or diff for GitHub PR: { error } " )
165
+ # Commits to default branch (push events)
166
+ elif github_event_name == 'push' and github_before_sha and github_sha :
167
+ try :
168
+ diff_files = self .repo .git .diff ('--name-only' , f'{ github_before_sha } ..{ github_sha } ' )
143
169
self .show_files = diff_files .splitlines ()
144
- log .debug (f"Changed files detected via git diff (GitHub PR ): { self .show_files } " )
170
+ log .debug (f"Changed files detected via git diff (GitHub push ): { self .show_files } " )
145
171
detected = True
146
172
except Exception as error :
147
- log .debug (f"Failed to get changed files via git diff (GitHub PR): { error } " )
148
- # Commits to default branch (push events)
173
+ log .debug (f"Failed to get changed files via git diff (GitHub push): { error } " )
149
174
elif github_event_name == 'push' :
150
175
try :
151
176
self .show_files = self .repo .git .show (self .commit , name_only = True , format = "%n" ).splitlines ()
152
- log .debug (f"Changed files detected via git show (GitHub push): { self .show_files } " )
177
+ log .debug (f"Changed files detected via git show (GitHub push fallback ): { self .show_files } " )
153
178
detected = True
154
179
except Exception as error :
155
- log .debug (f"Failed to get changed files via git show (GitHub push): { error } " )
180
+ log .debug (f"Failed to get changed files via git show (GitHub push fallback ): { error } " )
156
181
# GitLab CI Merge Request context
157
182
if not detected :
158
183
gitlab_target = os .getenv ('CI_MERGE_REQUEST_TARGET_BRANCH_NAME' )
0 commit comments