oci-tar-builder 0.4.0

Library that can be used to build OCI tar archives
Documentation
## OCI Tar Builder

This is a library that can be used to build OCI tar archives. It is used by the `wasi-demo-app` crate to build the OCI tar archive that is used to run the demo app.
The current implementation is to support encapsulating the `wasi-demo-app` wasm module as an OCI tar.

### Contributing

We welcome contributions to this to make it more robust, useful, and generally better.

### Library Usage

The library is currently not published to crates.io, so you will need to add the following to your `Cargo.toml`:

```toml
[dependencies]
oci-tar-builder = { git = "https://github.com/containerd/runwasi.git" }
```

See [wasi-demo-app build script](../wasi-demo-app/build.rs) for an example.

### Executable usage

There is an experimental executable that uses the library and can package a wasm module as an OCI image with wasm layers.  See the [OCI WASM in containerd](https://docs.google.com/document/d/11shgC3l6gplBjWF1VJCWvN_9do51otscAm0hBDGSSAc) for more information.

To generate the package and import to a registry using a tool such as [regctl](https://github.com/regclient/regclient/blob/main/docs/regctl.md#image-commands): 

```
cargo run --bin oci-tar-builder -- --name wasi-demo-oci --repo ghcr.io/containerd/runwasi --tag latest --module ./target/wasm32-wasi/debug/wasi-demo-app.wasm -o ./dist/img-oci.tar
regctl image import localhost:5000/wasi-demo-oci:latest ./dist/img-oci.tar        
```

View the manifest created, notice that the media types for the layers are `application/vnd.bytecodealliance.wasm.component.layer.v0+wasm` which are subject to change.

```
Name:                                localhost:5000/wasi-demo-oci:latest
MediaType:                           application/vnd.oci.image.manifest.v1+json
Digest:                              sha256:6c48b431d29a1ea1ece13fa50e9f33e4d164e07f6a501dbed668aed947002c5c
Annotations:
  io.containerd.image.name:          ghcr.io/containerd/runwasi/wasi-demo-oci:latest
  org.opencontainers.image.ref.name: latest
Total Size:                          2.590MB

Config:
  Digest:                            sha256:beb7483682ae4ec45d02cd7cee8ee733f8dc610cb7e91070dc8f10567365bdd7
  MediaType:                         application/vnd.oci.image.config.v1+json
  Size:                              138B

Layers:

  Digest:                            sha256:656e978ae0c37156a6abe06052a588e5c700346650765859981ebd2089cffd42
  MediaType:                         application/vnd.bytecodealliance.wasm.component.layer.v0+wasm
  Size:                              2.590MB
```

### Spec

See the [OCI Image Spec](https://github.com/opencontainers/image-spec/blob/bc9c4bd/image-layout.md) for more information on the OCI tar format.

In order to be compatible with Docker, since Docker does not currently support the OCI format, this also includes a `manifest.json` file at the root of the tar that describes the image in a way that Docker can import it.