|
1 |
| -use crate::MINIMAL_SNFORGE_STD_VERSION; |
| 1 | +use crate::{MINIMAL_SNFORGE_STD_COMPATIBILITY_VERSION, MINIMAL_SNFORGE_STD_VERSION}; |
2 | 2 | use anyhow::{Result, anyhow};
|
3 | 3 | use forge_runner::backtrace::is_backtrace_enabled;
|
4 | 4 | use forge_runner::package_tests::with_config_resolved::TestTargetWithResolvedConfig;
|
@@ -85,6 +85,70 @@ fn snforge_std_recommended_version() -> VersionReq {
|
85 | 85 | }
|
86 | 86 | }
|
87 | 87 |
|
| 88 | +pub fn error_if_not_snforge_std_compatibility(scarb_metadata: &Metadata) -> Result<()> { |
| 89 | + if !scarb_metadata |
| 90 | + .packages |
| 91 | + .iter() |
| 92 | + .any(|p| p.name == "snforge_std_compatibility") |
| 93 | + { |
| 94 | + return Err(anyhow!( |
| 95 | + "On Scarb versions < 2.12.0, the `snforge_std` package must be replaced with `snforge_std_compatibility`. Please update it in Scarb.toml" |
| 96 | + )); |
| 97 | + } |
| 98 | + Ok(()) |
| 99 | +} |
| 100 | + |
| 101 | +pub fn error_if_snforge_std_compatibility_not_compatible(scarb_metadata: &Metadata) -> Result<()> { |
| 102 | + let snforge_std_version_requirement_comparator = Comparator { |
| 103 | + op: Op::GreaterEq, |
| 104 | + major: MINIMAL_SNFORGE_STD_COMPATIBILITY_VERSION.major, |
| 105 | + minor: Some(MINIMAL_SNFORGE_STD_COMPATIBILITY_VERSION.minor), |
| 106 | + patch: Some(MINIMAL_SNFORGE_STD_COMPATIBILITY_VERSION.patch), |
| 107 | + pre: MINIMAL_SNFORGE_STD_COMPATIBILITY_VERSION.pre, |
| 108 | + }; |
| 109 | + let snforge_std_version_requirement = VersionReq { |
| 110 | + comparators: vec![snforge_std_version_requirement_comparator], |
| 111 | + }; |
| 112 | + |
| 113 | + if !package_matches_version_requirement( |
| 114 | + scarb_metadata, |
| 115 | + "snforge_std_compatibility", |
| 116 | + &snforge_std_version_requirement, |
| 117 | + )? { |
| 118 | + return Err(anyhow!( |
| 119 | + "Package snforge_std_compatibility version does not meet the minimum required version {snforge_std_version_requirement}. Please upgrade snforge_std in Scarb.toml" |
| 120 | + )); |
| 121 | + } |
| 122 | + Ok(()) |
| 123 | +} |
| 124 | + |
| 125 | +pub fn warn_if_snforge_std_compatibility_not_compatible( |
| 126 | + scarb_metadata: &Metadata, |
| 127 | + ui: &UI, |
| 128 | +) -> Result<()> { |
| 129 | + let snforge_std_version_requirement = snforge_std_recommended_version(); |
| 130 | + if !package_matches_version_requirement( |
| 131 | + scarb_metadata, |
| 132 | + "snforge_std_compatibility", |
| 133 | + &snforge_std_version_requirement, |
| 134 | + )? { |
| 135 | + ui.println(&WarningMessage::new(&format!( |
| 136 | + "Package snforge_std_compatibility version does not meet the recommended version requirement {snforge_std_version_requirement}, it might result in unexpected behaviour" |
| 137 | + ))); |
| 138 | + } |
| 139 | + Ok(()) |
| 140 | +} |
| 141 | + |
| 142 | +pub fn warn_if_snforge_std_compatibility_on_new_scarb(scarb_metadata: &Metadata, ui: &UI) { |
| 143 | + if scarb_metadata |
| 144 | + .packages |
| 145 | + .iter() |
| 146 | + .any(|p| p.name == "snforge_std_compatibility") |
| 147 | + { |
| 148 | + ui.println(&WarningMessage::new(&"Package snforge_std_compatibility should not be used on Scarb versions >= 2.12.0. Please replace it with snforge_std".to_string())); |
| 149 | + } |
| 150 | +} |
| 151 | + |
88 | 152 | pub fn error_if_snforge_std_not_compatible(scarb_metadata: &Metadata) -> Result<()> {
|
89 | 153 | let snforge_std_version_requirement_comparator = Comparator {
|
90 | 154 | op: Op::GreaterEq,
|
|
0 commit comments