-
Notifications
You must be signed in to change notification settings - Fork 188
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat(sozo): apply semver to tag versions #2909
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -5,6 +5,7 @@ | |||||||||||||||||||||||||||||||||||||||||||||
use clap::Subcommand; | ||||||||||||||||||||||||||||||||||||||||||||||
use events::EventsArgs; | ||||||||||||||||||||||||||||||||||||||||||||||
use scarb::core::{Config, Package, Workspace}; | ||||||||||||||||||||||||||||||||||||||||||||||
use semver::{Version, VersionReq}; | ||||||||||||||||||||||||||||||||||||||||||||||
use tracing::info_span; | ||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||
pub(crate) mod auth; | ||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -132,30 +133,52 @@ | |||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||
let dojo_dep_str = dojo_dep.to_string(); | ||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||
dbg!(&dojo_dep_str); | ||||||||||||||||||||||||||||||||||||||||||||||
dbg!(&dojo_version); | ||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||
// Only in case of git dependency with an explicit tag, we check if the tag is the same as | ||||||||||||||||||||||||||||||||||||||||||||||
// the current version. | ||||||||||||||||||||||||||||||||||||||||||||||
if dojo_dep_str.contains("git+") | ||||||||||||||||||||||||||||||||||||||||||||||
&& dojo_dep_str.contains("tag=v") | ||||||||||||||||||||||||||||||||||||||||||||||
&& !dojo_dep_str.contains(dojo_version) | ||||||||||||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||||||||||||
if let Ok(cp) = ws.current_package() { | ||||||||||||||||||||||||||||||||||||||||||||||
let path = | ||||||||||||||||||||||||||||||||||||||||||||||
if cp.id == package.id { package.manifest_path() } else { ws.manifest_path() }; | ||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||
anyhow::bail!( | ||||||||||||||||||||||||||||||||||||||||||||||
"Found dojo-core version mismatch: expected {}. Please verify your dojo \ | ||||||||||||||||||||||||||||||||||||||||||||||
dependency in {}", | ||||||||||||||||||||||||||||||||||||||||||||||
dojo_version, | ||||||||||||||||||||||||||||||||||||||||||||||
path | ||||||||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||||||||
} else { | ||||||||||||||||||||||||||||||||||||||||||||||
// Virtual workspace. | ||||||||||||||||||||||||||||||||||||||||||||||
anyhow::bail!( | ||||||||||||||||||||||||||||||||||||||||||||||
"Found dojo-core version mismatch: expected {}. Please verify your dojo \ | ||||||||||||||||||||||||||||||||||||||||||||||
dependency in {}", | ||||||||||||||||||||||||||||||||||||||||||||||
dojo_version, | ||||||||||||||||||||||||||||||||||||||||||||||
ws.manifest_path() | ||||||||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||||||||
// safe to unwrap since we know the string contains "tag=v". | ||||||||||||||||||||||||||||||||||||||||||||||
// "dojo * (git+https://github.com/dojoengine/dojo?tag=v1.0.10)" | ||||||||||||||||||||||||||||||||||||||||||||||
let dojo_dep_version = dojo_dep_str.split("tag=v") | ||||||||||||||||||||||||||||||||||||||||||||||
.nth(1) // Get the part after "tag=v" | ||||||||||||||||||||||||||||||||||||||||||||||
.map(|s| s.trim_end_matches(')')) | ||||||||||||||||||||||||||||||||||||||||||||||
.expect("Unexpected dojo dependency format"); | ||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||
let dojo_dep_version = Version::parse(dojo_dep_version).unwrap(); | ||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||
let version_parts: Vec<&str> = dojo_version.split('.').collect(); | ||||||||||||||||||||||||||||||||||||||||||||||
let major_minor = format!("{}.{}", version_parts[0], version_parts[1]); | ||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+154
to
+155
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Ohayo sensei! Ensure Accessing Modify the code to check the length before accessing the elements: let version_parts: Vec<&str> = dojo_version.split('.').collect();
+ if version_parts.len() < 2 {
+ anyhow::bail!("Invalid dojo version format: {}", dojo_version);
+ }
let major_minor = format!("{}.{}", version_parts[0], version_parts[1]); 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||
let dojo_req_version = VersionReq::parse(&format!(">={}", major_minor)).unwrap(); | ||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+147
to
+156
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Ohayo sensei! Handle potential parsing errors to prevent panics. Using Apply this diff to handle parsing errors: - let dojo_dep_version = Version::parse(dojo_dep_version).unwrap();
+ let dojo_dep_version = Version::parse(dojo_dep_version)
+ .map_err(|e| anyhow::anyhow!("Failed to parse dojo dependency version: {}", e))?;
...
- let dojo_req_version = VersionReq::parse(&format!(">={}", major_minor)).unwrap();
+ let dojo_req_version = VersionReq::parse(&format!(">={}", major_minor))
+ .map_err(|e| anyhow::anyhow!("Failed to parse required dojo version: {}", e))?; 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||
if !dojo_req_version.matches(&dojo_dep_version) { | ||||||||||||||||||||||||||||||||||||||||||||||
if let Ok(cp) = ws.current_package() { | ||||||||||||||||||||||||||||||||||||||||||||||
// Selected package. | ||||||||||||||||||||||||||||||||||||||||||||||
let path = if cp.id == package.id { | ||||||||||||||||||||||||||||||||||||||||||||||
package.manifest_path() | ||||||||||||||||||||||||||||||||||||||||||||||
} else { | ||||||||||||||||||||||||||||||||||||||||||||||
ws.manifest_path() | ||||||||||||||||||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||
anyhow::bail!( | ||||||||||||||||||||||||||||||||||||||||||||||
"Found dojo-core version mismatch: expected {}. Please verify your dojo \ | ||||||||||||||||||||||||||||||||||||||||||||||
dependency in {}", | ||||||||||||||||||||||||||||||||||||||||||||||
dojo_req_version, | ||||||||||||||||||||||||||||||||||||||||||||||
path | ||||||||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||||||||
} else { | ||||||||||||||||||||||||||||||||||||||||||||||
// Virtual workspace. | ||||||||||||||||||||||||||||||||||||||||||||||
anyhow::bail!( | ||||||||||||||||||||||||||||||||||||||||||||||
"Found dojo-core version mismatch: expected {}. Please verify your dojo \ | ||||||||||||||||||||||||||||||||||||||||||||||
dependency in {}", | ||||||||||||||||||||||||||||||||||||||||||||||
dojo_req_version, | ||||||||||||||||||||||||||||||||||||||||||||||
ws.manifest_path() | ||||||||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ohayo sensei! Please remove debug statements before committing code.
The use of
dbg!()
macro is intended for debugging purposes and should not be included in production code as it can clutter output and expose internal state.Apply this diff to remove the debug statements: