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.
This commit is contained in:
		
							
								
								
									
										3
									
								
								.changes/unreleased/Added-20241117-212435.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								.changes/unreleased/Added-20241117-212435.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -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
 | 
			
		||||
							
								
								
									
										37
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										37
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
								
							@@ -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"
 | 
			
		||||
 
 | 
			
		||||
@@ -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"
 | 
			
		||||
 
 | 
			
		||||
@@ -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<User>) -> 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(),
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user