Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 15 additions & 4 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ name = "rnk"
description = "A command line interface to the Renku platform"
homepage = "https://renkulab.io/"
version = "0.1.0-nightly"
edition = "2021"
edition = "2024"
license = "Apache-2.0"
repository = "https://github.com/SwissDatascienceCenter/renku-cli"
keywords = [ "renku", "cli" ]
Expand Down Expand Up @@ -34,6 +34,7 @@ url = { version = "2.5.1" }
openidconnect = { version = "3.5.0", default-features = false, features = [ "reqwest" ] }
directories = { version = "5.0" }
comrak = { version = "0.28.0", optional = true }
clap-verbosity-flag = "3.0.4"

[features]
default = ["reqwest/default-tls"] # link against system library
Expand Down
2 changes: 1 addition & 1 deletion rustfmt.toml
Original file line number Diff line number Diff line change
@@ -1 +1 @@
edition = "2021"
edition = "2024"
2 changes: 1 addition & 1 deletion src/cli/cmd.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ pub mod version;
use super::sink::{Error as SinkError, Sink};
use crate::cli::opts::{CommonOpts, ProxySetting};
use crate::data::renku_url::RenkuUrl;
use crate::httpclient::{self, proxy, Client};
use crate::httpclient::{self, Client, proxy};
use serde::Serialize;
use snafu::{ResultExt, Snafu};

Expand Down
2 changes: 1 addition & 1 deletion src/cli/cmd/login.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
use std::path::{Path, PathBuf};

use super::Context;
use crate::httpclient::auth::{Response, UserCode};
use crate::httpclient::Error as HttpError;
use crate::httpclient::auth::{Response, UserCode};
use crate::{cli::sink::Error as SinkError, data::simple_message::SimpleMessage};
use clap::{Parser, ValueHint};

Expand Down
7 changes: 5 additions & 2 deletions src/cli/cmd/project/clone.rs
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,10 @@ impl Input {
pub async fn exec(&self, ctx: Context) -> Result<(), Error> {
let opt_details = ctx
.client
.get_project(&self.project_ref, ctx.opts.verbose > 1)
.get_project(
&self.project_ref,
ctx.opts.verbosity.log_level().unwrap_or(log::Level::Warn) > log::Level::Info,
)
.await
.context(HttpClientSnafu)?;
if let Some(details) = opt_details {
Expand Down Expand Up @@ -169,7 +172,7 @@ async fn clone_repository(
.await
.context(TaskJoinSnafu)?;
let git_repo = repo?;
if ctx.opts.verbose > 1 {
if ctx.opts.verbosity.log_level().unwrap_or(log::Level::Warn) > log::Level::Info {
let head = git_repo
.head()
.ok()
Expand Down
6 changes: 3 additions & 3 deletions src/cli/cmd/shell_completion.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use clap::{Command, Parser, ValueEnum};
use clap_complete::{generate, Generator, Shell};
use clap_complete::{Generator, Shell, generate};

/// Generates completions for some shells.
///
Expand Down Expand Up @@ -37,6 +37,6 @@ impl Input {
}
}

fn generate_completions<G: Generator>(gen: G, binary: &str, app: &mut Command) {
generate(gen, app, binary, &mut std::io::stdout());
fn generate_completions<G: Generator>(generator: G, binary: &str, app: &mut Command) {
generate(generator, app, binary, &mut std::io::stdout());
}
8 changes: 5 additions & 3 deletions src/cli/cmd/version.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
use super::Context;
use crate::cli::BuildInfo;
use crate::cli::sink::Error as SinkError;
use crate::cli::sink::Sink;
use crate::cli::BuildInfo;
use crate::httpclient::data::VersionInfo;
use crate::httpclient::Error as HttpError;
use crate::httpclient::data::VersionInfo;
use clap::Parser;
use serde::Serialize;
use snafu::{ResultExt, Snafu};
Expand Down Expand Up @@ -38,7 +38,9 @@ impl Input {
} else {
let result = ctx
.client
.version(ctx.opts.verbose > 1)
.version(
ctx.opts.verbosity.log_level().unwrap_or(log::Level::Warn) > log::Level::Info,
)
.await
.context(HttpClientSnafu)?;
let urlstr = ctx.renku_url().as_str();
Expand Down
7 changes: 4 additions & 3 deletions src/cli/opts.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
use crate::data::renku_url::RenkuUrl;

use super::cmd::*;
use clap::{ArgAction, Parser, ValueEnum, ValueHint};
use clap::{Parser, ValueEnum, ValueHint};
use clap_verbosity_flag::{Verbosity, WarnLevel};
use serde::{Deserialize, Serialize};
use std::str::FromStr;

Expand All @@ -12,8 +13,8 @@ use std::str::FromStr;
pub struct CommonOpts {
/// Be more verbose when logging. Verbosity increases with each
/// occurence of that option.
#[arg(short, long, action = ArgAction::Count)]
pub verbose: u8,
#[command(flatten)]
pub verbosity: Verbosity<WarnLevel>,

/// How to format the output. The default is human readable which
/// may choose to not show every detail for better readability.
Expand Down
30 changes: 3 additions & 27 deletions src/main.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
use rnk::error::{Error, Result};
use std::env;
use std::process;

const LOG_LEVEL: &str = "RUST_LOG";

#[tokio::main]
async fn main() {
let error_style = console::Style::new().red().bright();
Expand All @@ -16,36 +13,15 @@ async fn main() {

async fn execute() -> Result<()> {
let opts = rnk::read_args();
let remove_env = match opts.common_opts.verbose {
1 => set_log_level("info"),
n => {
if n > 1 {
set_log_level("debug")
} else {
false
}
}
};
env_logger::init();
env_logger::Builder::new()
.filter_level(opts.common_opts.verbosity.log_level_filter())
.init();

let result = rnk::execute_cmd(opts).await;
if remove_env {
env::remove_var(LOG_LEVEL);
}
result?;
Ok(())
}

fn set_log_level(level: &str) -> bool {
let current = env::var_os(LOG_LEVEL);
if current.is_none() {
env::set_var(LOG_LEVEL, level);
true
} else {
false
}
}

fn exit_code(err: &Error) -> i32 {
match err {
Error::Cmd { source: _ } => 1,
Expand Down
15 changes: 8 additions & 7 deletions src/project_config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -70,14 +70,15 @@ impl RenkuProjectConfig {
}

pub fn write(&self, file: &Path) -> Result<(), ProjectConfigError> {
if !file.exists() {
if let Some(dir) = file.parent() {
std::fs::create_dir_all(dir).map_err(|e| ProjectConfigError::WriteFile {
source: e,
path: file.to_path_buf(),
})?;
}
if !file.exists()
&& let Some(dir) = file.parent()
{
std::fs::create_dir_all(dir).map_err(|e| ProjectConfigError::WriteFile {
source: e,
path: file.to_path_buf(),
})?;
}

let cnt = toml::to_string(self).map_err(|e| ProjectConfigError::WriteToml {
source: e,
path: file.to_path_buf(),
Expand Down
2 changes: 1 addition & 1 deletion src/util/file.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use futures::TryStreamExt;
use futures::{stream, Stream, StreamExt};
use futures::{Stream, StreamExt, stream};
use serde::Serialize;
use std::fmt;
use std::io;
Expand Down
Loading