4242 all_ports_all_boards ,
4343)
4444
45- IGNORE = [
46- "tools/ci_set_matrix.py" ,
45+ # Files that never influence board builds
46+ IGNORE_BOARD = {
47+ ".devcontainer" ,
48+ "docs" ,
49+ "tests" ,
50+ "tools/ci_changes_per_commit.py" ,
4751 "tools/ci_check_duplicate_usb_vid_pid.py" ,
48- ]
49-
50- # Files in these directories never influence board builds
51- IGNORE_DIRS = ["tests" , "docs" , ".devcontainer" ]
52+ "tools/ci_set_matrix.py" ,
53+ }
5254
5355PATTERN_DOCS = (
5456 r"^(?:\.github|docs|extmod\/ulab)|"
5557 r"^(?:(?:ports\/\w+\/bindings|shared-bindings)\S+\.c|tools\/extract_pyi\.py|\.readthedocs\.yml|conf\.py|requirements-doc\.txt)$|"
5658 r"(?:-stubs|\.(?:md|MD|rst|RST))$"
5759)
5860
59- PATTERN_WINDOWS = [
61+ PATTERN_WINDOWS = {
6062 ".github/" ,
6163 "extmod/" ,
6264 "lib/" ,
6365 "mpy-cross/" ,
6466 "ports/unix/" ,
65- "ports/windows/" ,
6667 "py/" ,
67- "requirements" ,
6868 "tools/" ,
69- ]
69+ "requirements-dev.txt" ,
70+ }
7071
7172
7273def git_diff (pattern : str ):
73- return (
74+ return set (
7475 subprocess .run (
7576 f"git diff { pattern } --name-only" ,
7677 capture_output = True ,
@@ -83,15 +84,15 @@ def git_diff(pattern: str):
8384
8485if len (sys .argv ) > 1 :
8586 print ("Using files list on commandline" )
86- changed_files = sys .argv [1 :]
87+ changed_files = set ( sys .argv [1 :])
8788elif os .environ .get ("BASE_SHA" ) and os .environ .get ("HEAD_SHA" ):
8889 print ("Using files list by computing diff" )
8990 changed_files = git_diff ("$BASE_SHA...$HEAD_SHA" )
9091 if os .environ .get ("GITHUB_EVENT_NAME" ) == "pull_request" :
91- changed_files = list ( set ( changed_files ). intersection (git_diff ("$HEAD_SHA~...$HEAD_SHA" ) ))
92+ changed_files . intersection_update (git_diff ("$HEAD_SHA~...$HEAD_SHA" ))
9293else :
9394 print ("Using files list in CHANGED_FILES" )
94- changed_files = json .loads (os .environ .get ("CHANGED_FILES" ) or "[]" )
95+ changed_files = set ( json .loads (os .environ .get ("CHANGED_FILES" ) or "[]" ) )
9596
9697print ("Using jobs list in LAST_FAILED_JOBS" )
9798last_failed_jobs = json .loads (os .environ .get ("LAST_FAILED_JOBS" ) or "{}" )
@@ -103,8 +104,8 @@ def print_enclosed(title, content):
103104 print ("::endgroup::" )
104105
105106
106- print_enclosed ("LOG : changed_files" , changed_files )
107- print_enclosed ("LOG : last_failed_jobs" , last_failed_jobs )
107+ print_enclosed ("Log : changed_files" , changed_files )
108+ print_enclosed ("Log : last_failed_jobs" , last_failed_jobs )
108109
109110
110111def set_output (name : str , value ):
@@ -173,11 +174,7 @@ def get_settings(board):
173174 boards_to_build .update (port_to_boards [port ])
174175 continue
175176
176- # Check the ignore list to see if the file isn't used on board builds.
177- if p in IGNORE :
178- continue
179-
180- if any ([p .startswith (d ) for d in IGNORE_DIRS ]):
177+ if any ([p .startswith (d ) for d in IGNORE_BOARD ]):
181178 continue
182179
183180 # As a (nearly) last resort, for some certain files, we compute the settings from the
@@ -287,7 +284,9 @@ def set_windows(build_windows: bool):
287284 else :
288285 for file in changed_files :
289286 for pattern in PATTERN_WINDOWS :
290- if file .startswith (pattern ):
287+ if file .startswith (pattern ) and not any (
288+ [file .startswith (d ) for d in IGNORE_BOARD ]
289+ ):
291290 build_windows = True
292291 break
293292 else :
@@ -302,11 +301,7 @@ def set_windows(build_windows: bool):
302301def main ():
303302 # Build all if no changed files
304303 build_all = not changed_files
305- print (
306- "Building all docs/boards"
307- if build_all
308- else "Adding docs/boards to build based on changed files"
309- )
304+ print ("Running: " + ("all" if build_all else "conditionally" ))
310305
311306 # Set jobs
312307 set_docs (build_all )
0 commit comments