Skip to content

Commit

Permalink
Merge pull request #30 from tofay/zstd-no-tar
Browse files Browse the repository at this point in the history
allow users to get ZstdLayerWriter directly
  • Loading branch information
ariel-miculas authored Oct 4, 2024
2 parents fbfffd2 + c3a9e5c commit 111ed71
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 30 deletions.
8 changes: 4 additions & 4 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,12 @@ 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
run: cargo test --all-targets --all-features
# https://github.com/rust-lang/cargo/issues/6669
- name: cargo test --doc
run: cargo test --doc
run: cargo test --doc --all-features
linting:
name: Lints, pinned toolchain
runs-on: ubuntu-latest
Expand All @@ -56,4 +56,4 @@ jobs:
- name: cargo fmt (check)
run: cargo fmt -- --check -l
- name: cargo clippy (warnings)
run: cargo clippy --all-targets -- -D warnings
run: cargo clippy --all-targets --all-features -- -D warnings
1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ zstd = { version = "0.13.2", optional = true }

[dev-dependencies]
anyhow = "1.0.89"
cap-tempfile = "3.3.0"

[features]
zstd = ["dep:zstd"]
Expand Down
24 changes: 15 additions & 9 deletions examples/zstd.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,34 +2,40 @@
fn main() {
use std::{env, path::PathBuf};

use cap_tempfile::TempDir;
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();
use ocidir::{new_empty_manifest, OciDir};
let dir = TempDir::new(ocidir::cap_std::ambient_authority()).unwrap();
let oci_dir = OciDir::ensure(dir.try_clone().unwrap()).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
26 changes: 9 additions & 17 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> {
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,8 @@ impl OciDir {
&self,
compression_level: Option<i32>,
n_workers: u32,
) -> Result<tar::Builder<ZstdLayerWriter>> {
Ok(tar::Builder::new(ZstdLayerWriter::multithread(
&self.dir,
compression_level,
n_workers,
)?))
) -> Result<ZstdLayerWriter> {
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 111ed71

Please sign in to comment.