Skip to content

Commit

Permalink
allow users to get zstdlayerwriter directly
Browse files Browse the repository at this point in the history
Signed-off-by: Tom Fay <tomfay@microsoft.com>
  • Loading branch information
tofay committed Oct 1, 2024
1 parent fbfffd2 commit bdc4fbf
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 22 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ jobs:
- name: Cache build artifacts
uses: Swatinem/rust-cache@v2
- name: cargo build
run: cargo build --all-targets
run: cargo build --all-targets --all-features
- name: cargo test
run: cargo test --all-targets
# https://github.com/rust-lang/cargo/issues/6669
Expand Down
19 changes: 12 additions & 7 deletions examples/zstd.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,31 +5,36 @@ fn main() {
use oci_spec::image::Platform;
use ocidir::{cap_std::fs::Dir, new_empty_manifest, OciDir};
let dir = Dir::open_ambient_dir(env::temp_dir(), ocidir::cap_std::ambient_authority()).unwrap();
let oci_dir = OciDir::ensure(&dir).unwrap();
let oci_dir = OciDir::ensure(dir).unwrap();

let mut manifest = new_empty_manifest().build().unwrap();
let mut config = ocidir::oci_spec::image::ImageConfigurationBuilder::default()
.build()
.unwrap();

// Add the src as a layer
let mut writer = oci_dir.create_layer_zstd(Some(0)).unwrap();
writer
let writer = oci_dir.create_layer_zstd(Some(0)).unwrap();
let mut builder = tar::Builder::new(writer);
builder.follow_symlinks(false);

builder
.append_dir_all(".", PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("src"))
.unwrap();

let layer = writer.into_inner().unwrap().complete().unwrap();
let layer = builder.into_inner().unwrap().complete().unwrap();
oci_dir.push_layer(&mut manifest, &mut config, layer, "src", None);

// Add the examples as a layer, using multithreaded compression
let mut writer = oci_dir.create_layer_zstd_multithread(Some(0), 4).unwrap();
writer
let writer = oci_dir.create_layer_zstd_multithread(Some(0), 4).unwrap();
let mut builder = tar::Builder::new(writer);
builder.follow_symlinks(false);
builder
.append_dir_all(
".",
PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("examples"),
)
.unwrap();
let layer = writer.into_inner().unwrap().complete().unwrap();
let layer = builder.into_inner().unwrap().complete().unwrap();
oci_dir.push_layer(&mut manifest, &mut config, layer, "examples", None);

println!(
Expand Down
24 changes: 10 additions & 14 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -276,22 +276,18 @@ impl OciDir {
}

#[cfg(feature = "zstd")]
/// Create a tar output stream, backed by a zstd compressed blob
/// Create a writer for a new zstd+tar blob; the contents
/// are not parsed, but are expected to be a tarball.
///
/// This method is only available when the `zstd` feature is enabled.
pub fn create_layer_zstd(
&self,
compression_level: Option<i32>,
) -> Result<tar::Builder<ZstdLayerWriter>> {
Ok(tar::Builder::new(ZstdLayerWriter::new(
&self.dir,
compression_level,
)?))
pub fn create_layer_zstd(&self, compression_level: Option<i32>) -> Result<ZstdLayerWriter> {
Ok(ZstdLayerWriter::new(&self.dir, compression_level)?)
}

#[cfg(feature = "zstdmt")]
/// Create a tar output stream, backed by a zstd compressed blob
/// using multithreaded compression.
/// Create a writer for a new zstd+tar blob; the contents
/// are not parsed, but are expected to be a tarball.
/// The compression is multithreaded.
///
/// The `n_workers` parameter specifies the number of threads to use for compression, per
/// [zstd::Encoder::multithread]]
Expand All @@ -301,12 +297,12 @@ impl OciDir {
&self,
compression_level: Option<i32>,
n_workers: u32,
) -> Result<tar::Builder<ZstdLayerWriter>> {
Ok(tar::Builder::new(ZstdLayerWriter::multithread(
) -> Result<ZstdLayerWriter> {
Ok(ZstdLayerWriter::multithread(
&self.dir,
compression_level,
n_workers,
)?))
)?)
}

/// Add a layer to the top of the image stack. The firsh pushed layer becomes the root.
Expand Down

0 comments on commit bdc4fbf

Please sign in to comment.