66from pathlib import Path
77from typing import List
88
9- from praktika .utils import Shell
10-
11- from . import Job
129from .docker import Docker
10+ from .job import Job
1311from .settings import Settings
14- from .utils import Utils
12+ from .utils import Shell , Utils
1513
1614
1715class Digest :
@@ -30,7 +28,7 @@ def _hash_digest_config(digest_config: Job.CacheDigestConfig) -> str:
3028 def get_null_digest (cls ):
3129 return "f" * Settings .CACHE_DIGEST_LEN
3230
33- def calc_job_digest (self , job_config : Job .Config , docker_digests ):
31+ def calc_job_digest (self , job_config : Job .Config , docker_digests , artifact_configs ):
3432 config = job_config .digest_config
3533 if not config :
3634 return self .get_null_digest ()
@@ -72,6 +70,7 @@ def calc_job_digest(self, job_config: Job.Config, docker_digests):
7270 digest = "-" .join ([docker_digest , digest ])
7371
7472 job_config_dict = dataclasses .asdict (job_config )
73+
7574 drop_fields = [
7675 "requires" ,
7776 "enable_commit_status" ,
@@ -80,6 +79,15 @@ def calc_job_digest(self, job_config: Job.Config, docker_digests):
8079 filtered_job_dict = {
8180 k : v for k , v in job_config_dict .items () if k not in drop_fields
8281 }
82+ # add Articat.Configs list to the job config dict so that changed Articat.Config object affects job digest
83+ job_provides_artifact_configs = []
84+ for a in job_config .provides :
85+ if a in artifact_configs :
86+ job_provides_artifact_configs .append (
87+ dataclasses .asdict (artifact_configs [a ])
88+ )
89+ filtered_job_dict ["provides" ] = job_provides_artifact_configs
90+
8391 config_digest = hashlib .md5 (
8492 json .dumps (filtered_job_dict , sort_keys = True ).encode ()
8593 ).hexdigest ()[: min (Settings .CACHE_DIGEST_LEN // 4 , 4 )]
0 commit comments