@@ -16,7 +16,8 @@ def get_github_token() -> str:
16
16
17
17
18
18
# https://docs.github.com/en/graphql/guides/forming-calls-with-graphql
19
- def compose_gh_api_request (pull_number : int , owner = "opendatahub-io" , repo = "notebooks" , per_page = 100 , cursor = "" ) -> urllib .request .Request :
19
+ def compose_gh_api_request (pull_number : int , owner = "opendatahub-io" , repo = "notebooks" , per_page = 100 ,
20
+ cursor = "" ) -> urllib .request .Request :
20
21
github_token = get_github_token ()
21
22
22
23
return urllib .request .Request (
@@ -52,7 +53,8 @@ def list_changed_files(owner: str, repo: str, pr_number: int, per_page=100) -> l
52
53
53
54
CURSOR = ""
54
55
while CURSOR is not None :
55
- request = compose_gh_api_request (pull_number = pr_number , owner = owner , repo = repo , per_page = per_page , cursor = CURSOR )
56
+ request = compose_gh_api_request (pull_number = pr_number , owner = owner , repo = repo , per_page = per_page ,
57
+ cursor = CURSOR )
56
58
response = urllib .request .urlopen (request )
57
59
data = json .loads (response .read ().decode ("utf-8" ))
58
60
response .close ()
@@ -81,21 +83,30 @@ def analyze_build_directories(make_target) -> list[str]:
81
83
print (e .stderr , e .stdout )
82
84
raise
83
85
84
- logging .debug (f"Running make in --just-print mode for target { make_target } " )
86
+ logging .debug (f"Target { make_target } depends on files in directories { directories } " )
85
87
return directories
86
88
87
89
88
- def should_build_target (changed_files : list [str ], target_directories : list [str ]) -> bool :
90
+ def should_build_target (changed_files : list [str ], target_directories : list [str ]) -> str :
91
+ """Returns truthy if there is at least one changed file necessitating a build.
92
+ Falsy (empty) string is returned otherwise."""
89
93
for directory in target_directories :
90
- if any (changed_file .startswith (directory ) for changed_file in changed_files ):
91
- return True
92
- return False
94
+ for changed_file in changed_files :
95
+ if changed_file .startswith (directory ):
96
+ return changed_file
97
+ return ""
93
98
94
99
95
- def filter_out_unchanged (owner : str , repo : str , pr_number : int , targets : list [str ]) -> list [str ]:
96
- changed_files = list_changed_files (owner , repo , pr_number )
97
- return [target for target in targets if
98
- should_build_target (changed_files , target_directories = analyze_build_directories (target ))]
100
+ def filter_out_unchanged (targets : list [str ], changed_files : list [str ]) -> list [str ]:
101
+ changed = []
102
+ for target in targets :
103
+ target_directories = analyze_build_directories (target )
104
+ if reason := should_build_target (changed_files , target_directories ):
105
+ logging .info (f"✅ Will build { target } because file { reason } has been changed" )
106
+ changed .append (target )
107
+ else :
108
+ logging .info (f"❌ Won't build { target } " )
109
+ return changed
99
110
100
111
101
112
class SelTestsTest (unittest .TestCase ):
@@ -104,12 +115,12 @@ def test_compose_gh_api_request__call_without_asserting(self):
104
115
print (request .data )
105
116
106
117
def test_list_changed_files__pagination_works (self ):
107
- changed_files = list_changed_files (556 , per_page = 1 )
108
- assert changed_files == [ 'codeserver/ubi9-python-3.9/Dockerfile' ,
109
- 'codeserver/ubi9-python-3.9/run-code-server.sh' ]
118
+ changed_files = list_changed_files (owner = "opendatahub-io" , repo = "notebooks" , pr_number = 556 , per_page = 1 )
119
+ assert set ( changed_files ) == { 'codeserver/ubi9-python-3.9/Dockerfile' ,
120
+ 'codeserver/ubi9-python-3.9/run-code-server.sh' }
110
121
111
122
def test_analyze_build_directories (self ):
112
123
directories = analyze_build_directories ("jupyter-intel-pytorch-ubi9-python-3.9" )
113
- assert directories == [ "base/ubi9-python-3.9" ,
114
- "intel/base/gpu/ubi9-python-3.9" ,
115
- "jupyter/intel/pytorch/ubi9-python-3.9" ]
124
+ assert set ( directories ) == { "base/ubi9-python-3.9" ,
125
+ "intel/base/gpu/ubi9-python-3.9" ,
126
+ "jupyter/intel/pytorch/ubi9-python-3.9" }
0 commit comments