@@ -48,15 +48,6 @@ def build_type(wildcards):
4848 return "github_actions" if "GITHUB_ACTIONS" in os .environ else "local"
4949
5050
51- def image_markers (wildcards ):
52- """Get the appropriate marker for each image."""
53- return [
54- docker_image_marker (image )
55- for image in os .listdir (IMAGES_DIR )
56- if os .path .isdir (os .path .join (IMAGES_DIR , image ))
57- ]
58-
59-
6051def push_images (wildcards ):
6152 """Get Docker push timestamp for all images."""
6253 images = _images (".docker_push" )
@@ -321,21 +312,24 @@ def docker_image_marker(image, refresh=True):
321312 """Get the file to be created to ensure Docker image exists from the image name."""
322313 docker_path = os .path .join (IMAGES_DIR , image )
323314 # possible outputs
324- docker_refresh = os .path .join (docker_path , ".docker_update " )
315+ docker_refresh = os .path .join (docker_path , ".docker_refresh " )
325316 dockerfile = os .path .join (docker_path , "Dockerfile" )
326317 no_change = docker_refresh if refresh else dockerfile
327318 no_change_text = "refreshing source code only" if refresh else "no change"
328319 docker_build = os .path .join (docker_path , ".docker_build" )
329320
330- # inputs to conditional logic
331- local_imagespec_changed = docker_imagespec_changed ( image , dockerfile )
332- local_codespec_changed = not version_not_changed ()
333- if local_codespec_changed :
321+ if "docker_build" in sys . argv :
322+ # building everything from scratch
323+ requirement_file = docker_build
324+ elif not version_not_changed () :
334325 print (
335326 "Code version changed: {}" .format (openproblems .__version__ ), file = sys .stderr
336327 )
337- if local_imagespec_changed or local_codespec_changed :
338- # spec has changed, let's rebuild
328+ # codebase has changed, let's rebuild
329+ print ("{}: rebuilding" .format (image ), file = sys .stderr )
330+ requirement_file = docker_build
331+ elif docker_imagespec_changed (image , dockerfile ):
332+ # image has changed, let's rebuild
339333 print ("{}: rebuilding" .format (image ), file = sys .stderr )
340334 requirement_file = docker_build
341335 elif docker_image_exists (image , local = True ) or docker_image_exists (
@@ -352,48 +346,46 @@ def docker_image_marker(image, refresh=True):
352346 return requirement_file
353347
354348
355- def _docker_requirements (image , include_self = False , refresh = True ):
349+ def _docker_requirements (image , refresh = True ):
356350 """Get all files to ensure a Docker image is up to date from the image name."""
357351 docker_dir = os .path .join (IMAGES_DIR , image )
358- dockerfile = os .path .join (docker_dir , "Dockerfile" )
359- requirements = [dockerfile ]
352+ requirements = []
353+ if not refresh :
354+ dockerfile = os .path .join (docker_dir , "Dockerfile" )
355+ requirements .append (dockerfile )
360356 requirements .extend (
361357 [
362358 os .path .join (docker_dir , f )
363359 for f in os .listdir (docker_dir )
364360 if f .endswith ("requirements.txt" )
365361 ]
366362 )
367- if include_self :
368- requirements .append (docker_image_marker (image , refresh = refresh ))
369363 base_image = _docker_base (image )
370364 if base_image is not None :
371- requirements .extend (
372- _docker_requirements (base_image , include_self = True , refresh = refresh )
373- )
365+ requirements .append (os .path .join (IMAGES_DIR , base_image , ".docker_update" ))
374366 return requirements
375367
376368
377- def docker_requirements (wildcards ):
369+ def docker_build_requirements (wildcards ):
378370 """Get all files to ensure a Docker image is up to date from wildcards."""
379- return _docker_requirements (wildcards .image )
371+ return _docker_requirements (wildcards .image , refresh = False )
380372
381373
382374def docker_update_requirements (wildcards ):
375+ """Check if we need to refresh or build a docker image."""
376+ return docker_image_marker (wildcards .image , refresh = True )
377+
378+
379+ def docker_refresh_requirements (wildcards ):
383380 """Get all files to ensure a Docker image is built and up to date from wildcards."""
384- return _docker_requirements (wildcards .image , include_self = True , refresh = True )
381+ return _docker_requirements (wildcards .image , refresh = True )
385382
386383
387384def docker_push_requirements (wildcards ):
388385 """Get all files to ensure a Docker image is ready to push from wildcards."""
389386 return _docker_requirements (wildcards .image , include_self = True , refresh = False )
390387
391388
392- def docker_push (wildcards ):
393- """Get the file to be created to ensure Docker image exists from wildcards."""
394- return docker_image_marker (docker_image_name (wildcards ))
395-
396-
397389def docker_command (wildcards , output ):
398390 """Get the Docker command to be run given a set of wildcards."""
399391 image = docker_image_name (wildcards )
0 commit comments