-
Notifications
You must be signed in to change notification settings - Fork 24
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Remove the build_time method, use source_date for clamping all packag…
…e times (#157) * Remove the build_time method and rename source_date to source_date_epoch * Introduce Timestamp type and make chrono dependency optional * Use source_date_epoch to clamp signature timestamps * Use impl Trait for arguments consistently * Add RPMPackage::sign_with_timestamp method
- Loading branch information
Showing
17 changed files
with
431 additions
and
436 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -29,34 +29,51 @@ This library does not build software like rpmbuild. It is meant for finished art | |
### Examples | ||
|
||
```rust | ||
use rpm; | ||
use rpm::signature::pgp::{Signer,Verifier}; | ||
use rpm::signature::pgp::{Signer, Verifier}; | ||
|
||
let raw_secret_key = std::fs::read("/path/to/gpg.secret.key")?; | ||
let raw_secret_key = std::fs::read("./test_assets/secret_key.asc")?; | ||
// It's recommended to use timestamp of last commit in your VCS | ||
let source_date = 1_600_000_000; | ||
let pkg = rpm::RPMBuilder::new("test", "1.0.0", "MIT", "x86_64", "some awesome package") | ||
.compression(rpm::CompressionType::Zstd) | ||
.with_file( | ||
"./awesome-config.toml", | ||
rpm::RPMFileOptions::new("/etc/awesome/config.toml").is_config(), | ||
)? | ||
// file mode is inherited from source file | ||
.with_file( | ||
"./awesome-bin", | ||
rpm::RPMFileOptions::new("/usr/bin/awesome"), | ||
)? | ||
.with_file( | ||
"./awesome-config.toml", | ||
// you can set a custom mode and custom user too | ||
rpm::RPMFileOptions::new("/etc/awesome/second.toml").mode(0o100744).user("hugo"), | ||
)? | ||
.pre_install_script("echo preinst") | ||
.add_changelog_entry("Max Mustermann <[email protected]>", "- was awesome, eh?", chrono::DateTime::parse_from_rfc2822("Wed, 19 April 2023 23:16:09 GMT")) | ||
.add_changelog_entry("Charlie Yom <[email protected]>", "- yeah, it was", chrono::DateTime::parse_from_rfc3339("1996-12-19T16:39:57-08:00")) | ||
.requires(rpm::Dependency::any("wget")) | ||
.vendor("corporation or individual") | ||
.url("www.github.com/repo") | ||
.vcs("git:repo=example_repo:branch=example_branch:sha=example_sha") | ||
.build_and_sign(Signer::load_from_asc_bytes(&raw_secret_key)?); | ||
.compression(rpm::CompressionType::Gzip) | ||
.with_file( | ||
"./test_assets/awesome.toml", | ||
rpm::RPMFileOptions::new("/etc/awesome/config.toml").is_config(), | ||
)? | ||
// file mode is inherited from source file | ||
.with_file( | ||
"./test_assets/awesome.py", | ||
rpm::RPMFileOptions::new("/usr/bin/awesome"), | ||
)? | ||
.with_file( | ||
"./test_assets/awesome.toml", | ||
// you can set a custom mode and custom user too | ||
rpm::RPMFileOptions::new("/etc/awesome/second.toml") | ||
.mode(rpm::FileMode::regular(0o644)) | ||
.user("hugo"), | ||
)? | ||
.pre_install_script("echo preinst") | ||
// If you don't need reproducible builds, | ||
// you can remove the following line | ||
.source_date(source_date) | ||
.build_host(gethostname::gethostname().to_str().unwrap_or("host")) | ||
.add_changelog_entry( | ||
"Max Mustermann <[email protected]> - 0.1-29", | ||
"- was awesome, eh?", | ||
chrono::DateTime::parse_from_rfc2822("Wed, 19 Apr 2023 23:16:09 GMT") | ||
.expect("Date 1 is correct. qed"), | ||
) | ||
.add_changelog_entry( | ||
"Charlie Yom <[email protected]> - 0.1-28", | ||
"- yeah, it was", | ||
// Raw timestamp for 1996-08-14 05:20:00 | ||
840_000_000, | ||
) | ||
.requires(rpm::Dependency::any("wget")) | ||
.vendor("corporation or individual") | ||
.url("www.github.com/repo") | ||
.vcs("git:repo=example_repo:branch=example_branch:sha=example_sha") | ||
.build_and_sign(Signer::load_from_asc_bytes(&raw_secret_key)?)?; | ||
|
||
pkg.write_file("./awesome.rpm")?; | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -12,7 +12,6 @@ | |
//! Signer, | ||
//! Verifier | ||
//! }, | ||
//! chrono::TimeZone, | ||
//! }; | ||
//! use std::str::FromStr; | ||
//! | ||
|
@@ -21,48 +20,54 @@ | |
//! # #[cfg(feature = "signature-pgp")] | ||
//! # { | ||
//! let raw_secret_key = std::fs::read("./test_assets/secret_key.asc")?; | ||
//! // Use date of last commit in your VCS for reproducible builds | ||
//! let source_date = chrono::Utc::now(); | ||
//! // It's recommended to use timestamp of last commit in your VCS | ||
//! let source_date = 1_600_000_000; | ||
//! let pkg = rpm::RPMBuilder::new("test", "1.0.0", "MIT", "x86_64", "some awesome package") | ||
//! .compression(rpm::CompressionType::Gzip) | ||
//! .with_file( | ||
//! "./test_assets/awesome.toml", | ||
//! rpm::RPMFileOptions::new("/etc/awesome/config.toml") | ||
//! .is_config(), | ||
//! )? | ||
//! // file mode is inherited from source file | ||
//! .with_file( | ||
//! "./test_assets/awesome.py", | ||
//! rpm::RPMFileOptions::new("/usr/bin/awesome"), | ||
//! )? | ||
//! .with_file( | ||
//! "./test_assets/awesome.toml", | ||
//! // you can set a custom mode and custom user too | ||
//! rpm::RPMFileOptions::new("/etc/awesome/second.toml") | ||
//! .mode(rpm::FileMode::regular(0o644)) | ||
//! .user("hugo"), | ||
//! )? | ||
//! .pre_install_script("echo preinst") | ||
//! // You can remove the following two methods, | ||
//! // if you don't need reproducible builds | ||
//! .build_time(source_date) | ||
//! .source_date(source_date) | ||
//! .build_host(gethostname::gethostname().to_str().expect("Hostname works. qed").to_string()) | ||
//! .add_changelog_entry("Max Mustermann <[email protected]> - 0.1-29", "- was awesome, eh?", chrono::DateTime::parse_from_rfc2822("Wed, 19 Apr 2023 23:16:09 GMT").expect("Date 1 is correct. qed")) | ||
//! .add_changelog_entry("Charlie Yom <[email protected]> - 0.1-28", "- yeah, it was", chrono::DateTime::parse_from_rfc3339("1996-12-19T16:39:57-08:00").expect("Date 2 is corrrect. qed")) | ||
//! .requires(rpm::Dependency::any("wget")) | ||
//! .vendor("corporation or individual") | ||
//! .url("www.github.com/repo") | ||
//! .vcs("git:repo=example_repo:branch=example_branch:sha=example_sha") | ||
//! .build_and_sign( | ||
//! Signer::load_from_asc_bytes(&raw_secret_key)? | ||
//! )?; | ||
//! let mut f = std::fs::File::create("./target/awesome.rpm")?; | ||
//! .compression(rpm::CompressionType::Gzip) | ||
//! .with_file( | ||
//! "./test_assets/awesome.toml", | ||
//! rpm::RPMFileOptions::new("/etc/awesome/config.toml").is_config(), | ||
//! )? | ||
//! // file mode is inherited from source file | ||
//! .with_file( | ||
//! "./test_assets/awesome.py", | ||
//! rpm::RPMFileOptions::new("/usr/bin/awesome"), | ||
//! )? | ||
//! .with_file( | ||
//! "./test_assets/awesome.toml", | ||
//! // you can set a custom mode and custom user too | ||
//! rpm::RPMFileOptions::new("/etc/awesome/second.toml") | ||
//! .mode(rpm::FileMode::regular(0o644)) | ||
//! .user("hugo"), | ||
//! )? | ||
//! .pre_install_script("echo preinst") | ||
//! // If you don't need reproducible builds, | ||
//! // you can remove the following line | ||
//! .source_date(source_date) | ||
//! .build_host(gethostname::gethostname().to_str().unwrap_or("host")) | ||
//! .add_changelog_entry( | ||
//! "Max Mustermann <[email protected]> - 0.1-29", | ||
//! "- was awesome, eh?", | ||
//! chrono::DateTime::parse_from_rfc2822("Wed, 19 Apr 2023 23:16:09 GMT") | ||
//! .expect("Date 1 is correct. qed"), | ||
//! ) | ||
//! .add_changelog_entry( | ||
//! "Charlie Yom <[email protected]> - 0.1-28", | ||
//! "- yeah, it was", | ||
//! // Raw timestamp for 1996-08-14 05:20:00 | ||
//! 840_000_000, | ||
//! ) | ||
//! .requires(rpm::Dependency::any("wget")) | ||
//! .vendor("corporation or individual") | ||
//! .url("www.github.com/repo") | ||
//! .vcs("git:repo=example_repo:branch=example_branch:sha=example_sha") | ||
//! .build_and_sign(Signer::load_from_asc_bytes(&raw_secret_key)?)?; | ||
//! let mut f = std::fs::File::create("/tmp/awesome.rpm")?; | ||
//! pkg.write(&mut f)?; | ||
//! | ||
//! // reading | ||
//! let raw_pub_key = std::fs::read("./test_assets/public_key.asc")?; | ||
//! let pkg = rpm::RPMPackage::open("./target/awesome.rpm")?; | ||
//! let raw_pub_key = std::fs::read("test_assets/public_key.asc")?; | ||
//! let pkg = rpm::RPMPackage::open("/tmp/awesome.rpm")?; | ||
//! // verifying | ||
//! pkg.verify_signature(Verifier::load_from_asc_bytes(&raw_pub_key)?)?; | ||
//! # } | ||
|
Oops, something went wrong.