| Crates.io | release-dep |
| lib.rs | release-dep |
| version | 0.1.0 |
| created_at | 2025-08-19 04:18:57.507612+00 |
| updated_at | 2025-08-19 04:18:57.507612+00 |
| description | A Rust library for fetching and downloading release binaries from multiple Git repositories (GitHub and Gitee) with semver version matching. |
| homepage | |
| repository | https://github.com/drivercraft/release-dep |
| max_upload_size | |
| id | 1801349 |
| size | 72,176 |
A Rust library for fetching and downloading release binaries from multiple Git repositories (GitHub and Gitee) with semantic version matching.
Add this to your Cargo.toml:
[dependencies]
release-dep = "0.1.0"
use release_dep::{Config, get_release};
use std::time::Duration;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let config = Config {
package: "your-package-name",
version: "^1.0.0", // semver requirement
repo: &[
"https://github.com/owner/repo",
"https://gitee.com/owner/repo",
],
download_dir: Some("./downloads"),
timeout: Some(Duration::from_secs(30)),
};
match get_release(config) {
Ok(release_dep) => {
println!("Found release:");
println!(" Name: {}", release_dep.name);
println!(" Version: {}", release_dep.version);
println!(" Binary: {:?}", release_dep.binary);
}
Err(e) => {
println!("Error: {e}");
}
}
Ok(())
}
The Config struct accepts the following parameters:
package: The name of the package/binary to search forversion: A semver requirement string (e.g., "^1.0.0", ">=0.2.0", "1.2.3")repo: An array of repository URLs in order of prioritydownload_dir: Optional download directory (defaults to system temp directory)timeout: Optional timeout duration (defaults to no timeout)https://github.com/owner/repohttps://gitee.com/owner/repoThe library supports full semver requirements:
"1.0.0""^1.0.0" (compatible with 1.x.x)"~1.0.0" (compatible with 1.0.x)">=1.0.0, <2.0.0""*" (any version)use release_dep::{Config, get_release};
let config = Config {
package: "my-binary",
version: "0.2.0",
repo: &["https://github.com/owner/repo"],
download_dir: Some("./downloads"),
timeout: None,
};
let release = get_release(config)?;
use release_dep::{Config, get_release};
use std::time::Duration;
let config = Config {
package: "my-binary",
version: "^1.0.0",
repo: &[
"https://gitee.com/owner/repo", // Try Gitee first
"https://github.com/owner/repo", // Fallback to GitHub
],
download_dir: Some("./target/downloads"),
timeout: Some(Duration::from_secs(30)),
};
let release = get_release(config)?;
ReleaseDep with download informationThe get_release function returns a ReleaseDep struct:
pub struct ReleaseDep {
pub name: String, // Package name
pub version: Version, // Exact version found
pub binary: PathBuf, // Path to downloaded binary
}
The library returns detailed error messages for common scenarios:
This project is licensed under the MIT License - see the LICENSE file for details.
Contributions are welcome! Please feel free to submit a Pull Request.