let post_vcf     ~run_with     ~vcf     ~variant_caller_name     ~dataset_name     ?truth_vcf     ?normal_bam     ?tumor_bam     ?params     ?witness_output     url =   let open KEDSL in   let unik_script = sprintf "/tmp/upload_to_cycledash_%s" (Unique_id.create ()) in   let script_options =     let with_path opt s = opt, s#product#path in     List.filter_opt [       Some ("-V", vcf#product#path);       Some ("-v", variant_caller_name);       Some ("-P", dataset_name);       Option.map truth_vcf ~f:(with_path "-T");        Some ("-U", url);       Option.map tumor_bam ~f:(with_path "-t");       Option.map normal_bam ~f:(with_path "-n");       Option.map params ~f:(fun p -> "-N", p);       Some ("-w"Option.value witness_output ~default:"/tmp/www")     ]     |> List.concat_map ~f:(fun (x, y) -> [x; y]) in   let name =     sprintf "upload+cycledash: %s" (Filename.basename vcf#product#path) in   let make =     Machine.run_download_program run_with Program.(         shf "curl -f %s > %s"           (Filename.quote post_to_cycledash_script)           (Filename.quote unik_script)         &&          exec ("sh" :: unik_script :: script_options)       )   in   let edges =     let dep = Option.map ~f:depends_on in     [ dep (Some vcf);       dep truth_vcf;       dep normal_bam;       dep tumor_bam; ] |> List.filter_opt in   match witness_output with   | None ->     workflow_node nothing ~name ~make ~edges   | Some path ->     workflow_node ~name ~make ~edges       (single_file path ~host:Machine.(as_host run_with))     |> forget_product