From 9f544c66c214b5bc51f1abd99bcd21ac440a814b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Fastr=C3=A9?= Date: Sun, 17 Nov 2024 21:24:41 +0100 Subject: [PATCH] Add "open" crate and automate browser opening for work packages Added the "open" crate to Cargo.toml and corresponding dependencies to Cargo.lock. Updated the code to automatically open the newly created work package in the browser and handle potential failure cases gracefully. --- .../unreleased/Added-20241117-212435.yaml | 3 ++ Cargo.lock | 37 +++++++++++++++++++ Cargo.toml | 1 + src/gitea/action.rs | 20 ++++++++-- 4 files changed, 57 insertions(+), 4 deletions(-) create mode 100644 .changes/unreleased/Added-20241117-212435.yaml diff --git a/.changes/unreleased/Added-20241117-212435.yaml b/.changes/unreleased/Added-20241117-212435.yaml new file mode 100644 index 0000000..e2dc681 --- /dev/null +++ b/.changes/unreleased/Added-20241117-212435.yaml @@ -0,0 +1,3 @@ +kind: Added +body: Open the newly create work package after the wp has been created +time: 2024-11-17T21:24:35.066038354+01:00 diff --git a/Cargo.lock b/Cargo.lock index c05560c..7271b55 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -111,6 +111,7 @@ dependencies = [ "clap", "gitlab", "log", + "open", "reqwest", "serde", "simple-home-dir", @@ -738,6 +739,15 @@ version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146" +[[package]] +name = "is-docker" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "928bae27f42bc99b60d9ac7334e3a21d10ad8f1835a4e12ec3ec0464765ed1b3" +dependencies = [ + "once_cell", +] + [[package]] name = "is-terminal" version = "0.4.5" @@ -750,6 +760,16 @@ dependencies = [ "windows-sys 0.45.0", ] +[[package]] +name = "is-wsl" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "173609498df190136aa7dea1a91db051746d339e18476eed5ca40521f02d7aa5" +dependencies = [ + "is-docker", + "once_cell", +] + [[package]] name = "itertools" version = "0.10.5" @@ -909,6 +929,17 @@ version = "1.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" +[[package]] +name = "open" +version = "5.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ecd52f0b8d15c40ce4820aa251ed5de032e5d91fab27f7db2f40d42a8bdf69c" +dependencies = [ + "is-wsl", + "libc", + "pathdiff", +] + [[package]] name = "openssl" version = "0.10.62" @@ -959,6 +990,12 @@ version = "6.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ceedf44fb00f2d1984b0bc98102627ce622e083e49a5bacdb3e514fa4238e267" +[[package]] +name = "pathdiff" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d61c5ce1153ab5b689d0c074c4e7fc613e942dfb7dd9eea5ab202d2ad91fe361" + [[package]] name = "percent-encoding" version = "2.2.0" diff --git a/Cargo.toml b/Cargo.toml index 2cd682c..bbcb807 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,3 +15,4 @@ url = "2.3.1" tokio = { version = "1.0.0", features = ["rt", "rt-multi-thread", "macros"] } simple-home-dir = "0.2.1" log = "0.4.17" +open = "5.3.1" diff --git a/src/gitea/action.rs b/src/gitea/action.rs index edd5aaf..5b0a0ae 100644 --- a/src/gitea/action.rs +++ b/src/gitea/action.rs @@ -32,11 +32,20 @@ impl Issue2WorkActionTrait for GiteaAction { .create_work_package(&work_package, &args.project_id) .await?; - println!( - "new work package created: {:?}, edit at {}/projects/{}/work_packages/{}", - work_package.subject, config.openproject.base_url, args.project_id, work_package.id + let url = format!( + "{}/projects/{}/work_packages/{}", + config.openproject.base_url, args.project_id, work_package.id ); + println!( + "new work package created: {:?}, edit at {}", + work_package.subject, url + ); + + if let Err(e) = open::that(url) { + println!("failed to open work package in browser: {}", e); + }; + Ok(()) } @@ -47,7 +56,10 @@ impl Issue2WorkActionTrait for GiteaAction { fn create_work_package_from_issue(issue: &Issue, assignee: Option) -> WorkPackageWriter { WorkPackageWriter { - subject: format!("{} ({}/{})", issue.title, issue.repository.full_name, issue.number), + subject: format!( + "{} ({}/{})", + issue.title, issue.repository.full_name, issue.number + ), work_type: "TASK".into(), description: crate::openproject::work::DescriptionWriter { format: "markdown".into(),