WIP: Deb upload, todos, and errata
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
use std::{fs, path::Path};
|
||||
|
||||
use crate::structs::package::{Package, PackageType};
|
||||
|
||||
/// Gets all packages of an owner
|
||||
@@ -42,3 +44,73 @@ pub fn get_latest_package_version() {}
|
||||
pub fn link_package() {}
|
||||
pub fn unlink_package() {}
|
||||
pub fn search_packages() {}
|
||||
|
||||
|
||||
/// Upload a Debian package and link it to it's source repository
|
||||
fn upload_debian(
|
||||
client: &reqwest::Client,
|
||||
gitea_url: &str,
|
||||
repo: &str,
|
||||
file: &Path,
|
||||
owner: &str,
|
||||
distribution: &str,
|
||||
component: &str,
|
||||
) -> crate::Result<()> {
|
||||
let request_url = format!("{gitea_url}/api/packages/{owner}/debian/pool/{distribution}/{component}/upload");
|
||||
match file.try_exists() {
|
||||
Ok(true) => (),
|
||||
Ok(false) => return Err(crate::Error::NoSuchFile),
|
||||
Err(e) => {
|
||||
eprintln!("Uh oh! The file-exists check couldn't be done: {e}");
|
||||
panic!(
|
||||
"TODO: Deal with scenario where the file's existence cannot be checked (e.g.: no permission)"
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
let data = reqwest::multipart::Part::stream(fs::read(&file).unwrap())
|
||||
.file_name("deb-pkg")
|
||||
.mime_str("text/plain")?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Uploads a package file to the Gitea registry.
|
||||
///
|
||||
/// This route is not documented in Swagger. The reason seems to be that some
|
||||
/// package managers have their own upload protocol (e.g. `docker push`). Gitea
|
||||
/// implements it but does not define it, so it doesn't include the API docs.
|
||||
pub fn upload_package(
|
||||
client: &reqwest::Client,
|
||||
gitea_url: &str,
|
||||
file: String, // TODO: Use a path buffer of some flavor.
|
||||
) {
|
||||
let request_url = format!("{gitea_url}/{}", route_for_upload(PackageType::Debian));
|
||||
}
|
||||
|
||||
fn route_for_upload(kind: PackageType) -> &'static str {
|
||||
match kind {
|
||||
PackageType::Alpine => "https://gitea.example.com/api/packages/{owner}/alpine/{branch}/{repository}",
|
||||
PackageType::Arch => "api/packages/{owner}/arch/{repository}",
|
||||
PackageType::Cargo => todo!(),
|
||||
PackageType::Chef => todo!(),
|
||||
PackageType::Composer => todo!(),
|
||||
PackageType::Conan => todo!(),
|
||||
PackageType::Conda => todo!(),
|
||||
PackageType::Container => todo!(),
|
||||
PackageType::Cran => todo!(),
|
||||
PackageType::Debian => "https://gitea.example.com/api/packages/{owner}/debian/pool/{distribution}/{component}/upload",
|
||||
PackageType::Generic => todo!(),
|
||||
PackageType::Go => todo!(),
|
||||
PackageType::Helm => todo!(),
|
||||
PackageType::Maven => todo!(),
|
||||
PackageType::Npm => todo!(),
|
||||
PackageType::Nuget => todo!(),
|
||||
PackageType::Pub => todo!(),
|
||||
PackageType::PyPi => todo!(),
|
||||
PackageType::Rpm => todo!(),
|
||||
PackageType::RubyGems => todo!(),
|
||||
PackageType::Swift => todo!(),
|
||||
PackageType::Vagrant => todo!(),
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user