Skip to content

Commit

Permalink
Fix SDK version parsing (railwayapp#795)
Browse files Browse the repository at this point in the history
  • Loading branch information
Milo123459 committed Feb 16, 2023
1 parent 9ecc5ba commit 538e9ed
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 23 deletions.
45 changes: 23 additions & 22 deletions src/providers/csharp.rs
Original file line number Diff line number Diff line change
Expand Up @@ -72,28 +72,29 @@ impl Provider for CSharpProvider {

impl CSharpProvider {
fn get_sdk_version(app: &App, env: &Environment) -> Result<String> {
// First check for an SDK version environment variable
if let Some(version) = env.get_config_variable("CSHARP_SDK_VERSION") {
if let Some((major, minor)) = &version[0..3].split_once('.') {
return Ok(format!("dotnet-sdk_{major}_{minor}"));
}
}

// Then check for a global.json and see if we can get the sdk version from there
if app.includes_file("global.json") {
// Check if a version is specified in global.json
let global_json = if app.includes_file("global.json") {
let global_json: CSharpGlobalJson = app.read_json("global.json")?;

if let Some(sdk) = global_json.sdk {
if let Some(version) = sdk.version {
if let Some((major, minor)) = &version[0..3].split_once('.') {
return Ok(format!("dotnet-sdk_{major}_{minor}"));
}
}
}
global_json.sdk.and_then(|sdk| sdk.version)
} else {
None
};
// Use environment variable then global_json then default to 6
let version_string = env
.get_config_variable("CSHARP_SDK_VERSION")
.or(global_json)
.or(Some(String::from("6")));
let version_number: u8 = version_string
.unwrap()
.split('.')
.next()
.unwrap()
.parse()
.unwrap_or(6); // split by '.', get first item, attempt to parse to u8, if not default to 6
match version_number {
6 => Ok("dotnet-sdk".to_string()),
_ => Ok(format!("dotnet-sdk_{version_number}")),
}

// Fall back to default sdk
Ok("dotnet-sdk".to_string())
}
}

Expand All @@ -119,7 +120,7 @@ mod test {

#[test]
fn test_global_json() -> Result<()> {
let expected_sdk_name = "dotnet-sdk_7_0";
let expected_sdk_name = "dotnet-sdk_7";
assert_eq!(
CSharpProvider::get_sdk_version(
&App::new("./examples/csharp-api")?,
Expand All @@ -133,7 +134,7 @@ mod test {

#[test]
fn test_version_from_environment_variable() -> Result<()> {
let expected_sdk_name = "dotnet-sdk_6_0";
let expected_sdk_name = "dotnet-sdk";
assert_eq!(
CSharpProvider::get_sdk_version(
&App::new("./examples/csharp-cli")?,
Expand Down
2 changes: 1 addition & 1 deletion tests/snapshots/generate_plan_tests__csharp_api.snap
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ expression: plan
"setup": {
"name": "setup",
"nixPkgs": [
"dotnet-sdk_7_0"
"dotnet-sdk_7"
],
"nixOverlays": [],
"nixpkgsArchive": "[archive]"
Expand Down

0 comments on commit 538e9ed

Please sign in to comment.