Loading lcov.info +594 −580 Original line number Diff line number Diff line Loading @@ -130,14 +130,14 @@ DA:45,0 DA:51,0 DA:52,0 DA:53,0 DA:54,0 DA:55,0 DA:56,0 DA:57,0 DA:58,0 DA:59,0 DA:60,0 DA:61,0 DA:64,0 DA:65,0 DA:67,0 DA:69,0 DA:71,0 LF:27 LH:0 end_of_record Loading Loading @@ -263,83 +263,86 @@ SF:/root/dev/command/pipe-lib/src/lib.rs FN:484,Command::test FN:507,Config::get_environment_variables FN:519,Config::get_inputs FN:556,Config::prepare_modules FN:758,Config::read FN:782,Config::read_json FN:803,Config::read_yaml FN:823,Config::run_workflow FN:895,Config::set_environment_variables FN:911,Config::verify_requirements FN:929,Config::verify_resources FN:938,<impl PartialEq for Details>::eq FN:946,EnvironmentValue::from_value FN:954,EnvironmentValue::prepend_prefix FN:958,EnvironmentValue::trim_prefix FN:962,EnvironmentValue::get_from_serde FN:976,EnvironmentValue::get_all FN:986,EnvironmentValue::print_all FN:991,EnvironmentValue::set_variable FN:1001,EnvironmentValue::set_variables FN:1008,Extension::from_string FN:1017,Label::dry_run FN:1021,Label::invalid FN:1024,Label::fmt_invalid FN:1028,Label::fail FN:1031,Label::fmt_fail FN:1035,Label::found FN:1039,Label::not_found FN:1042,Label::fmt_not_found FN:1046,Label::output FN:1049,Label::fmt_output FN:1053,Label::pass FN:1057,Label::read FN:1061,Label::rejected FN:1065,Label::run FN:1069,Label::using FN:1075,ModuleUri<'_>::from FN:1085,ModuleUri<'_>::hash FN:1109,ModuleUri<'_>::get_whitelist FN:1112,ModuleUri<'_>::is_allowed FN:1115,ModuleUri<'_>::test FN:1116,ModuleUri<'_>::test::check FN:1133,ModuleUri<'_>::working_directory FN:1147,<impl Deref for PyProjectToml>::deref FN:1152,PyProjectToml::read FN:1168,PyProjectToml::get_module_name FN:1179,SemanticVersion::from_string FN:1188,Script::ensure_relative FN:1207,Script::expand_arguments FN:1242,Script::expand_arguments_from FN:1277,Script::from_module FN:1335,Script::from_path FN:1350,Script::from_template FN:1370,Script::get_command FN:1380,Script::get_arguments FN:1420,Script::maybe_create_virtual_environment FN:1461,Script::maybe_git_clone FN:1468,Script::python_default FN:1482,Script::run FN:1549,Script::with_container FN:1556,Script::with_current_dir FN:1561,Script::with_envs FN:1603,Script::with_virtual_environment FN:1609,ScriptTemplate::from_path FN:1621,ScriptTemplate::resolve_python_virtual_environment FN:1649,StringTemplate::new FN:1658,StringTemplate::expand FN:1665,StringTemplate::get_variable FN:1695,StringTemplate::is_handlebars FN:1730,StringTemplate::remove_spaces FN:1740,add_dot_slash FN:1748,add_forward_slash FN:1755,download_binary FN:1756,download_binary::download FNF:74 FN:549,Config::get_module_list FN:564,Config::prepare_modules FN:766,Config::read FN:790,Config::read_json FN:811,Config::read_yaml FN:831,Config::run_workflow FN:901,Config::set_environment_variables FN:919,Config::verify_requirements FN:937,Config::verify_resources FN:946,<impl PartialEq for Details>::eq FN:952,EnvironmentValue::formatted_prefix FN:957,EnvironmentValue::from_value FN:965,EnvironmentValue::prepend_prefix FN:969,EnvironmentValue::trim_prefix FN:973,EnvironmentValue::get_from_serde FN:987,EnvironmentValue::get_all FN:997,EnvironmentValue::print_all FN:1008,EnvironmentValue::set_variable FN:1018,EnvironmentValue::set_variables FN:1025,Extension::from_string FN:1034,Label::dry_run FN:1038,Label::invalid FN:1041,Label::fmt_invalid FN:1045,Label::fail FN:1048,Label::fmt_fail FN:1052,Label::found FN:1056,Label::not_found FN:1059,Label::fmt_not_found FN:1063,Label::output FN:1066,Label::fmt_output FN:1070,Label::pass FN:1074,Label::read FN:1078,Label::rejected FN:1082,Label::run FN:1086,Label::using FN:1092,ModuleUri<'_>::from FN:1102,ModuleUri<'_>::hash FN:1126,ModuleUri<'_>::get_whitelist FN:1129,ModuleUri<'_>::is_allowed FN:1132,ModuleUri<'_>::test FN:1133,ModuleUri<'_>::test::check FN:1150,ModuleUri<'_>::working_directory FN:1164,<impl Deref for PyProjectToml>::deref FN:1169,PyProjectToml::read FN:1185,PyProjectToml::get_module_name FN:1196,SemanticVersion::from_string FN:1205,Script::ensure_relative FN:1224,Script::expand_arguments FN:1259,Script::expand_arguments_from FN:1294,Script::from_module FN:1352,Script::from_path FN:1367,Script::from_template FN:1387,Script::get_command FN:1397,Script::get_arguments FN:1437,Script::maybe_create_virtual_environment FN:1478,Script::maybe_git_clone FN:1485,Script::python_default FN:1499,Script::run FN:1566,Script::with_container FN:1573,Script::with_current_dir FN:1578,Script::with_envs FN:1620,Script::with_virtual_environment FN:1626,ScriptTemplate::from_path FN:1638,ScriptTemplate::resolve_python_virtual_environment FN:1666,StringTemplate::new FN:1675,StringTemplate::expand FN:1682,StringTemplate::get_variable FN:1712,StringTemplate::is_handlebars FN:1747,StringTemplate::remove_spaces FN:1757,add_dot_slash FN:1765,add_forward_slash FN:1772,download_binary FN:1773,download_binary::download FNF:76 FNDA:1,Command::test FNDA:0,Config::get_environment_variables FNDA:0,Config::get_inputs FNDA:1,Config::get_module_list FNDA:0,Config::prepare_modules FNDA:1,Config::read FNDA:2,Config::read FNDA:1,Config::read_json FNDA:1,Config::read_yaml FNDA:0,Config::run_workflow Loading @@ -347,6 +350,7 @@ FNDA:0,Config::set_environment_variables FNDA:0,Config::verify_requirements FNDA:0,Config::verify_resources FNDA:1,<impl PartialEq for Details>::eq FNDA:1,EnvironmentValue::formatted_prefix FNDA:0,EnvironmentValue::from_value FNDA:0,EnvironmentValue::prepend_prefix FNDA:1,EnvironmentValue::trim_prefix Loading @@ -355,7 +359,7 @@ FNDA:1,EnvironmentValue::get_all FNDA:0,EnvironmentValue::print_all FNDA:0,EnvironmentValue::set_variable FNDA:0,EnvironmentValue::set_variables FNDA:1,Extension::from_string FNDA:2,Extension::from_string FNDA:0,Label::dry_run FNDA:0,Label::invalid FNDA:0,Label::fmt_invalid Loading @@ -365,7 +369,7 @@ FNDA:0,Label::found FNDA:0,Label::not_found FNDA:0,Label::fmt_not_found FNDA:1,Label::output FNDA:3,Label::fmt_output FNDA:4,Label::fmt_output FNDA:0,Label::pass FNDA:0,Label::read FNDA:0,Label::rejected Loading Loading @@ -400,10 +404,10 @@ FNDA:0,Script::with_envs FNDA:1,Script::with_virtual_environment FNDA:1,ScriptTemplate::from_path FNDA:0,ScriptTemplate::resolve_python_virtual_environment FNDA:2,StringTemplate::new FNDA:1,StringTemplate::new FNDA:1,StringTemplate::expand FNDA:1,StringTemplate::get_variable FNDA:2,StringTemplate::is_handlebars FNDA:1,StringTemplate::is_handlebars FNDA:1,StringTemplate::remove_spaces FNDA:1,add_dot_slash FNDA:1,add_forward_slash Loading @@ -412,10 +416,10 @@ FNDA:0,download_binary::download DA:484,1 DA:485,2 DA:486,1 DA:487,5 DA:488,4 DA:490,6 DA:491,2 DA:487,3 DA:488,2 DA:490,3 DA:491,1 DA:494,0 DA:495,0 DA:500,3 Loading Loading @@ -443,671 +447,681 @@ DA:536,0 DA:540,0 DA:541,0 DA:546,0 DA:556,0 DA:557,0 DA:558,0 DA:559,0 DA:561,0 DA:562,0 DA:563,0 DA:549,1 DA:550,2 DA:553,2 DA:555,2 DA:564,0 DA:565,0 DA:566,0 DA:567,0 DA:569,0 DA:570,0 DA:571,0 DA:572,0 DA:573,0 DA:574,0 DA:575,0 DA:577,0 DA:578,0 DA:579,0 DA:580,0 DA:581,0 DA:582,0 DA:584,0 DA:583,0 DA:585,0 DA:586,0 DA:587,0 DA:588,0 DA:589,0 DA:591,0 DA:596,0 DA:602,0 DA:590,0 DA:592,0 DA:597,0 DA:599,0 DA:604,0 DA:607,0 DA:610,0 DA:612,0 DA:614,0 DA:618,0 DA:621,0 DA:624,0 DA:615,0 DA:620,0 DA:622,0 DA:626,0 DA:628,0 DA:629,0 DA:630,0 DA:631,0 DA:633,0 DA:632,0 DA:634,0 DA:636,0 DA:637,0 DA:638,0 DA:639,0 DA:640,0 DA:643,0 DA:645,0 DA:641,0 DA:642,0 DA:646,0 DA:647,0 DA:649,0 DA:650,0 DA:648,0 DA:651,0 DA:652,0 DA:653,0 DA:654,0 DA:655,0 DA:657,0 DA:658,0 DA:659,0 DA:660,0 DA:662,0 DA:664,0 DA:666,0 DA:667,0 DA:671,0 DA:663,0 DA:668,0 DA:670,0 DA:672,0 DA:673,0 DA:676,0 DA:678,0 DA:674,0 DA:675,0 DA:679,0 DA:680,0 DA:681,0 DA:682,0 DA:683,0 DA:684,0 DA:686,0 DA:687,0 DA:689,0 DA:690,0 DA:691,0 DA:693,0 DA:692,0 DA:694,0 DA:696,0 DA:697,0 DA:695,0 DA:698,0 DA:699,0 DA:700,0 DA:701,0 DA:703,0 DA:713,0 DA:714,0 DA:715,0 DA:716,0 DA:718,0 DA:702,0 DA:704,0 DA:705,0 DA:706,0 DA:707,0 DA:708,0 DA:709,0 DA:711,0 DA:721,0 DA:722,0 DA:723,0 DA:724,0 DA:726,0 DA:727,0 DA:730,0 DA:732,0 DA:734,0 DA:735,0 DA:736,0 DA:737,0 DA:738,0 DA:740,0 DA:743,0 DA:744,0 DA:745,0 DA:746,0 DA:747,0 DA:750,0 DA:752,0 DA:748,0 DA:753,0 DA:754,0 DA:756,0 DA:758,1 DA:759,2 DA:760,2 DA:761,1 DA:755,0 DA:758,0 DA:760,0 DA:762,0 DA:764,2 DA:765,1 DA:766,0 DA:770,2 DA:771,1 DA:773,0 DA:764,0 DA:766,2 DA:767,4 DA:768,4 DA:769,2 DA:770,0 DA:772,2 DA:773,1 DA:774,0 DA:782,1 DA:783,2 DA:784,2 DA:786,0 DA:787,0 DA:790,3 DA:778,4 DA:779,2 DA:781,0 DA:782,0 DA:790,1 DA:791,2 DA:792,4 DA:793,0 DA:795,6 DA:796,2 DA:803,1 DA:804,2 DA:805,1 DA:807,0 DA:808,0 DA:811,2 DA:812,1 DA:813,2 DA:814,0 DA:816,3 DA:817,1 DA:823,0 DA:824,0 DA:826,0 DA:827,0 DA:828,0 DA:829,0 DA:830,0 DA:792,2 DA:794,0 DA:795,0 DA:798,4 DA:799,3 DA:800,6 DA:801,0 DA:803,9 DA:804,3 DA:811,1 DA:812,2 DA:813,1 DA:815,0 DA:816,0 DA:819,2 DA:820,1 DA:821,2 DA:822,0 DA:824,3 DA:825,1 DA:831,0 DA:832,0 DA:834,0 DA:833,0 DA:835,0 DA:836,0 DA:837,0 DA:838,0 DA:839,0 DA:840,0 DA:843,0 DA:842,0 DA:845,0 DA:846,0 DA:847,0 DA:848,0 DA:849,0 DA:850,0 DA:851,0 DA:853,0 DA:854,0 DA:855,0 DA:856,0 DA:859,0 DA:857,0 DA:858,0 DA:860,0 DA:863,0 DA:864,0 DA:865,0 DA:866,0 DA:867,0 DA:869,0 DA:870,0 DA:871,0 DA:872,0 DA:873,0 DA:874,0 DA:875,0 DA:876,0 DA:877,0 DA:878,0 DA:879,0 DA:880,0 DA:881,0 DA:882,0 DA:883,0 DA:884,0 DA:886,0 DA:889,0 DA:891,0 DA:892,0 DA:895,0 DA:896,0 DA:897,0 DA:898,0 DA:899,0 DA:900,0 DA:901,0 DA:902,0 DA:903,0 DA:904,0 DA:905,0 DA:906,0 DA:911,0 DA:912,0 DA:913,0 DA:914,0 DA:915,0 DA:916,0 DA:917,0 DA:919,0 DA:920,0 DA:921,0 DA:922,0 DA:923,0 DA:924,0 DA:925,0 DA:929,0 DA:930,0 DA:938,1 DA:939,1 DA:946,0 DA:947,0 DA:948,0 DA:949,0 DA:950,0 DA:951,0 DA:954,0 DA:955,0 DA:958,1 DA:959,1 DA:960,2 DA:931,0 DA:937,0 DA:938,0 DA:946,1 DA:947,1 DA:952,1 DA:953,1 DA:957,0 DA:958,0 DA:959,0 DA:960,0 DA:961,0 DA:962,0 DA:963,0 DA:964,0 DA:965,0 DA:966,0 DA:967,0 DA:968,0 DA:969,0 DA:970,0 DA:972,0 DA:969,1 DA:970,1 DA:971,2 DA:973,0 DA:974,0 DA:976,1 DA:977,1 DA:978,2 DA:979,2 DA:980,2 DA:981,2 DA:982,1 DA:986,0 DA:987,0 DA:988,0 DA:991,0 DA:992,0 DA:993,0 DA:994,0 DA:995,0 DA:996,0 DA:975,0 DA:976,0 DA:977,0 DA:978,0 DA:979,0 DA:980,0 DA:981,0 DA:983,0 DA:985,0 DA:987,1 DA:988,1 DA:989,2 DA:990,2 DA:991,2 DA:992,2 DA:993,1 DA:997,0 DA:998,0 DA:999,0 DA:1001,0 DA:1002,0 DA:1004,0 DA:1008,1 DA:1009,2 DA:1010,2 DA:1011,3 DA:1008,0 DA:1009,0 DA:1010,0 DA:1011,0 DA:1012,0 DA:1017,0 DA:1013,0 DA:1014,0 DA:1018,0 DA:1019,0 DA:1021,0 DA:1022,0 DA:1024,0 DA:1025,0 DA:1026,0 DA:1028,0 DA:1025,2 DA:1026,4 DA:1027,4 DA:1028,3 DA:1029,0 DA:1031,0 DA:1032,0 DA:1033,0 DA:1034,0 DA:1035,0 DA:1036,0 DA:1037,0 DA:1038,0 DA:1039,0 DA:1040,0 DA:1041,0 DA:1042,0 DA:1043,0 DA:1044,0 DA:1046,1 DA:1047,3 DA:1049,3 DA:1050,3 DA:1051,3 DA:1045,0 DA:1046,0 DA:1048,0 DA:1049,0 DA:1050,0 DA:1052,0 DA:1053,0 DA:1054,0 DA:1055,0 DA:1056,0 DA:1057,0 DA:1058,0 DA:1059,0 DA:1060,0 DA:1061,0 DA:1062,0 DA:1063,0 DA:1065,0 DA:1066,0 DA:1067,0 DA:1069,0 DA:1063,1 DA:1064,4 DA:1066,4 DA:1067,4 DA:1068,4 DA:1070,0 DA:1071,0 DA:1075,2 DA:1076,2 DA:1077,3 DA:1078,1 DA:1079,2 DA:1072,0 DA:1074,0 DA:1075,0 DA:1076,0 DA:1078,0 DA:1079,0 DA:1080,0 DA:1082,1 DA:1085,1 DA:1086,1 DA:1087,1 DA:1088,1 DA:1089,1 DA:1090,0 DA:1082,0 DA:1083,0 DA:1084,0 DA:1086,0 DA:1087,0 DA:1088,0 DA:1092,2 DA:1093,2 DA:1094,3 DA:1095,1 DA:1096,2 DA:1097,2 DA:1099,2 DA:1100,2 DA:1102,2 DA:1105,0 DA:1109,0 DA:1110,0 DA:1112,0 DA:1113,0 DA:1115,0 DA:1116,0 DA:1117,0 DA:1119,0 DA:1120,0 DA:1121,0 DA:1097,0 DA:1099,1 DA:1102,1 DA:1103,1 DA:1104,1 DA:1105,1 DA:1106,1 DA:1107,0 DA:1109,2 DA:1113,2 DA:1114,2 DA:1116,2 DA:1117,2 DA:1119,2 DA:1122,0 DA:1123,0 DA:1124,0 DA:1125,0 DA:1126,0 DA:1127,0 DA:1129,0 DA:1130,0 DA:1132,0 DA:1133,0 DA:1134,0 DA:1135,0 DA:1136,0 DA:1137,0 DA:1138,0 DA:1139,0 DA:1140,0 DA:1147,1 DA:1152,1 DA:1153,2 DA:1154,2 DA:1141,0 DA:1142,0 DA:1144,0 DA:1146,0 DA:1150,0 DA:1151,0 DA:1152,0 DA:1153,0 DA:1154,0 DA:1156,0 DA:1157,0 DA:1160,2 DA:1161,1 DA:1162,2 DA:1163,0 DA:1165,3 DA:1166,1 DA:1168,1 DA:1164,1 DA:1169,1 DA:1170,1 DA:1171,1 DA:1172,0 DA:1170,2 DA:1171,2 DA:1173,0 DA:1174,0 DA:1179,1 DA:1180,1 DA:1181,3 DA:1177,2 DA:1178,1 DA:1179,2 DA:1180,0 DA:1182,3 DA:1183,3 DA:1183,1 DA:1185,1 DA:1186,1 DA:1187,1 DA:1188,1 DA:1189,1 DA:1190,2 DA:1191,1 DA:1207,1 DA:1208,2 DA:1211,2 DA:1212,1 DA:1213,2 DA:1214,1 DA:1215,1 DA:1217,2 DA:1221,1 DA:1222,1 DA:1242,1 DA:1243,2 DA:1246,2 DA:1247,1 DA:1248,2 DA:1249,2 DA:1252,2 DA:1254,1 DA:1256,2 DA:1260,1 DA:1261,1 DA:1277,0 DA:1279,0 DA:1280,0 DA:1281,0 DA:1284,0 DA:1285,0 DA:1286,0 DA:1287,0 DA:1288,0 DA:1290,0 DA:1291,0 DA:1292,0 DA:1295,0 DA:1189,0 DA:1191,0 DA:1196,1 DA:1197,1 DA:1198,3 DA:1199,3 DA:1200,3 DA:1205,1 DA:1206,1 DA:1207,2 DA:1208,1 DA:1224,1 DA:1225,2 DA:1228,2 DA:1229,1 DA:1230,2 DA:1231,1 DA:1232,1 DA:1234,2 DA:1238,1 DA:1239,1 DA:1259,1 DA:1260,2 DA:1263,2 DA:1264,1 DA:1265,2 DA:1266,2 DA:1269,2 DA:1271,1 DA:1273,2 DA:1277,1 DA:1278,1 DA:1294,0 DA:1296,0 DA:1297,0 DA:1298,0 DA:1301,0 DA:1302,0 DA:1303,0 DA:1306,0 DA:1304,0 DA:1305,0 DA:1307,0 DA:1308,0 DA:1309,0 DA:1312,0 DA:1313,0 DA:1314,0 DA:1315,0 DA:1318,0 DA:1319,0 DA:1335,1 DA:1336,1 DA:1337,1 DA:1350,1 DA:1351,1 DA:1352,3 DA:1356,2 DA:1358,2 DA:1360,2 DA:1364,1 DA:1365,1 DA:1366,1 DA:1368,2 DA:1370,1 DA:1371,1 DA:1372,1 DA:1373,1 DA:1375,1 DA:1376,2 DA:1377,1 DA:1380,1 DA:1320,0 DA:1323,0 DA:1325,0 DA:1326,0 DA:1329,0 DA:1335,0 DA:1336,0 DA:1352,1 DA:1353,1 DA:1354,1 DA:1367,1 DA:1368,1 DA:1369,3 DA:1373,2 DA:1375,2 DA:1377,2 DA:1381,1 DA:1382,1 DA:1383,1 DA:1384,1 DA:1385,1 DA:1386,0 DA:1388,0 DA:1389,0 DA:1392,2 DA:1393,1 DA:1395,1 DA:1385,2 DA:1387,1 DA:1388,1 DA:1389,2 DA:1390,1 DA:1392,1 DA:1393,2 DA:1394,1 DA:1397,1 DA:1398,1 DA:1399,1 DA:1399,2 DA:1400,2 DA:1401,2 DA:1403,1 DA:1405,2 DA:1406,2 DA:1408,0 DA:1409,0 DA:1402,1 DA:1403,0 DA:1405,0 DA:1406,0 DA:1409,4 DA:1410,2 DA:1412,1 DA:1413,1 DA:1414,1 DA:1415,1 DA:1420,0 DA:1421,0 DA:1422,0 DA:1423,0 DA:1416,1 DA:1417,2 DA:1418,2 DA:1420,1 DA:1422,2 DA:1423,2 DA:1425,0 DA:1426,0 DA:1427,0 DA:1428,0 DA:1429,0 DA:1430,0 DA:1432,0 DA:1433,0 DA:1434,0 DA:1435,0 DA:1436,0 DA:1429,1 DA:1430,1 DA:1432,1 DA:1437,0 DA:1438,0 DA:1439,0 DA:1440,0 DA:1441,0 DA:1442,0 DA:1443,0 DA:1444,0 DA:1448,0 DA:1445,0 DA:1446,0 DA:1447,0 DA:1449,0 DA:1450,0 DA:1451,0 DA:1452,0 DA:1453,0 DA:1454,0 DA:1455,0 DA:1457,0 DA:1461,1 DA:1462,2 DA:1463,2 DA:1464,2 DA:1465,3 DA:1466,1 DA:1468,0 DA:1458,0 DA:1461,0 DA:1465,0 DA:1466,0 DA:1469,0 DA:1470,0 DA:1478,0 DA:1482,1 DA:1474,0 DA:1478,1 DA:1479,2 DA:1480,2 DA:1481,2 DA:1482,3 DA:1483,1 DA:1484,1 DA:1485,2 DA:1486,2 DA:1487,3 DA:1488,1 DA:1489,7 DA:1490,2 DA:1491,1 DA:1492,1 DA:1493,1 DA:1494,1 DA:1499,2 DA:1485,0 DA:1486,0 DA:1487,0 DA:1495,0 DA:1499,1 DA:1500,1 DA:1502,0 DA:1503,0 DA:1506,1 DA:1507,1 DA:1508,2 DA:1509,2 DA:1512,2 DA:1513,1 DA:1515,0 DA:1516,0 DA:1519,1 DA:1520,1 DA:1521,2 DA:1522,3 DA:1523,2 DA:1501,1 DA:1502,2 DA:1503,2 DA:1504,3 DA:1505,1 DA:1506,7 DA:1507,2 DA:1508,1 DA:1509,1 DA:1510,1 DA:1511,1 DA:1516,2 DA:1517,1 DA:1519,0 DA:1520,0 DA:1523,1 DA:1524,1 DA:1525,2 DA:1526,2 DA:1527,1 DA:1528,3 DA:1529,1 DA:1530,3 DA:1531,3 DA:1532,1 DA:1534,0 DA:1535,0 DA:1536,0 DA:1539,0 DA:1540,0 DA:1541,0 DA:1545,0 DA:1546,0 DA:1529,2 DA:1530,1 DA:1532,0 DA:1533,0 DA:1536,1 DA:1537,1 DA:1538,2 DA:1539,3 DA:1540,2 DA:1543,2 DA:1544,1 DA:1545,3 DA:1546,1 DA:1547,3 DA:1548,3 DA:1549,1 DA:1550,1 DA:1551,1 DA:1556,1 DA:1557,2 DA:1558,1 DA:1561,0 DA:1551,0 DA:1552,0 DA:1553,0 DA:1556,0 DA:1557,0 DA:1558,0 DA:1562,0 DA:1563,0 DA:1603,1 DA:1604,1 DA:1605,1 DA:1609,1 DA:1610,2 DA:1611,1 DA:1613,0 DA:1614,0 DA:1617,2 DA:1619,1 DA:1621,0 DA:1622,0 DA:1623,0 DA:1624,0 DA:1625,0 DA:1626,0 DA:1627,0 DA:1628,0 DA:1566,1 DA:1567,1 DA:1568,1 DA:1573,1 DA:1574,2 DA:1575,1 DA:1578,0 DA:1579,0 DA:1580,0 DA:1620,1 DA:1621,2 DA:1622,2 DA:1626,1 DA:1627,2 DA:1628,1 DA:1630,0 DA:1631,0 DA:1632,0 DA:1637,0 DA:1634,2 DA:1636,1 DA:1638,0 DA:1639,0 DA:1649,2 DA:1651,2 DA:1658,1 DA:1659,7 DA:1660,5 DA:1665,1 DA:1666,2 DA:1667,2 DA:1640,0 DA:1641,0 DA:1642,0 DA:1643,0 DA:1644,0 DA:1645,0 DA:1647,0 DA:1648,0 DA:1649,0 DA:1654,0 DA:1655,0 DA:1656,0 DA:1666,1 DA:1668,1 DA:1669,2 DA:1671,0 DA:1695,2 DA:1696,4 DA:1697,4 DA:1698,2 DA:1699,0 DA:1701,0 DA:1730,1 DA:1731,4 DA:1732,2 DA:1733,0 DA:1735,6 DA:1736,2 DA:1740,1 DA:1741,2 DA:1742,2 DA:1744,4 DA:1748,1 DA:1749,2 DA:1675,1 DA:1676,4 DA:1677,3 DA:1682,1 DA:1683,2 DA:1684,2 DA:1685,1 DA:1686,2 DA:1688,0 DA:1712,1 DA:1713,2 DA:1714,2 DA:1715,1 DA:1716,0 DA:1718,0 DA:1747,1 DA:1748,2 DA:1749,1 DA:1750,0 DA:1752,2 DA:1755,0 DA:1756,0 DA:1757,0 DA:1758,0 DA:1759,0 DA:1760,0 DA:1761,0 DA:1762,0 DA:1763,0 DA:1764,0 DA:1765,0 DA:1766,0 DA:1768,0 DA:1770,0 DA:1752,3 DA:1753,1 DA:1757,1 DA:1758,2 DA:1759,2 DA:1761,4 DA:1765,1 DA:1766,2 DA:1767,0 DA:1769,2 DA:1772,0 DA:1773,0 DA:1774,0 DA:1775,0 DA:1776,0 DA:1791,1 DA:1792,1 DA:1793,4 DA:1794,2 DA:1798,1 DA:1799,2 DA:1800,2 DA:1801,2 DA:1802,2 DA:1803,5 DA:1806,1 DA:1808,2 DA:1777,0 DA:1778,0 DA:1779,0 DA:1780,0 DA:1781,0 DA:1782,0 DA:1783,0 DA:1785,0 DA:1787,0 DA:1790,0 DA:1791,0 DA:1792,0 DA:1793,0 DA:1808,1 DA:1809,1 DA:1810,4 DA:1813,0 DA:1840,1 DA:1841,2 DA:1842,2 DA:1843,1 DA:1844,6 DA:1856,1 DA:1858,0 DA:1811,2 DA:1815,1 DA:1816,2 DA:1817,2 DA:1818,2 DA:1819,2 DA:1820,5 DA:1823,1 DA:1825,2 DA:1827,4 DA:1830,0 DA:1857,1 DA:1858,2 DA:1859,2 DA:1860,1 DA:1875,1 DA:1876,1 DA:1879,1 DA:1880,3 DA:1892,1 DA:1893,1 DA:1896,0 DA:1897,0 DA:1898,0 DA:1900,0 DA:1904,0 DA:1905,0 DA:1906,0 DA:1908,0 DA:1912,0 DA:1861,6 DA:1873,1 DA:1875,0 DA:1877,1 DA:1892,2 DA:1893,2 DA:1896,1 DA:1897,3 DA:1909,1 DA:1910,1 DA:1913,0 DA:1914,0 DA:1915,0 DA:1922,1 DA:1924,2 DA:1925,1 DA:1926,1 DA:1928,3 DA:1917,0 DA:1921,0 DA:1922,0 DA:1923,0 DA:1925,0 DA:1929,0 DA:1931,0 DA:1932,0 DA:1939,1 DA:1941,2 DA:1942,2 DA:1943,4 DA:1944,4 DA:1945,12 DA:1946,8 DA:1948,1 DA:1949,3 DA:1950,1 DA:1953,1 DA:1955,1 DA:1956,8 LF:699 LH:276 DA:1942,1 DA:1943,1 DA:1945,3 DA:1958,2 DA:1959,2 DA:1960,4 DA:1961,3 DA:1962,9 DA:1963,6 DA:1965,1 DA:1966,3 DA:1967,1 DA:1970,1 DA:1972,1 DA:1973,8 DA:1975,1 DA:1976,3 LF:709 LH:284 end_of_record pipe-cli/src/commands/run/mod.rs +5 −1 Original line number Diff line number Diff line Loading @@ -50,7 +50,11 @@ pub fn run( .build(); match Config::read(config_path) { | Some(cfg) => { let config = cfg.verify_requirements(&options).verify_resources(&options).prepare_modules(&options); let config = cfg .verify_requirements(&options) .verify_resources(&options) .prepare_modules(&options) .set_environment_variables(); match config.clone().get_inputs() { | Some(values) if !values.is_empty() => values.par_iter().for_each(|value| { info!(value, "=> {} Configuration with input", Label::using()); Loading pipe-lib/src/lib.rs +29 −9 Original line number Diff line number Diff line Loading @@ -546,6 +546,14 @@ impl Config { | None => None, } } fn get_module_list(self) -> String { let names = self .modules .iter() .map(|module| to_snake_case(module.name.clone())) .collect::<Vec<String>>(); names.join(",").to_string() } /// Prepare workflow modules for execution /// /// Module preparation is done in parallel and includes the following steps: Loading Loading @@ -821,6 +829,7 @@ impl Config { /// Modules are run in the order they are defined in the configuration /// pub fn run_workflow(self, input: Option<String>, options: &ConfigOptions) { EnvironmentValue::print_all(); self.modules.iter().for_each(|module| match &module.module_type { | ModuleType::Binary { .. } => { let envs = self.clone().get_environment_variables(Some(module.clone()), input.clone()); Loading @@ -828,7 +837,6 @@ impl Config { let loaded = Script::from_module(module.clone(), Some(PathBuf::from(working_dir.clone()))); let script = loaded.ensure_relative().expand_arguments_from(envs).with_current_dir(working_dir); if options.dry_run { EnvironmentValue::print_all(); info!( module = module.name, script = script.to_string(), Loading @@ -847,7 +855,6 @@ impl Config { let loaded = Script::from_module(module.clone(), Some(options.root.clone())); let script = loaded.expand_arguments_from(envs).with_current_dir(working_dir); if options.dry_run { EnvironmentValue::print_all(); info!( module = module.name, script = script.to_string(), Loading @@ -874,7 +881,6 @@ impl Config { .with_current_dir(working_dir) .with_virtual_environment(virtual_environment); if options.dry_run { EnvironmentValue::print_all(); info!( module = module.name, script = script.to_string(), Loading @@ -892,7 +898,7 @@ impl Config { }); } /// Set environment variables from PIPE configuration "variables" attribute pub fn set_environment_variables(&self) -> Void { pub fn set_environment_variables(self) -> Config { match &self.variables { | Some(variables) => { for (k, v) in variables { Loading @@ -902,7 +908,9 @@ impl Config { } | None => (), } Ok(()) let module_list = EnvironmentValue::String(self.clone().get_module_list()); module_list.set_variable("MODULE_LIST".to_string()); self } /// Verify software requirements are met on host system (ex. Python, conda, etc...) /// Loading Loading @@ -941,6 +949,9 @@ impl PartialEq for Details { } impl EnvironmentValue { pub const PREFIX: &'static str = "pipe"; fn formatted_prefix() -> String { format!("_{}_", EnvironmentValue::PREFIX.to_uppercase()) } /// Convert serde Value to EnvironmentValue /// fn from_value(value: Value) -> EnvironmentValue { Loading @@ -952,11 +963,11 @@ impl EnvironmentValue { } } fn prepend_prefix(value: String) -> String { let prefixed = format!("_{}_{}", EnvironmentValue::PREFIX.to_uppercase(), value); let prefixed = format!("{}{}", EnvironmentValue::formatted_prefix(), value); prefixed } fn trim_prefix(key: String) -> String { let pre = format!("_{}_", EnvironmentValue::PREFIX.to_uppercase()); let pre = EnvironmentValue::formatted_prefix(); key.trim_start_matches(&pre).to_string() } pub fn get_from_serde(values: &Map<String, Value>) -> HashMap<String, String> { Loading @@ -974,7 +985,7 @@ impl EnvironmentValue { lookup } pub fn get_all() -> Vec<(String, String)> { let pre = format!("_{}_", EnvironmentValue::PREFIX.to_uppercase()); let pre = EnvironmentValue::formatted_prefix(); vars() .filter(|(key, _)| key.starts_with(&pre)) .map(|(key, value)| { Loading @@ -985,7 +996,13 @@ impl EnvironmentValue { } pub fn print_all() { EnvironmentValue::get_all().into_iter().for_each(|(key, value)| { debug!(key, value, "=> [{}]", "ENV".dimmed()); trace!( "=> {} {}{} = {}", Label::using(), EnvironmentValue::formatted_prefix().dimmed(), key, value ); }); } pub fn set_variable(self, key: String) { Loading Loading @@ -1955,6 +1972,9 @@ pub fn read_file(path: PathBuf) -> Result<String, Box<dyn Error>> { pub fn to_string(values: Vec<&str>) -> Vec<String> { values.iter().map(|s| s.to_string()).collect() } pub fn to_snake_case(value: String) -> String { value.replace(" ", "_").to_lowercase() } #[cfg(test)] mod tests; pipe-lib/src/tests.rs +18 −0 Original line number Diff line number Diff line Loading @@ -49,6 +49,18 @@ fn test_command() { } } #[test] fn test_config_get_module_list() { let path = format!("{}/config.json", FIXTURES); match Config::read(PathBuf::from(path)) { | Some(config) => { let expected = "local_binary_module,local_python_script_module,remote_python_script_module"; assert_eq!(config.get_module_list(), expected); } | None => panic!("Cannot read config in tests"), } } #[test] fn test_config_read() { let path = format!("{}/config.json", FIXTURES); Loading Loading @@ -573,6 +585,12 @@ fn test_string_template_handlebars() { ); } #[test] fn test_to_snake_case() { let expected = "some_module_name"; assert_eq!(to_snake_case("Some Module Name".to_string()), expected); } #[test] fn test_to_string() { let input = vec!["a", "b", "c"]; Loading tests/fixtures/config.json +0 −1 Original line number Diff line number Diff line Loading @@ -15,7 +15,6 @@ ] }, "variables": { "INPUT_DIRECTORY": "/path/to/input", "OUTPUT_DIRECTORY": "/path/to/output", "ANSWER": 42, "BOOLEAN": true, Loading Loading
lcov.info +594 −580 Original line number Diff line number Diff line Loading @@ -130,14 +130,14 @@ DA:45,0 DA:51,0 DA:52,0 DA:53,0 DA:54,0 DA:55,0 DA:56,0 DA:57,0 DA:58,0 DA:59,0 DA:60,0 DA:61,0 DA:64,0 DA:65,0 DA:67,0 DA:69,0 DA:71,0 LF:27 LH:0 end_of_record Loading Loading @@ -263,83 +263,86 @@ SF:/root/dev/command/pipe-lib/src/lib.rs FN:484,Command::test FN:507,Config::get_environment_variables FN:519,Config::get_inputs FN:556,Config::prepare_modules FN:758,Config::read FN:782,Config::read_json FN:803,Config::read_yaml FN:823,Config::run_workflow FN:895,Config::set_environment_variables FN:911,Config::verify_requirements FN:929,Config::verify_resources FN:938,<impl PartialEq for Details>::eq FN:946,EnvironmentValue::from_value FN:954,EnvironmentValue::prepend_prefix FN:958,EnvironmentValue::trim_prefix FN:962,EnvironmentValue::get_from_serde FN:976,EnvironmentValue::get_all FN:986,EnvironmentValue::print_all FN:991,EnvironmentValue::set_variable FN:1001,EnvironmentValue::set_variables FN:1008,Extension::from_string FN:1017,Label::dry_run FN:1021,Label::invalid FN:1024,Label::fmt_invalid FN:1028,Label::fail FN:1031,Label::fmt_fail FN:1035,Label::found FN:1039,Label::not_found FN:1042,Label::fmt_not_found FN:1046,Label::output FN:1049,Label::fmt_output FN:1053,Label::pass FN:1057,Label::read FN:1061,Label::rejected FN:1065,Label::run FN:1069,Label::using FN:1075,ModuleUri<'_>::from FN:1085,ModuleUri<'_>::hash FN:1109,ModuleUri<'_>::get_whitelist FN:1112,ModuleUri<'_>::is_allowed FN:1115,ModuleUri<'_>::test FN:1116,ModuleUri<'_>::test::check FN:1133,ModuleUri<'_>::working_directory FN:1147,<impl Deref for PyProjectToml>::deref FN:1152,PyProjectToml::read FN:1168,PyProjectToml::get_module_name FN:1179,SemanticVersion::from_string FN:1188,Script::ensure_relative FN:1207,Script::expand_arguments FN:1242,Script::expand_arguments_from FN:1277,Script::from_module FN:1335,Script::from_path FN:1350,Script::from_template FN:1370,Script::get_command FN:1380,Script::get_arguments FN:1420,Script::maybe_create_virtual_environment FN:1461,Script::maybe_git_clone FN:1468,Script::python_default FN:1482,Script::run FN:1549,Script::with_container FN:1556,Script::with_current_dir FN:1561,Script::with_envs FN:1603,Script::with_virtual_environment FN:1609,ScriptTemplate::from_path FN:1621,ScriptTemplate::resolve_python_virtual_environment FN:1649,StringTemplate::new FN:1658,StringTemplate::expand FN:1665,StringTemplate::get_variable FN:1695,StringTemplate::is_handlebars FN:1730,StringTemplate::remove_spaces FN:1740,add_dot_slash FN:1748,add_forward_slash FN:1755,download_binary FN:1756,download_binary::download FNF:74 FN:549,Config::get_module_list FN:564,Config::prepare_modules FN:766,Config::read FN:790,Config::read_json FN:811,Config::read_yaml FN:831,Config::run_workflow FN:901,Config::set_environment_variables FN:919,Config::verify_requirements FN:937,Config::verify_resources FN:946,<impl PartialEq for Details>::eq FN:952,EnvironmentValue::formatted_prefix FN:957,EnvironmentValue::from_value FN:965,EnvironmentValue::prepend_prefix FN:969,EnvironmentValue::trim_prefix FN:973,EnvironmentValue::get_from_serde FN:987,EnvironmentValue::get_all FN:997,EnvironmentValue::print_all FN:1008,EnvironmentValue::set_variable FN:1018,EnvironmentValue::set_variables FN:1025,Extension::from_string FN:1034,Label::dry_run FN:1038,Label::invalid FN:1041,Label::fmt_invalid FN:1045,Label::fail FN:1048,Label::fmt_fail FN:1052,Label::found FN:1056,Label::not_found FN:1059,Label::fmt_not_found FN:1063,Label::output FN:1066,Label::fmt_output FN:1070,Label::pass FN:1074,Label::read FN:1078,Label::rejected FN:1082,Label::run FN:1086,Label::using FN:1092,ModuleUri<'_>::from FN:1102,ModuleUri<'_>::hash FN:1126,ModuleUri<'_>::get_whitelist FN:1129,ModuleUri<'_>::is_allowed FN:1132,ModuleUri<'_>::test FN:1133,ModuleUri<'_>::test::check FN:1150,ModuleUri<'_>::working_directory FN:1164,<impl Deref for PyProjectToml>::deref FN:1169,PyProjectToml::read FN:1185,PyProjectToml::get_module_name FN:1196,SemanticVersion::from_string FN:1205,Script::ensure_relative FN:1224,Script::expand_arguments FN:1259,Script::expand_arguments_from FN:1294,Script::from_module FN:1352,Script::from_path FN:1367,Script::from_template FN:1387,Script::get_command FN:1397,Script::get_arguments FN:1437,Script::maybe_create_virtual_environment FN:1478,Script::maybe_git_clone FN:1485,Script::python_default FN:1499,Script::run FN:1566,Script::with_container FN:1573,Script::with_current_dir FN:1578,Script::with_envs FN:1620,Script::with_virtual_environment FN:1626,ScriptTemplate::from_path FN:1638,ScriptTemplate::resolve_python_virtual_environment FN:1666,StringTemplate::new FN:1675,StringTemplate::expand FN:1682,StringTemplate::get_variable FN:1712,StringTemplate::is_handlebars FN:1747,StringTemplate::remove_spaces FN:1757,add_dot_slash FN:1765,add_forward_slash FN:1772,download_binary FN:1773,download_binary::download FNF:76 FNDA:1,Command::test FNDA:0,Config::get_environment_variables FNDA:0,Config::get_inputs FNDA:1,Config::get_module_list FNDA:0,Config::prepare_modules FNDA:1,Config::read FNDA:2,Config::read FNDA:1,Config::read_json FNDA:1,Config::read_yaml FNDA:0,Config::run_workflow Loading @@ -347,6 +350,7 @@ FNDA:0,Config::set_environment_variables FNDA:0,Config::verify_requirements FNDA:0,Config::verify_resources FNDA:1,<impl PartialEq for Details>::eq FNDA:1,EnvironmentValue::formatted_prefix FNDA:0,EnvironmentValue::from_value FNDA:0,EnvironmentValue::prepend_prefix FNDA:1,EnvironmentValue::trim_prefix Loading @@ -355,7 +359,7 @@ FNDA:1,EnvironmentValue::get_all FNDA:0,EnvironmentValue::print_all FNDA:0,EnvironmentValue::set_variable FNDA:0,EnvironmentValue::set_variables FNDA:1,Extension::from_string FNDA:2,Extension::from_string FNDA:0,Label::dry_run FNDA:0,Label::invalid FNDA:0,Label::fmt_invalid Loading @@ -365,7 +369,7 @@ FNDA:0,Label::found FNDA:0,Label::not_found FNDA:0,Label::fmt_not_found FNDA:1,Label::output FNDA:3,Label::fmt_output FNDA:4,Label::fmt_output FNDA:0,Label::pass FNDA:0,Label::read FNDA:0,Label::rejected Loading Loading @@ -400,10 +404,10 @@ FNDA:0,Script::with_envs FNDA:1,Script::with_virtual_environment FNDA:1,ScriptTemplate::from_path FNDA:0,ScriptTemplate::resolve_python_virtual_environment FNDA:2,StringTemplate::new FNDA:1,StringTemplate::new FNDA:1,StringTemplate::expand FNDA:1,StringTemplate::get_variable FNDA:2,StringTemplate::is_handlebars FNDA:1,StringTemplate::is_handlebars FNDA:1,StringTemplate::remove_spaces FNDA:1,add_dot_slash FNDA:1,add_forward_slash Loading @@ -412,10 +416,10 @@ FNDA:0,download_binary::download DA:484,1 DA:485,2 DA:486,1 DA:487,5 DA:488,4 DA:490,6 DA:491,2 DA:487,3 DA:488,2 DA:490,3 DA:491,1 DA:494,0 DA:495,0 DA:500,3 Loading Loading @@ -443,671 +447,681 @@ DA:536,0 DA:540,0 DA:541,0 DA:546,0 DA:556,0 DA:557,0 DA:558,0 DA:559,0 DA:561,0 DA:562,0 DA:563,0 DA:549,1 DA:550,2 DA:553,2 DA:555,2 DA:564,0 DA:565,0 DA:566,0 DA:567,0 DA:569,0 DA:570,0 DA:571,0 DA:572,0 DA:573,0 DA:574,0 DA:575,0 DA:577,0 DA:578,0 DA:579,0 DA:580,0 DA:581,0 DA:582,0 DA:584,0 DA:583,0 DA:585,0 DA:586,0 DA:587,0 DA:588,0 DA:589,0 DA:591,0 DA:596,0 DA:602,0 DA:590,0 DA:592,0 DA:597,0 DA:599,0 DA:604,0 DA:607,0 DA:610,0 DA:612,0 DA:614,0 DA:618,0 DA:621,0 DA:624,0 DA:615,0 DA:620,0 DA:622,0 DA:626,0 DA:628,0 DA:629,0 DA:630,0 DA:631,0 DA:633,0 DA:632,0 DA:634,0 DA:636,0 DA:637,0 DA:638,0 DA:639,0 DA:640,0 DA:643,0 DA:645,0 DA:641,0 DA:642,0 DA:646,0 DA:647,0 DA:649,0 DA:650,0 DA:648,0 DA:651,0 DA:652,0 DA:653,0 DA:654,0 DA:655,0 DA:657,0 DA:658,0 DA:659,0 DA:660,0 DA:662,0 DA:664,0 DA:666,0 DA:667,0 DA:671,0 DA:663,0 DA:668,0 DA:670,0 DA:672,0 DA:673,0 DA:676,0 DA:678,0 DA:674,0 DA:675,0 DA:679,0 DA:680,0 DA:681,0 DA:682,0 DA:683,0 DA:684,0 DA:686,0 DA:687,0 DA:689,0 DA:690,0 DA:691,0 DA:693,0 DA:692,0 DA:694,0 DA:696,0 DA:697,0 DA:695,0 DA:698,0 DA:699,0 DA:700,0 DA:701,0 DA:703,0 DA:713,0 DA:714,0 DA:715,0 DA:716,0 DA:718,0 DA:702,0 DA:704,0 DA:705,0 DA:706,0 DA:707,0 DA:708,0 DA:709,0 DA:711,0 DA:721,0 DA:722,0 DA:723,0 DA:724,0 DA:726,0 DA:727,0 DA:730,0 DA:732,0 DA:734,0 DA:735,0 DA:736,0 DA:737,0 DA:738,0 DA:740,0 DA:743,0 DA:744,0 DA:745,0 DA:746,0 DA:747,0 DA:750,0 DA:752,0 DA:748,0 DA:753,0 DA:754,0 DA:756,0 DA:758,1 DA:759,2 DA:760,2 DA:761,1 DA:755,0 DA:758,0 DA:760,0 DA:762,0 DA:764,2 DA:765,1 DA:766,0 DA:770,2 DA:771,1 DA:773,0 DA:764,0 DA:766,2 DA:767,4 DA:768,4 DA:769,2 DA:770,0 DA:772,2 DA:773,1 DA:774,0 DA:782,1 DA:783,2 DA:784,2 DA:786,0 DA:787,0 DA:790,3 DA:778,4 DA:779,2 DA:781,0 DA:782,0 DA:790,1 DA:791,2 DA:792,4 DA:793,0 DA:795,6 DA:796,2 DA:803,1 DA:804,2 DA:805,1 DA:807,0 DA:808,0 DA:811,2 DA:812,1 DA:813,2 DA:814,0 DA:816,3 DA:817,1 DA:823,0 DA:824,0 DA:826,0 DA:827,0 DA:828,0 DA:829,0 DA:830,0 DA:792,2 DA:794,0 DA:795,0 DA:798,4 DA:799,3 DA:800,6 DA:801,0 DA:803,9 DA:804,3 DA:811,1 DA:812,2 DA:813,1 DA:815,0 DA:816,0 DA:819,2 DA:820,1 DA:821,2 DA:822,0 DA:824,3 DA:825,1 DA:831,0 DA:832,0 DA:834,0 DA:833,0 DA:835,0 DA:836,0 DA:837,0 DA:838,0 DA:839,0 DA:840,0 DA:843,0 DA:842,0 DA:845,0 DA:846,0 DA:847,0 DA:848,0 DA:849,0 DA:850,0 DA:851,0 DA:853,0 DA:854,0 DA:855,0 DA:856,0 DA:859,0 DA:857,0 DA:858,0 DA:860,0 DA:863,0 DA:864,0 DA:865,0 DA:866,0 DA:867,0 DA:869,0 DA:870,0 DA:871,0 DA:872,0 DA:873,0 DA:874,0 DA:875,0 DA:876,0 DA:877,0 DA:878,0 DA:879,0 DA:880,0 DA:881,0 DA:882,0 DA:883,0 DA:884,0 DA:886,0 DA:889,0 DA:891,0 DA:892,0 DA:895,0 DA:896,0 DA:897,0 DA:898,0 DA:899,0 DA:900,0 DA:901,0 DA:902,0 DA:903,0 DA:904,0 DA:905,0 DA:906,0 DA:911,0 DA:912,0 DA:913,0 DA:914,0 DA:915,0 DA:916,0 DA:917,0 DA:919,0 DA:920,0 DA:921,0 DA:922,0 DA:923,0 DA:924,0 DA:925,0 DA:929,0 DA:930,0 DA:938,1 DA:939,1 DA:946,0 DA:947,0 DA:948,0 DA:949,0 DA:950,0 DA:951,0 DA:954,0 DA:955,0 DA:958,1 DA:959,1 DA:960,2 DA:931,0 DA:937,0 DA:938,0 DA:946,1 DA:947,1 DA:952,1 DA:953,1 DA:957,0 DA:958,0 DA:959,0 DA:960,0 DA:961,0 DA:962,0 DA:963,0 DA:964,0 DA:965,0 DA:966,0 DA:967,0 DA:968,0 DA:969,0 DA:970,0 DA:972,0 DA:969,1 DA:970,1 DA:971,2 DA:973,0 DA:974,0 DA:976,1 DA:977,1 DA:978,2 DA:979,2 DA:980,2 DA:981,2 DA:982,1 DA:986,0 DA:987,0 DA:988,0 DA:991,0 DA:992,0 DA:993,0 DA:994,0 DA:995,0 DA:996,0 DA:975,0 DA:976,0 DA:977,0 DA:978,0 DA:979,0 DA:980,0 DA:981,0 DA:983,0 DA:985,0 DA:987,1 DA:988,1 DA:989,2 DA:990,2 DA:991,2 DA:992,2 DA:993,1 DA:997,0 DA:998,0 DA:999,0 DA:1001,0 DA:1002,0 DA:1004,0 DA:1008,1 DA:1009,2 DA:1010,2 DA:1011,3 DA:1008,0 DA:1009,0 DA:1010,0 DA:1011,0 DA:1012,0 DA:1017,0 DA:1013,0 DA:1014,0 DA:1018,0 DA:1019,0 DA:1021,0 DA:1022,0 DA:1024,0 DA:1025,0 DA:1026,0 DA:1028,0 DA:1025,2 DA:1026,4 DA:1027,4 DA:1028,3 DA:1029,0 DA:1031,0 DA:1032,0 DA:1033,0 DA:1034,0 DA:1035,0 DA:1036,0 DA:1037,0 DA:1038,0 DA:1039,0 DA:1040,0 DA:1041,0 DA:1042,0 DA:1043,0 DA:1044,0 DA:1046,1 DA:1047,3 DA:1049,3 DA:1050,3 DA:1051,3 DA:1045,0 DA:1046,0 DA:1048,0 DA:1049,0 DA:1050,0 DA:1052,0 DA:1053,0 DA:1054,0 DA:1055,0 DA:1056,0 DA:1057,0 DA:1058,0 DA:1059,0 DA:1060,0 DA:1061,0 DA:1062,0 DA:1063,0 DA:1065,0 DA:1066,0 DA:1067,0 DA:1069,0 DA:1063,1 DA:1064,4 DA:1066,4 DA:1067,4 DA:1068,4 DA:1070,0 DA:1071,0 DA:1075,2 DA:1076,2 DA:1077,3 DA:1078,1 DA:1079,2 DA:1072,0 DA:1074,0 DA:1075,0 DA:1076,0 DA:1078,0 DA:1079,0 DA:1080,0 DA:1082,1 DA:1085,1 DA:1086,1 DA:1087,1 DA:1088,1 DA:1089,1 DA:1090,0 DA:1082,0 DA:1083,0 DA:1084,0 DA:1086,0 DA:1087,0 DA:1088,0 DA:1092,2 DA:1093,2 DA:1094,3 DA:1095,1 DA:1096,2 DA:1097,2 DA:1099,2 DA:1100,2 DA:1102,2 DA:1105,0 DA:1109,0 DA:1110,0 DA:1112,0 DA:1113,0 DA:1115,0 DA:1116,0 DA:1117,0 DA:1119,0 DA:1120,0 DA:1121,0 DA:1097,0 DA:1099,1 DA:1102,1 DA:1103,1 DA:1104,1 DA:1105,1 DA:1106,1 DA:1107,0 DA:1109,2 DA:1113,2 DA:1114,2 DA:1116,2 DA:1117,2 DA:1119,2 DA:1122,0 DA:1123,0 DA:1124,0 DA:1125,0 DA:1126,0 DA:1127,0 DA:1129,0 DA:1130,0 DA:1132,0 DA:1133,0 DA:1134,0 DA:1135,0 DA:1136,0 DA:1137,0 DA:1138,0 DA:1139,0 DA:1140,0 DA:1147,1 DA:1152,1 DA:1153,2 DA:1154,2 DA:1141,0 DA:1142,0 DA:1144,0 DA:1146,0 DA:1150,0 DA:1151,0 DA:1152,0 DA:1153,0 DA:1154,0 DA:1156,0 DA:1157,0 DA:1160,2 DA:1161,1 DA:1162,2 DA:1163,0 DA:1165,3 DA:1166,1 DA:1168,1 DA:1164,1 DA:1169,1 DA:1170,1 DA:1171,1 DA:1172,0 DA:1170,2 DA:1171,2 DA:1173,0 DA:1174,0 DA:1179,1 DA:1180,1 DA:1181,3 DA:1177,2 DA:1178,1 DA:1179,2 DA:1180,0 DA:1182,3 DA:1183,3 DA:1183,1 DA:1185,1 DA:1186,1 DA:1187,1 DA:1188,1 DA:1189,1 DA:1190,2 DA:1191,1 DA:1207,1 DA:1208,2 DA:1211,2 DA:1212,1 DA:1213,2 DA:1214,1 DA:1215,1 DA:1217,2 DA:1221,1 DA:1222,1 DA:1242,1 DA:1243,2 DA:1246,2 DA:1247,1 DA:1248,2 DA:1249,2 DA:1252,2 DA:1254,1 DA:1256,2 DA:1260,1 DA:1261,1 DA:1277,0 DA:1279,0 DA:1280,0 DA:1281,0 DA:1284,0 DA:1285,0 DA:1286,0 DA:1287,0 DA:1288,0 DA:1290,0 DA:1291,0 DA:1292,0 DA:1295,0 DA:1189,0 DA:1191,0 DA:1196,1 DA:1197,1 DA:1198,3 DA:1199,3 DA:1200,3 DA:1205,1 DA:1206,1 DA:1207,2 DA:1208,1 DA:1224,1 DA:1225,2 DA:1228,2 DA:1229,1 DA:1230,2 DA:1231,1 DA:1232,1 DA:1234,2 DA:1238,1 DA:1239,1 DA:1259,1 DA:1260,2 DA:1263,2 DA:1264,1 DA:1265,2 DA:1266,2 DA:1269,2 DA:1271,1 DA:1273,2 DA:1277,1 DA:1278,1 DA:1294,0 DA:1296,0 DA:1297,0 DA:1298,0 DA:1301,0 DA:1302,0 DA:1303,0 DA:1306,0 DA:1304,0 DA:1305,0 DA:1307,0 DA:1308,0 DA:1309,0 DA:1312,0 DA:1313,0 DA:1314,0 DA:1315,0 DA:1318,0 DA:1319,0 DA:1335,1 DA:1336,1 DA:1337,1 DA:1350,1 DA:1351,1 DA:1352,3 DA:1356,2 DA:1358,2 DA:1360,2 DA:1364,1 DA:1365,1 DA:1366,1 DA:1368,2 DA:1370,1 DA:1371,1 DA:1372,1 DA:1373,1 DA:1375,1 DA:1376,2 DA:1377,1 DA:1380,1 DA:1320,0 DA:1323,0 DA:1325,0 DA:1326,0 DA:1329,0 DA:1335,0 DA:1336,0 DA:1352,1 DA:1353,1 DA:1354,1 DA:1367,1 DA:1368,1 DA:1369,3 DA:1373,2 DA:1375,2 DA:1377,2 DA:1381,1 DA:1382,1 DA:1383,1 DA:1384,1 DA:1385,1 DA:1386,0 DA:1388,0 DA:1389,0 DA:1392,2 DA:1393,1 DA:1395,1 DA:1385,2 DA:1387,1 DA:1388,1 DA:1389,2 DA:1390,1 DA:1392,1 DA:1393,2 DA:1394,1 DA:1397,1 DA:1398,1 DA:1399,1 DA:1399,2 DA:1400,2 DA:1401,2 DA:1403,1 DA:1405,2 DA:1406,2 DA:1408,0 DA:1409,0 DA:1402,1 DA:1403,0 DA:1405,0 DA:1406,0 DA:1409,4 DA:1410,2 DA:1412,1 DA:1413,1 DA:1414,1 DA:1415,1 DA:1420,0 DA:1421,0 DA:1422,0 DA:1423,0 DA:1416,1 DA:1417,2 DA:1418,2 DA:1420,1 DA:1422,2 DA:1423,2 DA:1425,0 DA:1426,0 DA:1427,0 DA:1428,0 DA:1429,0 DA:1430,0 DA:1432,0 DA:1433,0 DA:1434,0 DA:1435,0 DA:1436,0 DA:1429,1 DA:1430,1 DA:1432,1 DA:1437,0 DA:1438,0 DA:1439,0 DA:1440,0 DA:1441,0 DA:1442,0 DA:1443,0 DA:1444,0 DA:1448,0 DA:1445,0 DA:1446,0 DA:1447,0 DA:1449,0 DA:1450,0 DA:1451,0 DA:1452,0 DA:1453,0 DA:1454,0 DA:1455,0 DA:1457,0 DA:1461,1 DA:1462,2 DA:1463,2 DA:1464,2 DA:1465,3 DA:1466,1 DA:1468,0 DA:1458,0 DA:1461,0 DA:1465,0 DA:1466,0 DA:1469,0 DA:1470,0 DA:1478,0 DA:1482,1 DA:1474,0 DA:1478,1 DA:1479,2 DA:1480,2 DA:1481,2 DA:1482,3 DA:1483,1 DA:1484,1 DA:1485,2 DA:1486,2 DA:1487,3 DA:1488,1 DA:1489,7 DA:1490,2 DA:1491,1 DA:1492,1 DA:1493,1 DA:1494,1 DA:1499,2 DA:1485,0 DA:1486,0 DA:1487,0 DA:1495,0 DA:1499,1 DA:1500,1 DA:1502,0 DA:1503,0 DA:1506,1 DA:1507,1 DA:1508,2 DA:1509,2 DA:1512,2 DA:1513,1 DA:1515,0 DA:1516,0 DA:1519,1 DA:1520,1 DA:1521,2 DA:1522,3 DA:1523,2 DA:1501,1 DA:1502,2 DA:1503,2 DA:1504,3 DA:1505,1 DA:1506,7 DA:1507,2 DA:1508,1 DA:1509,1 DA:1510,1 DA:1511,1 DA:1516,2 DA:1517,1 DA:1519,0 DA:1520,0 DA:1523,1 DA:1524,1 DA:1525,2 DA:1526,2 DA:1527,1 DA:1528,3 DA:1529,1 DA:1530,3 DA:1531,3 DA:1532,1 DA:1534,0 DA:1535,0 DA:1536,0 DA:1539,0 DA:1540,0 DA:1541,0 DA:1545,0 DA:1546,0 DA:1529,2 DA:1530,1 DA:1532,0 DA:1533,0 DA:1536,1 DA:1537,1 DA:1538,2 DA:1539,3 DA:1540,2 DA:1543,2 DA:1544,1 DA:1545,3 DA:1546,1 DA:1547,3 DA:1548,3 DA:1549,1 DA:1550,1 DA:1551,1 DA:1556,1 DA:1557,2 DA:1558,1 DA:1561,0 DA:1551,0 DA:1552,0 DA:1553,0 DA:1556,0 DA:1557,0 DA:1558,0 DA:1562,0 DA:1563,0 DA:1603,1 DA:1604,1 DA:1605,1 DA:1609,1 DA:1610,2 DA:1611,1 DA:1613,0 DA:1614,0 DA:1617,2 DA:1619,1 DA:1621,0 DA:1622,0 DA:1623,0 DA:1624,0 DA:1625,0 DA:1626,0 DA:1627,0 DA:1628,0 DA:1566,1 DA:1567,1 DA:1568,1 DA:1573,1 DA:1574,2 DA:1575,1 DA:1578,0 DA:1579,0 DA:1580,0 DA:1620,1 DA:1621,2 DA:1622,2 DA:1626,1 DA:1627,2 DA:1628,1 DA:1630,0 DA:1631,0 DA:1632,0 DA:1637,0 DA:1634,2 DA:1636,1 DA:1638,0 DA:1639,0 DA:1649,2 DA:1651,2 DA:1658,1 DA:1659,7 DA:1660,5 DA:1665,1 DA:1666,2 DA:1667,2 DA:1640,0 DA:1641,0 DA:1642,0 DA:1643,0 DA:1644,0 DA:1645,0 DA:1647,0 DA:1648,0 DA:1649,0 DA:1654,0 DA:1655,0 DA:1656,0 DA:1666,1 DA:1668,1 DA:1669,2 DA:1671,0 DA:1695,2 DA:1696,4 DA:1697,4 DA:1698,2 DA:1699,0 DA:1701,0 DA:1730,1 DA:1731,4 DA:1732,2 DA:1733,0 DA:1735,6 DA:1736,2 DA:1740,1 DA:1741,2 DA:1742,2 DA:1744,4 DA:1748,1 DA:1749,2 DA:1675,1 DA:1676,4 DA:1677,3 DA:1682,1 DA:1683,2 DA:1684,2 DA:1685,1 DA:1686,2 DA:1688,0 DA:1712,1 DA:1713,2 DA:1714,2 DA:1715,1 DA:1716,0 DA:1718,0 DA:1747,1 DA:1748,2 DA:1749,1 DA:1750,0 DA:1752,2 DA:1755,0 DA:1756,0 DA:1757,0 DA:1758,0 DA:1759,0 DA:1760,0 DA:1761,0 DA:1762,0 DA:1763,0 DA:1764,0 DA:1765,0 DA:1766,0 DA:1768,0 DA:1770,0 DA:1752,3 DA:1753,1 DA:1757,1 DA:1758,2 DA:1759,2 DA:1761,4 DA:1765,1 DA:1766,2 DA:1767,0 DA:1769,2 DA:1772,0 DA:1773,0 DA:1774,0 DA:1775,0 DA:1776,0 DA:1791,1 DA:1792,1 DA:1793,4 DA:1794,2 DA:1798,1 DA:1799,2 DA:1800,2 DA:1801,2 DA:1802,2 DA:1803,5 DA:1806,1 DA:1808,2 DA:1777,0 DA:1778,0 DA:1779,0 DA:1780,0 DA:1781,0 DA:1782,0 DA:1783,0 DA:1785,0 DA:1787,0 DA:1790,0 DA:1791,0 DA:1792,0 DA:1793,0 DA:1808,1 DA:1809,1 DA:1810,4 DA:1813,0 DA:1840,1 DA:1841,2 DA:1842,2 DA:1843,1 DA:1844,6 DA:1856,1 DA:1858,0 DA:1811,2 DA:1815,1 DA:1816,2 DA:1817,2 DA:1818,2 DA:1819,2 DA:1820,5 DA:1823,1 DA:1825,2 DA:1827,4 DA:1830,0 DA:1857,1 DA:1858,2 DA:1859,2 DA:1860,1 DA:1875,1 DA:1876,1 DA:1879,1 DA:1880,3 DA:1892,1 DA:1893,1 DA:1896,0 DA:1897,0 DA:1898,0 DA:1900,0 DA:1904,0 DA:1905,0 DA:1906,0 DA:1908,0 DA:1912,0 DA:1861,6 DA:1873,1 DA:1875,0 DA:1877,1 DA:1892,2 DA:1893,2 DA:1896,1 DA:1897,3 DA:1909,1 DA:1910,1 DA:1913,0 DA:1914,0 DA:1915,0 DA:1922,1 DA:1924,2 DA:1925,1 DA:1926,1 DA:1928,3 DA:1917,0 DA:1921,0 DA:1922,0 DA:1923,0 DA:1925,0 DA:1929,0 DA:1931,0 DA:1932,0 DA:1939,1 DA:1941,2 DA:1942,2 DA:1943,4 DA:1944,4 DA:1945,12 DA:1946,8 DA:1948,1 DA:1949,3 DA:1950,1 DA:1953,1 DA:1955,1 DA:1956,8 LF:699 LH:276 DA:1942,1 DA:1943,1 DA:1945,3 DA:1958,2 DA:1959,2 DA:1960,4 DA:1961,3 DA:1962,9 DA:1963,6 DA:1965,1 DA:1966,3 DA:1967,1 DA:1970,1 DA:1972,1 DA:1973,8 DA:1975,1 DA:1976,3 LF:709 LH:284 end_of_record
pipe-cli/src/commands/run/mod.rs +5 −1 Original line number Diff line number Diff line Loading @@ -50,7 +50,11 @@ pub fn run( .build(); match Config::read(config_path) { | Some(cfg) => { let config = cfg.verify_requirements(&options).verify_resources(&options).prepare_modules(&options); let config = cfg .verify_requirements(&options) .verify_resources(&options) .prepare_modules(&options) .set_environment_variables(); match config.clone().get_inputs() { | Some(values) if !values.is_empty() => values.par_iter().for_each(|value| { info!(value, "=> {} Configuration with input", Label::using()); Loading
pipe-lib/src/lib.rs +29 −9 Original line number Diff line number Diff line Loading @@ -546,6 +546,14 @@ impl Config { | None => None, } } fn get_module_list(self) -> String { let names = self .modules .iter() .map(|module| to_snake_case(module.name.clone())) .collect::<Vec<String>>(); names.join(",").to_string() } /// Prepare workflow modules for execution /// /// Module preparation is done in parallel and includes the following steps: Loading Loading @@ -821,6 +829,7 @@ impl Config { /// Modules are run in the order they are defined in the configuration /// pub fn run_workflow(self, input: Option<String>, options: &ConfigOptions) { EnvironmentValue::print_all(); self.modules.iter().for_each(|module| match &module.module_type { | ModuleType::Binary { .. } => { let envs = self.clone().get_environment_variables(Some(module.clone()), input.clone()); Loading @@ -828,7 +837,6 @@ impl Config { let loaded = Script::from_module(module.clone(), Some(PathBuf::from(working_dir.clone()))); let script = loaded.ensure_relative().expand_arguments_from(envs).with_current_dir(working_dir); if options.dry_run { EnvironmentValue::print_all(); info!( module = module.name, script = script.to_string(), Loading @@ -847,7 +855,6 @@ impl Config { let loaded = Script::from_module(module.clone(), Some(options.root.clone())); let script = loaded.expand_arguments_from(envs).with_current_dir(working_dir); if options.dry_run { EnvironmentValue::print_all(); info!( module = module.name, script = script.to_string(), Loading @@ -874,7 +881,6 @@ impl Config { .with_current_dir(working_dir) .with_virtual_environment(virtual_environment); if options.dry_run { EnvironmentValue::print_all(); info!( module = module.name, script = script.to_string(), Loading @@ -892,7 +898,7 @@ impl Config { }); } /// Set environment variables from PIPE configuration "variables" attribute pub fn set_environment_variables(&self) -> Void { pub fn set_environment_variables(self) -> Config { match &self.variables { | Some(variables) => { for (k, v) in variables { Loading @@ -902,7 +908,9 @@ impl Config { } | None => (), } Ok(()) let module_list = EnvironmentValue::String(self.clone().get_module_list()); module_list.set_variable("MODULE_LIST".to_string()); self } /// Verify software requirements are met on host system (ex. Python, conda, etc...) /// Loading Loading @@ -941,6 +949,9 @@ impl PartialEq for Details { } impl EnvironmentValue { pub const PREFIX: &'static str = "pipe"; fn formatted_prefix() -> String { format!("_{}_", EnvironmentValue::PREFIX.to_uppercase()) } /// Convert serde Value to EnvironmentValue /// fn from_value(value: Value) -> EnvironmentValue { Loading @@ -952,11 +963,11 @@ impl EnvironmentValue { } } fn prepend_prefix(value: String) -> String { let prefixed = format!("_{}_{}", EnvironmentValue::PREFIX.to_uppercase(), value); let prefixed = format!("{}{}", EnvironmentValue::formatted_prefix(), value); prefixed } fn trim_prefix(key: String) -> String { let pre = format!("_{}_", EnvironmentValue::PREFIX.to_uppercase()); let pre = EnvironmentValue::formatted_prefix(); key.trim_start_matches(&pre).to_string() } pub fn get_from_serde(values: &Map<String, Value>) -> HashMap<String, String> { Loading @@ -974,7 +985,7 @@ impl EnvironmentValue { lookup } pub fn get_all() -> Vec<(String, String)> { let pre = format!("_{}_", EnvironmentValue::PREFIX.to_uppercase()); let pre = EnvironmentValue::formatted_prefix(); vars() .filter(|(key, _)| key.starts_with(&pre)) .map(|(key, value)| { Loading @@ -985,7 +996,13 @@ impl EnvironmentValue { } pub fn print_all() { EnvironmentValue::get_all().into_iter().for_each(|(key, value)| { debug!(key, value, "=> [{}]", "ENV".dimmed()); trace!( "=> {} {}{} = {}", Label::using(), EnvironmentValue::formatted_prefix().dimmed(), key, value ); }); } pub fn set_variable(self, key: String) { Loading Loading @@ -1955,6 +1972,9 @@ pub fn read_file(path: PathBuf) -> Result<String, Box<dyn Error>> { pub fn to_string(values: Vec<&str>) -> Vec<String> { values.iter().map(|s| s.to_string()).collect() } pub fn to_snake_case(value: String) -> String { value.replace(" ", "_").to_lowercase() } #[cfg(test)] mod tests;
pipe-lib/src/tests.rs +18 −0 Original line number Diff line number Diff line Loading @@ -49,6 +49,18 @@ fn test_command() { } } #[test] fn test_config_get_module_list() { let path = format!("{}/config.json", FIXTURES); match Config::read(PathBuf::from(path)) { | Some(config) => { let expected = "local_binary_module,local_python_script_module,remote_python_script_module"; assert_eq!(config.get_module_list(), expected); } | None => panic!("Cannot read config in tests"), } } #[test] fn test_config_read() { let path = format!("{}/config.json", FIXTURES); Loading Loading @@ -573,6 +585,12 @@ fn test_string_template_handlebars() { ); } #[test] fn test_to_snake_case() { let expected = "some_module_name"; assert_eq!(to_snake_case("Some Module Name".to_string()), expected); } #[test] fn test_to_string() { let input = vec!["a", "b", "c"]; Loading
tests/fixtures/config.json +0 −1 Original line number Diff line number Diff line Loading @@ -15,7 +15,6 @@ ] }, "variables": { "INPUT_DIRECTORY": "/path/to/input", "OUTPUT_DIRECTORY": "/path/to/output", "ANSWER": 42, "BOOLEAN": true, Loading