Skip to content

Commit

Permalink
Merge pull request #13 from dcodesdev/staging
Browse files Browse the repository at this point in the history
CLI now checks for latest version
  • Loading branch information
dcodesdev authored Jun 4, 2024
2 parents 093d90e + 9d26570 commit 22f1f34
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 5 deletions.
7 changes: 4 additions & 3 deletions Cargo.lock

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

5 changes: 3 additions & 2 deletions crates/cli/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "rustfinity"
version = "0.2.7"
version = "0.2.8"
edition = "2021"
license = "MIT"
description = "Rustfinity.com CLI"
Expand All @@ -11,5 +11,6 @@ anyhow = "1.0.82"
clap = { version = "4.5.4", features = ["derive"] }
dload = "0.1.3"
futures = "0.3.30"
reqwest = "0.12.4"
reqwest = { version = "0.12.4", features = ["json"] }
serde_json = "1.0.117"
tokio = { version = "1.37.0", features = ["full"] }
34 changes: 34 additions & 0 deletions crates/cli/src/crates_io.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
pub async fn get_latest_version() -> anyhow::Result<String> {
let url = "https://crates.io/api/v1/crates/rustfinity";

let client = reqwest::ClientBuilder::new()
.user_agent("rustfinity")
.build()?;

let response = client.get(url).send().await?;
let json: serde_json::Value = response.json().await?;

let latest_version = json["crate"]["newest_version"]
.as_str()
.ok_or(anyhow::anyhow!("Failed to get latest version"))?;

Ok(latest_version.to_string())
}

#[cfg(test)]
mod tests {
use super::*;

#[tokio::test]
async fn test_get_latest_version() {
let version = get_latest_version().await.unwrap();
assert!(!version.is_empty());

// Expect the pattern to be "x.x.x" while x is a number
let mut version = version.split('.');
assert!(version.next().unwrap().parse::<u32>().is_ok());
assert!(version.next().unwrap().parse::<u32>().is_ok());
assert!(version.next().unwrap().parse::<u32>().is_ok());
assert!(version.next().is_none());
}
}
12 changes: 12 additions & 0 deletions crates/cli/src/main.rs
Original file line number Diff line number Diff line change
@@ -1,12 +1,24 @@
mod challenge;
mod cli;
mod crates_io;
mod download;

use clap::Parser;
use cli::{run, Cli};

#[tokio::main]
async fn main() -> anyhow::Result<()> {
let latest_version = crates_io::get_latest_version().await?;
let current_version = env!("CARGO_PKG_VERSION");

if latest_version != current_version {
println!(
"A new version of rustfinity ({}) is available, please run the following command and try again:\n\n$ cargo install rustfinity",
latest_version
);
return Ok(());
}

let cli = Cli::parse();
run(cli).await
}

0 comments on commit 22f1f34

Please sign in to comment.