-
Notifications
You must be signed in to change notification settings - Fork 1.8k
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: turbo info
command for debugging
#9368
base: main
Are you sure you want to change the base?
Conversation
The latest updates on your projects. Learn more about Vercel for Git ↗︎
8 Skipped Deployments
|
turbo info
command for debugging
@@ -475,9 +475,7 @@ impl Args { | |||
} | |||
} | |||
|
|||
/// Defines the subcommands for CLI. NOTE: If we change the commands in Go, |
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.
Unrelated, but saw it mentioning Go so ✂️
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.
Looks good! Just a couple notes
let package_manager = match PackageJson::load(&base.repo_root.join_component("package.json")) { | ||
Ok(package_json) => { | ||
match PackageManager::read_or_detect_package_manager(&package_json, &base.repo_root) { | ||
Ok(pm) => pm.to_string(), | ||
Err(_) => "Not found".to_owned(), | ||
} | ||
} | ||
Err(_) => "Not found".to_owned(), | ||
}; |
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.
Just some Rust code golf. I'd recommend manually committing this because Rustfmt will probably disagree with this formatting
let package_manager = match PackageJson::load(&base.repo_root.join_component("package.json")) { | |
Ok(package_json) => { | |
match PackageManager::read_or_detect_package_manager(&package_json, &base.repo_root) { | |
Ok(pm) => pm.to_string(), | |
Err(_) => "Not found".to_owned(), | |
} | |
} | |
Err(_) => "Not found".to_owned(), | |
}; | |
let package_manager = PackageJson::load(&base.repo_root.join_component("package.json")) | |
.and_then(|package_json| PackageManager::read_or_detect_package_manager(&package_json, &base.repo_root)) | |
.map_or_else(|_| "Not found".to_owned(), |pm| pm.to_string()); |
match info::run(base).await { | ||
Ok(()) => {} | ||
Err(_e) => panic!("`info` command failed."), | ||
} |
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.
We generally want to avoid panic
here and if we do panic, we should make sure to include the underlying error.
You can use ?
operator here to bubble up the error if you add a new variant to the cli error type here:
#[error(transparent)]
Info(#[from] info::Error),
match info::run(base).await { | |
Ok(()) => {} | |
Err(_e) => panic!("`info` command failed."), | |
} | |
info::run(base).await?; |
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.
Oh I recommended panic here because the previous message was to open a GitHub Issue and panic includes that advice
NoCurrentExe(#[from] io::Error), | ||
} | ||
|
||
pub async fn run(base: CommandBase) -> Result<(), Error> { |
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.
ITG (non blocking follow up): Separate the data from the display logic to make this more unit-test friendly and support additional output formats like JSON.
Something like:
struct TurboInfo {
package_manager: String,
daemon_status: String,
...
}
And then have turbo_info.print()
to actually write the data to stdout
if key == "TURBO_TEAM" | ||
|| key == "TURBO_TEAMID" | ||
|| key == "TURBO_TOKEN" | ||
|| key == "TURBO_API" |
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.
If we're considering TURBO_API
to be sensitive, we should also consider TURBO_LOGIN
to be sensitive.
println!("Turborepo System Environment Variables:"); | ||
for (key, value) in env::vars() { | ||
// Don't print sensitive information | ||
if key == "TURBO_TEAM" |
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.
TURBO_REMOTE_CACHE_SIGNATURE_KEY
should be added to this list of sensitive keys
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.
Maybe we should make this opt-in instead of opt-out?
Description
A command to provide debugging information for reproductions or otherwise understand a machine better. Output will look something close to this.
Testing Instructions
Try it out!