Some but not all of the upload routine
This commit is contained in:
@@ -5,7 +5,7 @@ edition = "2024"
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
clap = { version = "4.0.7", features = ["derive", "env"] }
|
clap = { version = "4.0.7", features = ["derive", "env"] }
|
||||||
reqwest = { version = "0.11.13", features = ["json"] }
|
reqwest = { version = "0.11.13", features = ["json", "stream", "multipart"] }
|
||||||
serde = { version = "1.0.152", features = ["derive"] }
|
serde = { version = "1.0.152", features = ["derive"] }
|
||||||
tokio = { version = "1.24.2", features = ["macros", "rt-multi-thread"] }
|
tokio = { version = "1.24.2", features = ["macros", "rt-multi-thread"] }
|
||||||
|
|
||||||
|
|||||||
74
src/main.rs
74
src/main.rs
@@ -1,7 +1,12 @@
|
|||||||
use gt_tools::CreateReleaseOption;
|
use gt_tools::CreateReleaseOption;
|
||||||
use gt_tools::{ReleaseInfo, cli::Args};
|
use gt_tools::{ReleaseInfo, cli::Args};
|
||||||
|
use reqwest::multipart::Part;
|
||||||
|
|
||||||
use std::env;
|
use std::collections::HashMap;
|
||||||
|
use std::{
|
||||||
|
env,
|
||||||
|
fs
|
||||||
|
};
|
||||||
|
|
||||||
use clap::Parser;
|
use clap::Parser;
|
||||||
|
|
||||||
@@ -49,9 +54,18 @@ async fn main() -> Result<(), Error> {
|
|||||||
println!("Release Tag: {tag_name}");
|
println!("Release Tag: {tag_name}");
|
||||||
println!("Creating?: {create}");
|
println!("Creating?: {create}");
|
||||||
println!("Files...");
|
println!("Files...");
|
||||||
for file in files {
|
for file in &files {
|
||||||
println!("--- {file}");
|
println!("--- {file}");
|
||||||
}
|
}
|
||||||
|
// TODO: Pre-create the release, if it doesn't exist.
|
||||||
|
// TODO: Find an existing release and use it's ID, if it does
|
||||||
|
do_upload_release(
|
||||||
|
&client,
|
||||||
|
&args.gitea_url,
|
||||||
|
&args.repo,
|
||||||
|
52usize,
|
||||||
|
files
|
||||||
|
).await?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -110,3 +124,59 @@ async fn do_create_release(
|
|||||||
println!("{:?}", result);
|
println!("{:?}", result);
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async fn do_upload_release(
|
||||||
|
client: &reqwest::Client,
|
||||||
|
gitea_url: &str,
|
||||||
|
repo: &str,
|
||||||
|
release_id: usize,
|
||||||
|
files: Vec<String>,
|
||||||
|
) -> Result<(), Error> {
|
||||||
|
let token = env::var("RELEASE_KEY_GITEA").expect(
|
||||||
|
"You must set the RELEASE_KEY_GITEA environment variable so the Gitea API can be used.",
|
||||||
|
);
|
||||||
|
let request_url = format!(
|
||||||
|
"{gitea_url}{front}{repo}{back}/{id}/assets",
|
||||||
|
front = API_RELEASE_FRONT,
|
||||||
|
back = API_RELEASE_BACK,
|
||||||
|
id = release_id
|
||||||
|
);
|
||||||
|
// Setup a "partial request". I'll need to loop over the files, so I'll
|
||||||
|
// clone this a bunch of times for each one
|
||||||
|
let partial_request = client
|
||||||
|
.post(request_url)
|
||||||
|
.header(USER_AGENT, "gt-tools-test-agent")
|
||||||
|
.header(ACCEPT, "application/json")
|
||||||
|
// .header("Content-Type", "multipart/form-data")
|
||||||
|
.header("Authorization", format!("token {}", token));
|
||||||
|
|
||||||
|
// Ensure all files exists before starting the uploads
|
||||||
|
for file in &files {
|
||||||
|
assert!(fs::exists(file)
|
||||||
|
.expect(&format!("Can't check existence of {file}"))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
for file in files {
|
||||||
|
if let Some(request) = partial_request.try_clone() {
|
||||||
|
println!("Uploading file {}", &file);
|
||||||
|
let data = reqwest::multipart::Part::stream(fs::read(&file).unwrap())
|
||||||
|
.file_name("attachment")
|
||||||
|
.mime_str("text/plain")?;
|
||||||
|
|
||||||
|
let form= reqwest::multipart::Form::new()
|
||||||
|
.part("attachment", data);
|
||||||
|
|
||||||
|
let request = request
|
||||||
|
.multipart(form)
|
||||||
|
.query(&[("name", &file)]);
|
||||||
|
dbg!(&request);
|
||||||
|
let response = request.send().await?;
|
||||||
|
dbg!(&response);
|
||||||
|
dbg!(&response.text().await?);
|
||||||
|
} else {
|
||||||
|
panic!("Failed to clone the RequestBuilder during file upload loop.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user