@@ -28,6 +28,7 @@ use crate::entities::placements::Placement;
2828#[ cfg( feature = "ssh-remotes" ) ]
2929use crate :: entities:: remote_host:: RemoteHost ;
3030use crate :: entities:: requirements:: { Satisfy , SatisfyErr } ;
31+ use crate :: entities:: skipper:: Skipper ;
3132use crate :: entities:: traits:: Merge ;
3233use crate :: i18n;
3334use crate :: pipelines:: DescribedPipeline ;
@@ -265,6 +266,7 @@ pub async fn run(
265266 storage_dir : & Path ,
266267 args : & RunArgs ,
267268 observe_cli : Option < ObserveClient > ,
269+ skipper : Skipper ,
268270) -> anyhow:: Result < bool > {
269271 let remote_folder = match std:: env:: var ( "DEPLOYER_REMOTE_AS_WORKER" ) {
270272 Ok ( path) => Some ( PathBuf :: from ( path) ) ,
@@ -288,6 +290,7 @@ pub async fn run(
288290 storage_dir,
289291 & globals. remote_hosts ,
290292 args,
293+ skipper,
291294 )
292295 . await ;
293296 }
@@ -350,6 +353,7 @@ pub async fn run(
350353 ansible_run : matches ! ( std:: env:: var( "DEPLOYER_ANSIBLE_RUN" ) , Ok ( val) if val. as_str( ) . eq( "1" ) ) ,
351354 daemons : Daemons :: default ( ) ,
352355 observe_cli : & observe_cli,
356+ skipper : skipper. clone ( ) ,
353357 } ;
354358
355359 let status = execute_pipeline ( config, & mut env, pipeline) . await ?;
@@ -393,6 +397,7 @@ pub async fn run(
393397 ansible_run : matches ! ( std:: env:: var( "DEPLOYER_ANSIBLE_RUN" ) , Ok ( val) if val. as_str( ) . eq( "1" ) ) ,
394398 daemons : Daemons :: default ( ) ,
395399 observe_cli : & observe_cli,
400+ skipper : skipper. clone ( ) ,
396401 } ;
397402
398403 let status = execute_pipeline ( config, & mut env, pipeline) . await ?;
@@ -418,6 +423,7 @@ pub async fn run(
418423/// Runs project as worker node (e.g., without project directory itself
419424/// and with given run folder path from controller's node).
420425#[ cfg( feature = "ssh-remotes" ) ]
426+ #[ allow( clippy:: too_many_arguments) ]
421427pub async fn run_as_worker (
422428 config : & mut DeployerProjectOptions ,
423429 run_dir : & Path ,
@@ -426,6 +432,7 @@ pub async fn run_as_worker(
426432 storage_dir : & Path ,
427433 remotes : & HashMap < ShortName , RemoteHost > ,
428434 args : & RunArgs ,
435+ skipper : Skipper ,
429436) -> anyhow:: Result < bool > {
430437 let artifacts_dir = prepare_artifacts_folder ( run_dir) ?;
431438
@@ -455,6 +462,7 @@ pub async fn run_as_worker(
455462 ansible_run : matches ! ( std:: env:: var( "DEPLOYER_ANSIBLE_RUN" ) , Ok ( val) if val. as_str( ) . eq( "1" ) ) ,
456463 daemons : Daemons :: default ( ) ,
457464 observe_cli : & None ,
465+ skipper : skipper. clone ( ) ,
458466 } ;
459467
460468 success &= execute_pipeline ( config, & mut env, pipeline) . await ?;
@@ -569,6 +577,7 @@ pub async fn execute_pipeline(
569577 let env = RunEnvironment {
570578 silent_build : false ,
571579 daemons : env. daemons . clone ( ) ,
580+ skipper : env. skipper . clone ( ) ,
572581 ..( * env)
573582 } ;
574583 return execute_pipeline_containered ( config, & env, pipeline) . await ;
@@ -637,17 +646,24 @@ pub async fn execute_pipeline(
637646 let mut cntr = 1usize ;
638647 let total = pipeline. actions . len ( ) ;
639648 for action in & pipeline. actions {
649+ if env. skipper . skip ( ) . await {
650+ cntr += 1 ;
651+ continue ;
652+ }
653+
640654 let mut env = if action. exec_in_project_dir . is_some_and ( |v| v)
641655 && let Some ( project_dir) = env. project_dir
642656 {
643657 RunEnvironment {
644658 run_dir : project_dir,
645659 daemons : env. daemons . clone ( ) ,
660+ skipper : env. skipper . clone ( ) ,
646661 ..( * env)
647662 }
648663 } else {
649664 RunEnvironment {
650665 daemons : env. daemons . clone ( ) ,
666+ skipper : env. skipper . clone ( ) ,
651667 ..( * env)
652668 }
653669 } ;
0 commit comments