@@ -16,7 +16,8 @@ def get_github_token() -> str:
1616
1717
1818# 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 :
2021 github_token = get_github_token ()
2122
2223 return urllib .request .Request (
@@ -52,7 +53,8 @@ def list_changed_files(owner: str, repo: str, pr_number: int, per_page=100) -> l
5253
5354 CURSOR = ""
5455 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 )
5658 response = urllib .request .urlopen (request )
5759 data = json .loads (response .read ().decode ("utf-8" ))
5860 response .close ()
@@ -81,21 +83,30 @@ def analyze_build_directories(make_target) -> list[str]:
8183 print (e .stderr , e .stdout )
8284 raise
8385
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 } " )
8587 return directories
8688
8789
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."""
8993 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 ""
9398
9499
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
99110
100111
101112class SelTestsTest (unittest .TestCase ):
@@ -104,12 +115,12 @@ def test_compose_gh_api_request__call_without_asserting(self):
104115 print (request .data )
105116
106117 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' }
110121
111122 def test_analyze_build_directories (self ):
112123 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