Commit 4da18fa0 authored by Wohlgemuth, Jason's avatar Wohlgemuth, Jason
Browse files

feat: Enforce template data loading order in run execution phase

parent a8b5e4c8
Loading
Loading
Loading
Loading
Loading
+422 −423
Original line number Diff line number Diff line
@@ -108,99 +108,96 @@ LH:0
end_of_record
TN:
SF:/root/dev/command/pipe-cli/src/commands/run/mod.rs
FN:17,run
FN:20,run
FNF:1
FNDA:0,run
DA:17,0
DA:27,0
DA:28,0
DA:29,0
DA:20,0
DA:30,0
DA:31,0
DA:32,0
DA:34,0
DA:36,0
DA:35,0
DA:37,0
DA:38,0
DA:39,0
DA:40,0
DA:41,0
DA:43,0
DA:44,0
DA:45,0
DA:46,0
DA:47,0
DA:48,0
DA:49,0
DA:51,0
DA:52,0
DA:53,0
DA:54,0
DA:55,0
DA:56,0
DA:60,0
DA:57,0
DA:58,0
DA:59,0
DA:63,0
DA:64,0
DA:65,0
DA:66,0
DA:67,0
DA:68,0
DA:74,0
DA:76,0
DA:78,0
DA:80,0
DA:82,0
DA:70,0
DA:71,0
DA:77,0
DA:79,0
DA:81,0
DA:83,0
DA:85,0
DA:86,0
DA:87,0
DA:88,0
DA:89,0
DA:90,0
DA:92,0
DA:93,0
DA:94,0
DA:95,0
DA:96,0
DA:101,0
DA:103,0
DA:105,0
DA:107,0
DA:97,0
DA:99,0
DA:104,0
DA:106,0
DA:108,0
DA:112,0
DA:113,0
DA:114,0
DA:110,0
DA:111,0
DA:115,0
DA:116,0
DA:117,0
DA:119,0
DA:120,0
DA:122,0
DA:123,0
DA:125,0
DA:126,0
DA:128,0
DA:129,0
DA:131,0
DA:132,0
DA:133,0
DA:134,0
DA:135,0
DA:136,0
DA:137,0
DA:138,0
DA:148,0
DA:149,0
DA:150,0
DA:139,0
DA:141,0
DA:151,0
DA:152,0
DA:153,0
DA:157,0
DA:159,0
DA:161,0
DA:154,0
DA:156,0
DA:160,0
DA:162,0
DA:166,0
DA:176,0
DA:177,0
DA:178,0
DA:164,0
DA:165,0
DA:169,0
DA:179,0
DA:180,0
DA:181,0
DA:186,0
DA:187,0
DA:191,0
DA:182,0
DA:184,0
DA:189,0
DA:190,0
DA:194,0
DA:197,0
DA:199,0
DA:201,0
DA:200,0
DA:202,0
DA:204,0
DA:205,0
DA:206,0
DA:207,0
DA:208,0
DA:209,0
@@ -208,46 +205,55 @@ DA:210,0
DA:211,0
DA:212,0
DA:213,0
DA:214,0
DA:215,0
DA:216,0
DA:218,0
DA:221,0
DA:224,0
DA:226,0
DA:227,0
DA:228,0
DA:229,0
DA:230,0
DA:231,0
DA:232,0
DA:233,0
DA:234,0
DA:235,0
DA:237,0
DA:240,0
DA:244,0
DA:245,0
DA:246,0
DA:243,0
DA:247,0
DA:248,0
DA:249,0
DA:250,0
DA:252,0
DA:251,0
DA:253,0
DA:254,0
DA:255,0
DA:256,0
DA:257,0
DA:260,0
DA:259,0
DA:261,0
DA:263,0
DA:264,0
DA:265,0
DA:266,0
DA:267,0
DA:269,0
DA:271,0
DA:272,0
DA:274,0
DA:275,0
DA:277,0
DA:278,0
DA:279,0
DA:280,0
DA:281,0
DA:283,0
DA:285,0
LF:136
DA:286,0
DA:289,0
DA:292,0
DA:294,0
DA:297,0
DA:299,0
LF:142
LH:0
end_of_record
TN:
@@ -370,63 +376,63 @@ LH:0
end_of_record
TN:
SF:/root/dev/command/pipe-lib/src/lib.rs
FN:445,Command::test
FN:468,Config::read
FN:492,Config::read_json
FN:513,Config::read_yaml
FN:530,Config::set_environment_variables
FN:544,<impl PartialEq for Details>::eq
FN:551,EnvironmentValue::from_string
FN:554,EnvironmentValue::from_value
FN:562,EnvironmentValue::prepend_prefix
FN:566,EnvironmentValue::trim_prefix
FN:570,EnvironmentValue::get_from_config
FN:577,EnvironmentValue::get_from_serde
FN:591,EnvironmentValue::get_all
FN:601,EnvironmentValue::print_all
FN:606,EnvironmentValue::set_variable
FN:616,EnvironmentValue::set_variables
FN:623,Extension::from_string
FN:632,Label::dry_run
FN:636,Label::invalid
FN:640,Label::fail
FN:644,Label::found
FN:648,Label::not_found
FN:652,Label::output
FN:656,Label::read
FN:660,Label::rejected
FN:664,Label::run
FN:668,Label::using
FN:674,ModuleUri<'_>::from
FN:684,ModuleUri<'_>::hash
FN:708,ModuleUri<'_>::get_whitelist
FN:711,ModuleUri<'_>::is_allowed
FN:714,ModuleUri<'_>::test
FN:715,ModuleUri<'_>::test::check
FN:732,ModuleUri<'_>::working_directory
FN:744,SemanticVersion::from_string
FN:767,Script::expand_arguments
FN:802,Script::expand_arguments_from
FN:837,Script::from_module
FN:895,Script::from_path
FN:918,Script::from_template
FN:947,Script::get_command
FN:957,Script::get_arguments
FN:997,Script::maybe_create_virtual_environment
FN:1034,Script::maybe_git_clone
FN:1041,Script::python_default
FN:1055,Script::run
FN:1122,Script::with_container
FN:1129,Script::with_current_dir
FN:1134,Script::with_envs
FN:1173,Script::with_virtual_environment
FN:1182,StringTemplate::new
FN:1191,StringTemplate::expand
FN:1198,StringTemplate::get_variable
FN:1228,StringTemplate::is_handlebars
FN:1263,StringTemplate::remove_spaces
FN:1273,add_dot_slash
FN:1281,add_forward_slash
FN:444,Command::test
FN:467,Config::read
FN:491,Config::read_json
FN:512,Config::read_yaml
FN:529,Config::set_environment_variables
FN:543,<impl PartialEq for Details>::eq
FN:550,EnvironmentValue::from_string
FN:553,EnvironmentValue::from_value
FN:561,EnvironmentValue::prepend_prefix
FN:565,EnvironmentValue::trim_prefix
FN:569,EnvironmentValue::get_from_config
FN:576,EnvironmentValue::get_from_serde
FN:590,EnvironmentValue::get_all
FN:600,EnvironmentValue::print_all
FN:605,EnvironmentValue::set_variable
FN:615,EnvironmentValue::set_variables
FN:622,Extension::from_string
FN:631,Label::dry_run
FN:635,Label::invalid
FN:639,Label::fail
FN:643,Label::found
FN:647,Label::not_found
FN:651,Label::output
FN:655,Label::read
FN:659,Label::rejected
FN:663,Label::run
FN:667,Label::using
FN:673,ModuleUri<'_>::from
FN:683,ModuleUri<'_>::hash
FN:707,ModuleUri<'_>::get_whitelist
FN:710,ModuleUri<'_>::is_allowed
FN:713,ModuleUri<'_>::test
FN:714,ModuleUri<'_>::test::check
FN:731,ModuleUri<'_>::working_directory
FN:743,SemanticVersion::from_string
FN:766,Script::expand_arguments
FN:801,Script::expand_arguments_from
FN:836,Script::from_module
FN:894,Script::from_path
FN:917,Script::from_template
FN:937,Script::get_command
FN:947,Script::get_arguments
FN:987,Script::maybe_create_virtual_environment
FN:1024,Script::maybe_git_clone
FN:1031,Script::python_default
FN:1045,Script::run
FN:1112,Script::with_container
FN:1119,Script::with_current_dir
FN:1124,Script::with_envs
FN:1166,Script::with_virtual_environment
FN:1175,StringTemplate::new
FN:1184,StringTemplate::expand
FN:1191,StringTemplate::get_variable
FN:1221,StringTemplate::is_handlebars
FN:1256,StringTemplate::remove_spaces
FN:1266,add_dot_slash
FN:1274,add_forward_slash
FNF:57
FNDA:1,Command::test
FNDA:1,Config::read
@@ -478,86 +484,87 @@ FNDA:1,Script::with_container
FNDA:1,Script::with_current_dir
FNDA:0,Script::with_envs
FNDA:1,Script::with_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
DA:445,1
DA:446,2
DA:447,1
DA:448,3
DA:449,2
DA:451,6
DA:452,2
DA:444,1
DA:445,2
DA:446,1
DA:447,4
DA:448,4
DA:450,6
DA:451,2
DA:454,0
DA:455,0
DA:456,0
DA:461,3
DA:462,1
DA:468,1
DA:460,3
DA:461,1
DA:467,1
DA:468,2
DA:469,2
DA:470,2
DA:471,1
DA:472,0
DA:474,2
DA:475,1
DA:476,0
DA:480,2
DA:481,1
DA:470,1
DA:471,0
DA:473,2
DA:474,1
DA:475,0
DA:479,2
DA:480,1
DA:482,0
DA:483,0
DA:484,0
DA:492,1
DA:491,1
DA:492,2
DA:493,2
DA:494,2
DA:495,0
DA:496,0
DA:497,0
DA:499,3
DA:500,2
DA:501,1
DA:502,2
DA:503,0
DA:505,3
DA:506,1
DA:513,1
DA:514,2
DA:515,1
DA:501,4
DA:502,0
DA:504,6
DA:505,2
DA:512,1
DA:513,2
DA:514,1
DA:516,0
DA:517,0
DA:518,0
DA:521,2
DA:522,1
DA:523,2
DA:524,0
DA:526,3
DA:527,1
DA:520,2
DA:521,1
DA:522,2
DA:523,0
DA:525,3
DA:526,1
DA:529,0
DA:530,0
DA:531,0
DA:532,0
DA:533,0
DA:534,0
DA:535,0
DA:540,0
DA:539,0
DA:543,1
DA:544,1
DA:545,1
DA:550,0
DA:551,0
DA:552,0
DA:553,0
DA:554,0
DA:555,0
DA:556,0
DA:557,0
DA:558,0
DA:559,0
DA:561,0
DA:562,0
DA:563,0
DA:565,1
DA:566,1
DA:567,1
DA:568,2
DA:567,2
DA:569,0
DA:570,0
DA:571,0
DA:572,0
DA:573,0
DA:574,0
DA:575,0
DA:576,0
DA:577,0
DA:578,0
DA:579,0
@@ -566,377 +573,369 @@ DA:581,0
DA:582,0
DA:583,0
DA:584,0
DA:585,0
DA:587,0
DA:589,0
DA:586,0
DA:588,0
DA:590,1
DA:591,1
DA:592,1
DA:592,2
DA:593,2
DA:594,2
DA:595,2
DA:596,2
DA:597,1
DA:596,1
DA:600,0
DA:601,0
DA:602,0
DA:603,0
DA:605,0
DA:606,0
DA:607,0
DA:608,0
DA:609,0
DA:610,0
DA:611,0
DA:612,0
DA:615,0
DA:616,0
DA:617,0
DA:619,0
DA:623,1
DA:618,0
DA:622,1
DA:623,2
DA:624,2
DA:625,2
DA:626,3
DA:627,0
DA:625,3
DA:626,0
DA:631,0
DA:632,0
DA:633,0
DA:634,0
DA:635,0
DA:636,0
DA:637,0
DA:638,0
DA:639,0
DA:640,0
DA:641,0
DA:642,0
DA:643,0
DA:644,0
DA:645,0
DA:646,0
DA:647,0
DA:648,0
DA:649,0
DA:650,0
DA:652,1
DA:653,2
DA:654,1
DA:651,1
DA:652,3
DA:653,3
DA:655,0
DA:656,0
DA:657,0
DA:658,0
DA:659,0
DA:660,0
DA:661,0
DA:662,0
DA:663,0
DA:664,0
DA:665,0
DA:666,0
DA:667,0
DA:668,0
DA:669,0
DA:670,0
DA:673,2
DA:674,2
DA:675,2
DA:676,5
DA:675,5
DA:676,2
DA:677,2
DA:678,2
DA:679,0
DA:681,1
DA:678,0
DA:680,1
DA:683,1
DA:684,1
DA:685,1
DA:686,1
DA:687,1
DA:688,2
DA:689,0
DA:691,4
DA:687,2
DA:688,0
DA:690,4
DA:694,4
DA:695,4
DA:696,4
DA:698,4
DA:699,2
DA:701,2
DA:704,0
DA:697,4
DA:698,2
DA:700,2
DA:703,0
DA:707,0
DA:708,0
DA:709,0
DA:710,0
DA:711,0
DA:712,0
DA:713,0
DA:714,0
DA:715,0
DA:716,0
DA:717,0
DA:718,0
DA:719,0
DA:720,0
DA:721,0
DA:722,0
DA:723,0
DA:724,0
DA:726,0
DA:728,0
DA:725,0
DA:727,0
DA:731,0
DA:732,0
DA:733,0
DA:734,0
DA:735,0
DA:736,0
DA:737,0
DA:738,0
DA:739,0
DA:743,1
DA:744,1
DA:745,1
DA:745,3
DA:746,3
DA:747,3
DA:748,3
DA:767,1
DA:768,2
DA:771,2
DA:772,1
DA:773,2
DA:766,1
DA:767,2
DA:770,2
DA:771,1
DA:772,2
DA:773,1
DA:774,1
DA:775,1
DA:777,2
DA:776,2
DA:780,1
DA:781,1
DA:782,1
DA:802,1
DA:803,2
DA:806,2
DA:807,1
DA:801,1
DA:802,2
DA:805,2
DA:806,1
DA:807,2
DA:808,2
DA:809,2
DA:812,2
DA:814,1
DA:816,2
DA:811,2
DA:813,1
DA:815,2
DA:819,1
DA:820,1
DA:821,1
DA:837,0
DA:836,0
DA:838,0
DA:839,0
DA:840,0
DA:841,0
DA:843,0
DA:844,0
DA:845,0
DA:846,0
DA:847,0
DA:848,0
DA:849,0
DA:850,0
DA:851,0
DA:852,0
DA:854,0
DA:855,0
DA:856,0
DA:857,0
DA:858,0
DA:860,0
DA:861,0
DA:862,0
DA:863,0
DA:866,0
DA:865,0
DA:867,0
DA:868,0
DA:869,0
DA:872,0
DA:871,0
DA:877,0
DA:878,0
DA:879,0
DA:895,1
DA:896,2
DA:897,1
DA:894,1
DA:895,2
DA:896,1
DA:898,0
DA:899,0
DA:900,0
DA:903,2
DA:902,2
DA:903,1
DA:904,1
DA:905,1
DA:917,1
DA:918,1
DA:919,1
DA:920,3
DA:924,2
DA:926,2
DA:928,2
DA:919,3
DA:923,2
DA:925,2
DA:927,2
DA:931,1
DA:932,1
DA:933,2
DA:934,1
DA:936,1
DA:933,1
DA:935,2
DA:937,1
DA:938,1
DA:941,1
DA:939,1
DA:940,1
DA:942,1
DA:943,1
DA:945,2
DA:943,2
DA:944,1
DA:947,1
DA:948,1
DA:949,1
DA:950,1
DA:951,1
DA:952,1
DA:953,2
DA:954,1
DA:957,1
DA:958,1
DA:959,1
DA:953,0
DA:955,0
DA:956,0
DA:959,2
DA:960,1
DA:961,1
DA:962,1
DA:963,0
DA:965,0
DA:966,0
DA:969,2
DA:964,1
DA:965,1
DA:966,1
DA:967,2
DA:968,2
DA:970,1
DA:972,1
DA:974,1
DA:975,1
DA:976,1
DA:977,2
DA:978,2
DA:972,2
DA:973,2
DA:975,0
DA:976,0
DA:979,1
DA:980,1
DA:982,2
DA:983,2
DA:985,0
DA:986,0
DA:989,1
DA:990,1
DA:992,1
DA:982,1
DA:987,0
DA:992,0
DA:993,0
DA:994,0
DA:996,0
DA:997,0
DA:1002,0
DA:998,0
DA:999,0
DA:1000,0
DA:1001,0
DA:1003,0
DA:1004,0
DA:1005,0
DA:1006,0
DA:1007,0
DA:1008,0
DA:1009,0
DA:1010,0
DA:1011,0
DA:1013,0
DA:1014,0
DA:1012,0
DA:1015,0
DA:1016,0
DA:1017,0
DA:1018,0
DA:1019,0
DA:1021,0
DA:1022,0
DA:1025,0
DA:1029,0
DA:1030,0
DA:1034,1
DA:1035,2
DA:1036,2
DA:1037,2
DA:1038,3
DA:1039,1
DA:1020,0
DA:1024,1
DA:1025,2
DA:1026,2
DA:1027,2
DA:1028,3
DA:1029,1
DA:1031,0
DA:1032,0
DA:1033,0
DA:1041,0
DA:1042,0
DA:1043,0
DA:1051,0
DA:1045,1
DA:1046,1
DA:1047,1
DA:1048,2
DA:1049,2
DA:1050,3
DA:1051,1
DA:1052,7
DA:1053,2
DA:1054,1
DA:1055,1
DA:1056,1
DA:1057,1
DA:1058,2
DA:1059,2
DA:1060,3
DA:1061,1
DA:1062,7
DA:1063,2
DA:1064,1
DA:1065,1
DA:1066,1
DA:1067,1
DA:1062,2
DA:1063,1
DA:1065,0
DA:1066,0
DA:1069,1
DA:1070,1
DA:1071,2
DA:1072,2
DA:1073,1
DA:1075,0
DA:1076,0
DA:1079,1
DA:1080,1
DA:1081,2
DA:1082,2
DA:1085,2
DA:1086,1
DA:1088,0
DA:1089,0
DA:1075,2
DA:1076,1
DA:1078,0
DA:1079,0
DA:1082,1
DA:1083,1
DA:1084,2
DA:1085,0
DA:1086,0
DA:1089,2
DA:1090,1
DA:1091,3
DA:1092,1
DA:1093,1
DA:1094,2
DA:1095,0
DA:1096,0
DA:1099,2
DA:1100,1
DA:1101,3
DA:1102,1
DA:1103,3
DA:1104,3
DA:1105,1
DA:1107,0
DA:1093,3
DA:1094,3
DA:1095,1
DA:1097,0
DA:1098,0
DA:1099,0
DA:1102,0
DA:1103,0
DA:1104,0
DA:1108,0
DA:1109,0
DA:1112,0
DA:1113,0
DA:1114,0
DA:1118,0
DA:1119,0
DA:1122,1
DA:1123,1
DA:1124,1
DA:1129,1
DA:1130,2
DA:1131,1
DA:1134,0
DA:1135,0
DA:1136,0
DA:1173,1
DA:1174,1
DA:1112,1
DA:1113,1
DA:1114,1
DA:1119,1
DA:1120,2
DA:1121,1
DA:1124,0
DA:1125,0
DA:1126,0
DA:1166,1
DA:1167,1
DA:1168,1
DA:1175,1
DA:1182,2
DA:1184,2
DA:1177,1
DA:1184,1
DA:1185,4
DA:1186,3
DA:1191,1
DA:1192,6
DA:1193,5
DA:1198,1
DA:1199,2
DA:1200,2
DA:1201,1
DA:1202,2
DA:1204,0
DA:1228,2
DA:1229,4
DA:1230,4
DA:1231,2
DA:1232,0
DA:1234,0
DA:1263,1
DA:1264,2
DA:1265,1
DA:1266,0
DA:1268,3
DA:1269,1
DA:1273,1
DA:1274,2
DA:1192,2
DA:1193,2
DA:1194,1
DA:1195,2
DA:1197,0
DA:1221,1
DA:1222,2
DA:1223,2
DA:1224,1
DA:1225,0
DA:1227,0
DA:1256,1
DA:1257,2
DA:1258,1
DA:1259,0
DA:1261,3
DA:1262,1
DA:1266,1
DA:1267,2
DA:1268,2
DA:1270,3
DA:1274,1
DA:1275,2
DA:1277,3
DA:1281,1
DA:1282,2
DA:1283,0
DA:1285,2
DA:1298,1
DA:1299,2
DA:1300,2
DA:1276,0
DA:1278,2
DA:1291,1
DA:1292,2
DA:1293,2
DA:1294,2
DA:1295,2
DA:1296,5
DA:1299,1
DA:1301,2
DA:1302,2
DA:1303,5
DA:1306,1
DA:1308,2
DA:1310,4
DA:1313,0
DA:1340,1
DA:1341,1
DA:1342,1
DA:1343,6
DA:1355,1
DA:1357,0
DA:1372,1
DA:1373,1
DA:1376,1
DA:1377,3
DA:1389,1
DA:1390,1
DA:1393,0
DA:1303,4
DA:1306,0
DA:1333,1
DA:1334,1
DA:1335,1
DA:1336,6
DA:1348,1
DA:1350,0
DA:1365,1
DA:1366,1
DA:1369,1
DA:1370,3
DA:1382,1
DA:1383,1
DA:1386,0
DA:1387,0
DA:1388,0
DA:1390,0
DA:1394,0
DA:1395,0
DA:1397,0
DA:1401,0
DA:1402,0
DA:1403,0
DA:1405,0
DA:1419,2
DA:1420,2
DA:1421,6
DA:1422,3
DA:1423,12
DA:1424,8
DA:1396,0
DA:1398,0
DA:1412,2
DA:1413,2
DA:1414,6
DA:1415,4
DA:1416,12
DA:1417,8
DA:1419,1
DA:1420,3
DA:1421,1
DA:1424,1
DA:1426,1
DA:1427,3
DA:1428,1
DA:1431,1
DA:1433,1
DA:1434,4
LF:452
LH:249
DA:1427,4
LF:445
LH:242
end_of_record
+28 −14
Original line number Diff line number Diff line
@@ -3,7 +3,10 @@ use color_eyre::eyre::Report;
use exitcode;
use nanoid::nanoid;
use pipe_lib::VirtualEnvironment;
use pipe_lib::{get_conda_environment_name, get_parent, Command, Config, EnvironmentValue, Label, ModuleLanguage, ModuleType, ModuleUri, Script};
use pipe_lib::{
    get_conda_environment_name, get_parent, Command, Config, EnvironmentValue, Label, ModuleLanguage, ModuleType, ModuleUri, Script,
    TemplateAttribute, VirtualEnvironmentManager,
};
use rayon::prelude::*;
use std::convert::TryFrom;
use std::env;
@@ -242,26 +245,37 @@ pub fn run(
                    }
                    | ModuleLanguage::Python => {
                        let working_dir = ModuleUri::from(uri).working_directory(Some(root.clone()));
                        let manifest_path = PathBuf::from(&working_dir).join("environment.yml");
                        let loaded = Script::from_module(module.clone(), Some(root.clone()));
                        let virtual_environment = match &module.template {
                            | Some(TemplateAttribute::Template(value)) => match &value.virtual_environment {
                                | Some(virtual_environment) => Some(virtual_environment.clone()),
                                | None => {
                                    let conda_manifest_path = PathBuf::from(&working_dir).join("environment.yml");
                                    match conda_manifest_path.try_exists() {
                                        | Ok(_) => match get_conda_environment_name(conda_manifest_path.clone()) {
                                            | Some(value) => {
                                                debug!(
                                                    module = module.name,
                            path = manifest_path.to_str().unwrap(),
                                                    path = conda_manifest_path.to_str().unwrap(),
                                                    "=> {} Manifest file",
                                                    Label::using()
                                                );
                        let loaded = Script::from_module(module.clone(), Some(root.clone()));
                        let environment = match get_conda_environment_name(manifest_path) {
                            | Some(value) => Some(VirtualEnvironment::init().name(value).build()),
                            | None => match &module.template {
                                | Some(_) => loaded.clone().command.virtual_environment,
                                                Some(VirtualEnvironment::init().name(value).manager(VirtualEnvironmentManager::Conda).build())
                                            }
                                            | None => None,
                                        },
                                        | Err(_) => None,
                                    }
                                }
                            },
                            | Some(TemplateAttribute::Path(_)) => None,
                            | None => None,
                        };
                        let envs = EnvironmentValue::get_from_config(&cfg, Some(module.clone()));
                        let script = loaded
                            .expand_arguments_from(envs)
                            .with_current_dir(working_dir)
                            .with_virtual_environment(environment);
                            .with_virtual_environment(virtual_environment);
                        if dry_run {
                            EnvironmentValue::print_all();
                            info!(
+9 −16
Original line number Diff line number Diff line
@@ -410,9 +410,8 @@ pub struct Script {
pub struct ScriptTemplate {
    pub command: String,
    pub container: Option<ContainerEnvironment>,
    pub manager: Option<VirtualEnvironmentManager>,
    #[serde(alias = "environment")]
    pub virtual_environment: Option<String>,
    pub virtual_environment: Option<VirtualEnvironment>,
    pub arguments: Instruction,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
@@ -928,19 +927,10 @@ impl Script {
                .map(|value| StringTemplate::new(&value).remove_spaces().value)
                .collect(),
        };
        let manager = template.manager;
        let virtual_environment = match template.virtual_environment {
            | Some(name) => Some(VirtualEnvironment::init().name(name).maybe_manager(manager).build()),
            | None => None,
        };
        let container = match template.container {
            | Some(value) => Some(value),
            | None => None,
        };
        let command = Command::init()
            .name(template.command)
            .maybe_container(container)
            .maybe_virtual_environment(virtual_environment)
            .maybe_container(template.container)
            .maybe_virtual_environment(template.virtual_environment)
            .build();
        Script::init().command(command).arguments(arguments).build()
    }
@@ -1162,12 +1152,15 @@ impl Script {
    ///
    /// Run using "module-a" Conda virtual environment (basically executes script with `conda run -n <name>`)
    /// ```
    /// use pipe_lib::{to_string, Command, Script, VirtualEnvironment};
    /// use pipe_lib::{to_string, Command, Script, VirtualEnvironment, VirtualEnvironmentManager};
    ///
    /// let command = Command::init().name("python".to_string()).build();
    /// let arguments = to_string(vec!["-m", "lib"]);
    /// let script = Script::init().command(command).arguments(arguments).build();
    /// let virtual_environment = VirtualEnvironment::init().name("module-a".to_string()).build();
    /// let virtual_environment = VirtualEnvironment::init()
    ///     .name("module-a".to_string())
    ///     .manager(VirtualEnvironmentManager::Conda)
    ///     .build();
    /// let output = script.with_virtual_environment(Some(virtual_environment)).run();
    /// ```
    pub fn with_virtual_environment(mut self, value: Option<VirtualEnvironment>) -> Self {
@@ -1424,7 +1417,7 @@ pub fn read_file(path: PathBuf) -> Result<String, Box<dyn Error>> {
            file.read_to_string(&mut content)
        }
        | Err(err) => {
            error!(path = path.to_str().unwrap(), "=> {}", Label::fail());
            error!(path = path.to_str().unwrap(), "=> {} Cannot read file", Label::fail());
            Err(err)
        }
    };
+12 −3
Original line number Diff line number Diff line
@@ -25,7 +25,10 @@ fn test_add_forward_slash() {
fn test_command() {
    let nonexistent: Command = Command::init().name("does-not-exist".to_string()).build();
    assert!(!nonexistent.test());
    let base = VirtualEnvironment::init().name("base".to_string()).build();
    let base = VirtualEnvironment::init()
        .name("base".to_string())
        .manager(VirtualEnvironmentManager::Conda)
        .build();
    let python = Command::init().name("python".to_string()).virtual_environment(base).build();
    assert_eq!(python.clone().name, "python".to_string());
    assert_eq!(python.clone().virtual_environment.unwrap().to_string(), "base".to_string());
@@ -264,7 +267,10 @@ fn test_script_expand_arguments() {
        script.clone().expand_arguments().arguments,
        vec!["-m", "lib", "--input", "/path/to/input", "--output", "/path/to/output"]
    );
    let environment = VirtualEnvironment::init().name("foo".to_string()).build();
    let environment = VirtualEnvironment::init()
        .name("foo".to_string())
        .manager(VirtualEnvironmentManager::Conda)
        .build();
    assert_eq!(
        script
            .clone()
@@ -312,7 +318,10 @@ fn test_script_expand_arguments_from() {
        ("INPUT_DIRECTORY".to_string(), "FOO".to_string()),
        ("OUTPUT_DIRECTORY".to_string(), "BAR".to_string()),
    ]);
    let environment = VirtualEnvironment::init().name("foo".to_string()).build();
    let environment = VirtualEnvironment::init()
        .name("foo".to_string())
        .manager(VirtualEnvironmentManager::Conda)
        .build();
    assert_eq!(
        script
            .clone()
+4 −2
Original line number Diff line number Diff line
@@ -4,8 +4,10 @@
        "name": "CONTAINER",
        "runtime": "docker"
    },
    "manager": "pixi",
    "environment": "ENVIRONMENT",
    "environment": {
        "name": "ENVIRONMENT",
        "manager": "pixi"
    },
    "arguments": [
        "-m",
        "lib",
Loading