From 88aa1c12173db8e2a13b1faedb8efba4511a76fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81ngel=20M?= Date: Fri, 12 May 2023 17:10:11 +0200 Subject: [PATCH] feat: add a new shim for Wasm Workers Server (#88) * feat: add the wasm workers server (wws) shim, examples and required scripts * feat: update GitHub workflows to test and build wws * feat: start adding wws information to the README.md file * fix: update imports in main.rs to fix format * fix: add missing build-wws-X dependency to the build task * fix: remove non-relevant login and unused variables. Fix service resources * fix: point to the right wws crate version. Update wws tests * fix: skip adding compiling flags in cross * feat: add quickstart guide and a new wws-python example * fix: update wws Cargo.toml metadata * feat: use 3000 port in the wws-shim. Add missing make tasks and deps * feat: redirect stderr to the pod logs to provide visibility * fix: set the right path for stderr. Remove unnecesary reference * fix: rollback to use the right type for the wws serve function * fix: remove the reference for stderr_path --- .github/workflows/build.yaml | 2 + .github/workflows/ci.yaml | 2 + .github/workflows/release.yaml | 15 +- Makefile | 37 +- README.md | 10 +- containerd-shim-wws-v1/Cargo.lock | 3889 ++++++++++++++++++++++++ containerd-shim-wws-v1/Cargo.toml | 30 + containerd-shim-wws-v1/quickstart.md | 277 ++ containerd-shim-wws-v1/src/main.rs | 228 ++ deployments/k3d/Makefile | 19 +- deployments/k3d/README.md | 1 + deployments/k3d/config.toml.tmpl | 3 + deployments/k3d/workload/runtime.yaml | 11 +- deployments/k3d/workload/workload.yaml | 41 + deployments/k8s/all-in-one-demo.yaml | 42 + deployments/workloads/runtime.yaml | 8 +- deployments/workloads/workload.yaml | 41 + images/wws-python/Dockerfile | 13 + images/wws-python/hello.py | 45 + images/wws/Dockerfile | 2 + images/wws/hello.js | 55 + tests/common/mod.rs | 24 + tests/integration_test.rs | 23 + tests/setup.py | 30 +- tests/workloads/runtime.yaml | 8 +- tests/workloads/workload.yaml | 48 + 26 files changed, 4877 insertions(+), 27 deletions(-) create mode 100644 containerd-shim-wws-v1/Cargo.lock create mode 100644 containerd-shim-wws-v1/Cargo.toml create mode 100644 containerd-shim-wws-v1/quickstart.md create mode 100644 containerd-shim-wws-v1/src/main.rs create mode 100644 images/wws-python/Dockerfile create mode 100644 images/wws-python/hello.py create mode 100644 images/wws/Dockerfile create mode 100644 images/wws/hello.js diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index ef8ca687..2c63716f 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -26,6 +26,7 @@ jobs: workspaces: | "containerd-shim-slight-v1 -> target" "containerd-shim-spin-v1 -> target" + "containerd-shim-wws-v1 -> target" - name: "Install Rust Wasm targets" run: | rustup target add wasm32-wasi @@ -47,6 +48,7 @@ jobs: mkdir _dist cp containerd-shim-slight-v1/target/${{ matrix.config.arch }}-unknown-linux-musl/release/containerd-shim-*-v1 _dist/ cp containerd-shim-spin-v1/target/${{ matrix.config.arch }}-unknown-linux-musl/release/containerd-shim-*-v1 _dist/ + cp containerd-shim-wws-v1/target/${{ matrix.config.arch }}-unknown-linux-musl/release/containerd-shim-*-v1 _dist/ cd _dist tar czf containerd-wasm-shims-v1-${{ env.RUNNER_OS }}-${{ matrix.config.arch }}.tar.gz containerd-shim-*-v1 - name: upload shim artifacts diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 901c7a9c..04c5443a 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -14,6 +14,7 @@ jobs: workspaces: | "containerd-shim-slight-v1 -> target" "containerd-shim-spin-v1 -> target" + "containerd-shim-wws-v1 -> target" - name: "Install Rust Wasm targets" run: | rustup target add wasm32-wasi @@ -38,6 +39,7 @@ jobs: workspaces: | "containerd-shim-slight-v1 -> target" "containerd-shim-spin-v1 -> target" + "containerd-shim-wws-v1 -> target" - name: "Install Rust Wasm targets" run: | rustup target add wasm32-wasi diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index f6828f07..b3734f5b 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -7,9 +7,9 @@ jobs: build: uses: ./.github/workflows/build.yaml release: - permissions: + permissions: contents: write - packages: write + packages: write needs: build if: startsWith(github.ref, 'refs/tags/v') runs-on: ubuntu-latest @@ -39,7 +39,7 @@ jobs: -p \ _dist/runtime.yaml#example-runtimes \ _dist/workload.yaml#example-workloads \ - + for f in ./_artifacts/*/*.tar.gz; do gh release upload ${{ env.RELEASE_VERSION }} $f; done # Setup buildx to build multiarch image: https://github.com/docker/build-push-action/blob/master/docs/advanced/multi-platform.md @@ -80,6 +80,15 @@ jobs: ghcr.io/deislabs/containerd-wasm-shims/examples/slight-rust-hello:latest context: images/slight platforms: wasi/wasm + - name: build and push Wasm Workers Server (wws) hello world (JS) + uses: docker/build-push-action@v3 + with: + push: true + tags: | + ghcr.io/deislabs/containerd-wasm-shims/examples/wws-js-hello:${{ env.RELEASE_VERSION }} + ghcr.io/deislabs/containerd-wasm-shims/examples/wws-js-hello:latest + context: images/slight + platforms: wasi/wasm - name: untar x86_64 musl artifacts into ./deployments/k3d/.tmp dir run: | mkdir -p ./deployments/k3d/.tmp diff --git a/Makefile b/Makefile index 34761d31..f99cafff 100644 --- a/Makefile +++ b/Makefile @@ -2,6 +2,7 @@ PREFIX ?= /usr/local INSTALL ?= install TEST_IMG_NAME_SPIN ?= wasmtest_spin:latest TEST_IMG_NAME_SLIGHT ?= wasmtest_slight:latest +TEST_IMG_NAME_WWS ?= wasmtest_wws:latest ARCH ?= x86_64 TARGET ?= $(ARCH)-unknown-linux-musl PYTHON ?= python3 @@ -14,6 +15,7 @@ test: unit-tests integration-tests unit-tests: build cross test --release --manifest-path=containerd-shim-slight-v1/Cargo.toml --target $(TARGET) cross test --release --manifest-path=containerd-shim-spin-v1/Cargo.toml --target $(TARGET) + cross test --release --manifest-path=containerd-shim-wws-v1/Cargo.toml --target $(TARGET) .PHONY: integration-tests integration-tests: build @@ -22,14 +24,16 @@ integration-tests: build $(PYTHON) tests/teardown.py .PHONY: fmt -fmt: +fmt: cargo fmt --all --manifest-path=containerd-shim-slight-v1/Cargo.toml -- --check cargo fmt --all --manifest-path=containerd-shim-spin-v1/Cargo.toml -- --check + cargo fmt --all --manifest-path=containerd-shim-wws-v1/Cargo.toml -- --check cargo clippy --all-targets --all-features --workspace --manifest-path=containerd-shim-slight-v1/Cargo.toml -- -D warnings cargo clippy --all-targets --all-features --workspace --manifest-path=containerd-shim-spin-v1/Cargo.toml -- -D warnings + cargo clippy --all-targets --all-features --workspace --manifest-path=containerd-shim-wws-v1/Cargo.toml -- -D warnings .PHONY: build -build: build-spin-cross-$(TARGET) build-slight-cross-$(TARGET) +build: build-spin-cross-$(TARGET) build-slight-cross-$(TARGET) build-wws-cross-$(TARGET) echo "Build complete" .PHONY: install-cross @@ -45,6 +49,10 @@ build-spin-cross-%: install-cross build-slight-cross-%: install-cross cross build --release --target $* --manifest-path=containerd-shim-slight-v1/Cargo.toml -vvv +.PHONY: build-wws-cross-% +build-wws-cross-%: install-cross + cross build --release --target $* --manifest-path=containerd-shim-wws-v1/Cargo.toml -vvv + .PHONY: build-spin build-spin: cargo build --release --manifest-path=containerd-shim-spin-v1/Cargo.toml @@ -53,8 +61,12 @@ build-spin: build-slight: cargo build --release --manifest-path=containerd-shim-slight-v1/Cargo.toml +.PHONY: build-wws +build-slight: + cargo build --release --manifest-path=containerd-shim-wws-v1/Cargo.toml + .PHONY: install -install: build-spin build-slight +install: build-spin build-slight build-wws sudo $(INSTALL) containerd-shim-*/target/release/containerd-shim-*-v1 $(PREFIX)/bin .PHONY: update-deps @@ -71,9 +83,15 @@ test/out_slight/img.tar: images/slight/Dockerfile docker buildx build --platform=wasi/wasm --load -t $(TEST_IMG_NAME_SLIGHT) ./images/slight docker save -o $@ $(TEST_IMG_NAME_SLIGHT) -load: test/out_spin/img.tar test/out_slight/img.tar +test/out_wws/img.tar: images/wws/Dockerfile + mkdir -p $(@D) + docker buildx build --platform=wasi/wasm --load -t $(TEST_IMG_NAME_WWS) ./images/wws + docker save -o $@ $(TEST_IMG_NAME_WWS) + +load: test/out_spin/img.tar test/out_slight/img.tar test/out_wws/img.tar sudo ctr -n $(CONTAINERD_NAMESPACE) image import test/out_spin/img.tar sudo ctr -n $(CONTAINERD_NAMESPACE) image import test/out_slight/img.tar + sudo ctr -n $(CONTAINERD_NAMESPACE) image import test/out_wws/img.tar .PHONY: run_spin run_spin: install load @@ -83,10 +101,15 @@ run_spin: install load run_slight: install load sudo ctr run --net-host --rm --runtime=io.containerd.slight.v1 docker.io/library/$(TEST_IMG_NAME_SLIGHT) testslight +.PHONY: run_wws +run_wws: install load + sudo ctr run --net-host --rm --runtime=io.containerd.wws.v1 docker.io/library/$(TEST_IMG_NAME_WWS) testwws + .PHONY: clean -clean: clean-slight clean-spin +clean: clean-slight clean-spin clean-wws test -f $(PREFIX)/bin/containerd-shim-spin-v1 && sudo rm -rf $(PREFIX)/bin/containerd-shim-spin-v1 || true test -f $(PREFIX)/bin/containerd-shim-slight-v1 && sudo rm -rf $(PREFIX)/bin/containerd-shim-slight-v1 || true + test -f $(PREFIX)/bin/containerd-shim-wws-v1 && sudo rm -rf $(PREFIX)/bin/containerd-shim-wws-v1 || true test -d ./test && sudo rm -rf ./test || true .PHONY: clean-spin @@ -96,3 +119,7 @@ clean-spin: .PHONY: clean-slight clean-slight: cargo clean --manifest-path containerd-shim-slight-v1/Cargo.toml + +.PHONY: clean-wws +clean-slight: + cargo clean --manifest-path containerd-shim-wws-v1/Cargo.toml \ No newline at end of file diff --git a/README.md b/README.md index 46902cb0..2a650cfa 100644 --- a/README.md +++ b/README.md @@ -8,9 +8,10 @@ This project aims to provide containerd shim implementations that can run Wasm / - [Start k3d and run a sample WASM application](./deployments/k3d/README.md#how-to-run-the-example). - [Create a Spin application on k3d](./containerd-shim-spin-v1/quickstart.md) - [Deploy a SpiderLightning application with k3d](./containerd-shim-slight-v1/quickstart.md) +- [Deploy a Wasm Workers Server application with k3d](./containerd-shim-slight-v1/quickstart.md) ## Containerd Wasm Shims -Each of the shims below leverage runwasi to provide the bridge between K8s and containerd. +Each of the shims below leverage runwasi to provide the bridge between K8s and containerd. ### Spin shim The Spin shim, as the name implies, is powered by the [Fermyon Spin](https://github.com/fermyon/spin) engine. Spin is an open source framework for building and running fast, secure, and composable cloud microservices with WebAssembly. @@ -18,10 +19,15 @@ The Spin shim, as the name implies, is powered by the [Fermyon Spin](https://git If you are curious, [here is the Spin shim source code](./containerd-shim-spin-v1). ### Slight (SpiderLightning) shim -The slight shim is powered by the [Deislabs SpiderLightning](https://github.com/deislabs/spiderlightning) engine. Slight is an open source host, much like Spin, for building and running fast, secure, and composable cloud microservices with WebAssembly. In addition, the slight shim comes with an increasing [array of WebAssembly component capabilities, including underlying implementations](https://github.com/deislabs/spiderlightning/blob/main/docs/primer.md#spiderlightning-capabilities), to consume common application level services. +The slight shim is powered by the [Deislabs SpiderLightning](https://github.com/deislabs/spiderlightning) engine. Slight is an open source host, much like Spin, for building and running fast, secure, and composable cloud microservices with WebAssembly. In addition, the slight shim comes with an increasing [array of WebAssembly component capabilities, including underlying implementations](https://github.com/deislabs/spiderlightning/blob/main/docs/primer.md#spiderlightning-capabilities), to consume common application level services. If you are curious, [here is the Slight shim source code](./containerd-shim-slight-v1). +### Wasm Workers Server (wws) shim +The `wws` shim is powered by the [Wasm Workers Server](https://github.com/vmware-labs/wasm-workers-server) engine. Wasm Workers Server is an open-source project to develop and run serverless applications on top of WebAssembly. It's based on the "workers" concept from the browser, where you have functions that receives a request, processes it, and provides response. It supports multiple languages, so you can develop your workers with Rust, JavaScript, Python, Ruby and more in the future. + +If you are curious, [here is the Wasm Workers Server shim source code](./containerd-shim-wws-v1). + ### Building the shims To build the shims in this project, run `make`. diff --git a/containerd-shim-wws-v1/Cargo.lock b/containerd-shim-wws-v1/Cargo.lock new file mode 100644 index 00000000..ddd4dd66 --- /dev/null +++ b/containerd-shim-wws-v1/Cargo.lock @@ -0,0 +1,3889 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "actix-codec" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57a7559404a7f3573127aab53c08ce37a6c6a315c374a31070f3c91cd1b4a7fe" +dependencies = [ + "bitflags", + "bytes", + "futures-core", + "futures-sink", + "log", + "memchr", + "pin-project-lite", + "tokio", + "tokio-util 0.7.7", +] + +[[package]] +name = "actix-files" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d832782fac6ca7369a70c9ee9a20554623c5e51c76e190ad151780ebea1cf689" +dependencies = [ + "actix-http", + "actix-service", + "actix-utils", + "actix-web", + "askama_escape", + "bitflags", + "bytes", + "derive_more", + "futures-core", + "http-range", + "log", + "mime", + "mime_guess", + "percent-encoding", + "pin-project-lite", +] + +[[package]] +name = "actix-http" +version = "3.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2079246596c18b4a33e274ae10c0e50613f4d32a4198e09c7b93771013fed74" +dependencies = [ + "actix-codec", + "actix-rt", + "actix-service", + "actix-utils", + "ahash 0.8.3", + "base64 0.21.0", + "bitflags", + "brotli", + "bytes", + "bytestring", + "derive_more", + "encoding_rs", + "flate2", + "futures-core", + "h2", + "http", + "httparse", + "httpdate", + "itoa", + "language-tags", + "local-channel", + "mime", + "percent-encoding", + "pin-project-lite", + "rand", + "sha1", + "smallvec", + "tokio", + "tokio-util 0.7.7", + "tracing", + "zstd 0.12.3+zstd.1.5.2", +] + +[[package]] +name = "actix-macros" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "465a6172cf69b960917811022d8f29bc0b7fa1398bc4f78b3c466673db1213b6" +dependencies = [ + "quote", + "syn", +] + +[[package]] +name = "actix-router" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d66ff4d247d2b160861fa2866457e85706833527840e4133f8f49aa423a38799" +dependencies = [ + "bytestring", + "http", + "regex", + "serde", + "tracing", +] + +[[package]] +name = "actix-rt" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15265b6b8e2347670eb363c47fc8c75208b4a4994b27192f345fcbe707804f3e" +dependencies = [ + "futures-core", + "tokio", +] + +[[package]] +name = "actix-server" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e8613a75dd50cc45f473cee3c34d59ed677c0f7b44480ce3b8247d7dc519327" +dependencies = [ + "actix-rt", + "actix-service", + "actix-utils", + "futures-core", + "futures-util", + "mio", + "num_cpus", + "socket2", + "tokio", + "tracing", +] + +[[package]] +name = "actix-service" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b894941f818cfdc7ccc4b9e60fa7e53b5042a2e8567270f9147d5591893373a" +dependencies = [ + "futures-core", + "paste", + "pin-project-lite", +] + +[[package]] +name = "actix-utils" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88a1dcdff1466e3c2488e1cb5c36a71822750ad43839937f85d2f4d9f8b705d8" +dependencies = [ + "local-waker", + "pin-project-lite", +] + +[[package]] +name = "actix-web" +version = "4.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd3cb42f9566ab176e1ef0b8b3a896529062b4efc6be0123046095914c4c1c96" +dependencies = [ + "actix-codec", + "actix-http", + "actix-macros", + "actix-router", + "actix-rt", + "actix-server", + "actix-service", + "actix-utils", + "actix-web-codegen", + "ahash 0.7.6", + "bytes", + "bytestring", + "cfg-if 1.0.0", + "cookie", + "derive_more", + "encoding_rs", + "futures-core", + "futures-util", + "http", + "itoa", + "language-tags", + "log", + "mime", + "once_cell", + "pin-project-lite", + "regex", + "serde", + "serde_json", + "serde_urlencoded", + "smallvec", + "socket2", + "time 0.3.20", + "url", +] + +[[package]] +name = "actix-web-codegen" +version = "4.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2262160a7ae29e3415554a3f1fc04c764b1540c116aa524683208078b7a75bc9" +dependencies = [ + "actix-router", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "addr2line" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9ecd88a8c8378ca913a680cd98f0f13ac67383d35993f86c90a70e3f137816b" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "ahash" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" +dependencies = [ + "getrandom", + "once_cell", + "version_check", +] + +[[package]] +name = "ahash" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" +dependencies = [ + "cfg-if 1.0.0", + "getrandom", + "once_cell", + "version_check", +] + +[[package]] +name = "aho-corasick" +version = "0.7.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" +dependencies = [ + "memchr", +] + +[[package]] +name = "alloc-no-stdlib" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" + +[[package]] +name = "alloc-stdlib" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" +dependencies = [ + "alloc-no-stdlib", +] + +[[package]] +name = "ambient-authority" +version = "0.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec8ad6edb4840b78c5c3d88de606b22252d552b55f3a4699fbb10fc070ec3049" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anyhow" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800" + +[[package]] +name = "arrayref" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" + +[[package]] +name = "arrayvec" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" + +[[package]] +name = "askama_escape" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "619743e34b5ba4e9703bba34deac3427c72507c7159f5fd030aea8cac0cfe341" + +[[package]] +name = "async-trait" +version = "0.1.64" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cd7fce9ba8c3c042128ce72d8b2ddbf3a05747efb67ea0313c635e10bda47a2" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "base64" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + +[[package]] +name = "base64" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a" + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "blake3" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ae2468a89544a466886840aa467a25b766499f4f04bf7d9fcd10ecee9fccef" +dependencies = [ + "arrayref", + "arrayvec", + "cc", + "cfg-if 1.0.0", + "constant_time_eq", + "digest 0.10.6", +] + +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "generic-array", +] + +[[package]] +name = "block-buffer" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" +dependencies = [ + "generic-array", +] + +[[package]] +name = "brotli" +version = "3.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1a0b1dbcc8ae29329621f8d4f0d835787c1c38bb1401979b49d13b0b305ff68" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor", +] + +[[package]] +name = "brotli-decompressor" +version = "2.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b6561fd3f895a11e8f72af2cb7d22e08366bebc2b6b57f7744c4bda27034744" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", +] + +[[package]] +name = "brownstone" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5839ee4f953e811bfdcf223f509cb2c6a3e1447959b0bff459405575bc17f22" +dependencies = [ + "arrayvec", +] + +[[package]] +name = "bstr" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223" +dependencies = [ + "lazy_static", + "memchr", + "regex-automata", +] + +[[package]] +name = "bumpalo" +version = "3.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535" + +[[package]] +name = "byteorder" +version = "1.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" + +[[package]] +name = "bytes" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" + +[[package]] +name = "bytestring" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7f83e57d9154148e355404702e2694463241880b939570d7c97c014da7a69a1" +dependencies = [ + "bytes", +] + +[[package]] +name = "cap-fs-ext" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff40fd8a96d57a204080e5debd621342612f6d6b60901201a51f518baf72691d" +dependencies = [ + "cap-primitives", + "cap-std", + "io-lifetimes", + "windows-sys 0.45.0", +] + +[[package]] +name = "cap-primitives" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9554a7698c8db4b7777f01b2237de111c5ecea169efb1190004d9069ceb289aa" +dependencies = [ + "ambient-authority", + "fs-set-times", + "io-extras", + "io-lifetimes", + "ipnet", + "maybe-owned", + "rustix", + "windows-sys 0.45.0", + "winx", +] + +[[package]] +name = "cap-rand" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "103e94d97d73504c5fa6ffb47135d5627ce5ff84a4ad37e8219103ddc291de24" +dependencies = [ + "ambient-authority", + "rand", +] + +[[package]] +name = "cap-std" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7b68a8ac703cc7bed0a46666a04b386cca214844897a69f599dcd82ea59422c" +dependencies = [ + "cap-primitives", + "io-extras", + "io-lifetimes", + "ipnet", + "rustix", +] + +[[package]] +name = "cap-time-ext" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "472931750f90fbf0731c886c2937521e25772942577a182e7ace5bc561d10e3b" +dependencies = [ + "cap-primitives", + "once_cell", + "rustix", + "winx", +] + +[[package]] +name = "caps" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "190baaad529bcfbde9e1a19022c42781bdb6ff9de25721abdb8fd98c0807730b" +dependencies = [ + "libc", + "thiserror", +] + +[[package]] +name = "cc" +version = "1.0.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" +dependencies = [ + "jobserver", +] + +[[package]] +name = "cfg-if" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chrono" +version = "0.4.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f" +dependencies = [ + "iana-time-zone", + "js-sys", + "num-integer", + "num-traits", + "time 0.1.45", + "wasm-bindgen", + "winapi", +] + +[[package]] +name = "clone3" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ee4e061ea30800291ca09663878f3953840a69b08ce244b3e8b26e894d9f60f" +dependencies = [ + "bitflags", + "uapi", +] + +[[package]] +name = "codespan-reporting" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" +dependencies = [ + "termcolor", + "unicode-width", +] + +[[package]] +name = "command-fds" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35cc819120a403d0eb3d0c404088c5a9f9b06066147ec69a21919fbc0833ef68" +dependencies = [ + "nix 0.22.3", + "thiserror", +] + +[[package]] +name = "const_format" +version = "0.2.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7309d9b4d3d2c0641e018d449232f2e28f1b22933c137f157d3dbc14228b8c0e" +dependencies = [ + "const_format_proc_macros", +] + +[[package]] +name = "const_format_proc_macros" +version = "0.2.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d897f47bf7270cf70d370f8f98c1abb6d2d4cf60a6845d30e05bfb90c6568650" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + +[[package]] +name = "constant_time_eq" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3ad85c1f65dc7b37604eb0e89748faf0b9653065f2a8ef69f96a687ec1e9279" + +[[package]] +name = "containerd-shim" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b7dc0083bae091806fe57ef508eada5a96244b41c6b8a555d1ef316f433b6de" +dependencies = [ + "command-fds", + "containerd-shim-protos", + "go-flag", + "lazy_static", + "libc", + "log", + "nix 0.23.2", + "oci-spec 0.5.8", + "prctl", + "serde", + "serde_derive", + "serde_json", + "signal-hook", + "thiserror", + "time 0.3.20", + "uuid", +] + +[[package]] +name = "containerd-shim-protos" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "077ec778a0835d9d85502e8535362130187759b69eddabe2bdb3a68ffb575bd0" +dependencies = [ + "protobuf", + "ttrpc", +] + +[[package]] +name = "containerd-shim-wasm" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2671b0d99b6656f32f8ff4e6d228ad547f199fb943f545fd7bfb36e666a57e72" +dependencies = [ + "anyhow", + "caps", + "chrono", + "clone3", + "command-fds", + "containerd-shim", + "libc", + "log", + "nix 0.26.2", + "oci-spec 0.6.0", + "proc-mounts", + "protobuf", + "serde", + "serde_json", + "thiserror", + "ttrpc", +] + +[[package]] +name = "containerd-shim-wws-v1" +version = "0.5.1" +dependencies = [ + "chrono", + "containerd-shim", + "containerd-shim-wasm", + "log", + "openssl", + "tokio", + "tokio-util 0.6.10", + "wws-config", + "wws-router", + "wws-server", +] + +[[package]] +name = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + +[[package]] +name = "cookie" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e859cd57d0710d9e06c381b550c06e76992472a8c6d527aecd2fc673dcc231fb" +dependencies = [ + "percent-encoding", + "time 0.3.20", + "version_check", +] + +[[package]] +name = "core-foundation" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" + +[[package]] +name = "cpp_demangle" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eeaa953eaad386a53111e47172c2fedba671e5684c8dd601a5f474f4f118710f" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "cpufeatures" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" +dependencies = [ + "libc", +] + +[[package]] +name = "cranelift-bforest" +version = "0.93.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bc42ba2e232e5b20ff7dc299a812d53337dadce9a7e39a238e6a5cb82d2e57b" +dependencies = [ + "cranelift-entity", +] + +[[package]] +name = "cranelift-codegen" +version = "0.93.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "253531aca9b6f56103c9420369db3263e784df39aa1c90685a1f69cfbba0623e" +dependencies = [ + "arrayvec", + "bumpalo", + "cranelift-bforest", + "cranelift-codegen-meta", + "cranelift-codegen-shared", + "cranelift-entity", + "cranelift-isle", + "gimli", + "hashbrown", + "log", + "regalloc2", + "smallvec", + "target-lexicon", +] + +[[package]] +name = "cranelift-codegen-meta" +version = "0.93.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72f2154365e2bff1b1b8537a7181591fdff50d8e27fa6e40d5c69c3bad0ca7c8" +dependencies = [ + "cranelift-codegen-shared", +] + +[[package]] +name = "cranelift-codegen-shared" +version = "0.93.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "687e14e3f5775248930e0d5a84195abef8b829958e9794bf8d525104993612b4" + +[[package]] +name = "cranelift-entity" +version = "0.93.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f42ea692c7b450ad18b8c9889661505d51c09ec4380cf1c2d278dbb2da22cae1" +dependencies = [ + "serde", +] + +[[package]] +name = "cranelift-frontend" +version = "0.93.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8483c2db6f45fe9ace984e5adc5d058102227e4c62e5aa2054e16b0275fd3a6e" +dependencies = [ + "cranelift-codegen", + "log", + "smallvec", + "target-lexicon", +] + +[[package]] +name = "cranelift-isle" +version = "0.93.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9793158837678902446c411741d87b43f57dadfb944f2440db4287cda8cbd59" + +[[package]] +name = "cranelift-native" +version = "0.93.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72668c7755f2b880665cb422c8ad2d56db58a88b9bebfef0b73edc2277c13c49" +dependencies = [ + "cranelift-codegen", + "libc", + "target-lexicon", +] + +[[package]] +name = "cranelift-wasm" +version = "0.93.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3852ce4b088b44ac4e29459573943009a70d1b192c8d77ef949b4e814f656fc1" +dependencies = [ + "cranelift-codegen", + "cranelift-entity", + "cranelift-frontend", + "itertools", + "log", + "smallvec", + "wasmparser", + "wasmtime-types", +] + +[[package]] +name = "crc32fast" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf2b3e8478797446514c91ef04bafcb59faba183e621ad488df88983cc14128c" +dependencies = [ + "cfg-if 1.0.0", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" +dependencies = [ + "cfg-if 1.0.0", + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46bd5f3f85273295a9d14aedfb86f6aadbff6d8f5295c4a9edb08e819dcf5695" +dependencies = [ + "autocfg", + "cfg-if 1.0.0", + "crossbeam-utils", + "memoffset 0.8.0", + "scopeguard", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "cxx" +version = "1.0.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86d3488e7665a7a483b57e25bdd90d0aeb2bc7608c8d0346acf2ad3f1caf1d62" +dependencies = [ + "cc", + "cxxbridge-flags", + "cxxbridge-macro", + "link-cplusplus", +] + +[[package]] +name = "cxx-build" +version = "1.0.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48fcaf066a053a41a81dfb14d57d99738b767febb8b735c3016e469fac5da690" +dependencies = [ + "cc", + "codespan-reporting", + "once_cell", + "proc-macro2", + "quote", + "scratch", + "syn", +] + +[[package]] +name = "cxxbridge-flags" +version = "1.0.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2ef98b8b717a829ca5603af80e1f9e2e48013ab227b68ef37872ef84ee479bf" + +[[package]] +name = "cxxbridge-macro" +version = "1.0.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "086c685979a698443656e5cf7856c95c642295a38599f12fb1ff76fb28d19892" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "darling" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0808e1bd8671fb44a113a14e13497557533369847788fa2ae912b6ebfce9fa8" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "001d80444f28e193f30c2f293455da62dcf9a6b29918a4253152ae2b1de592cb" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn", +] + +[[package]] +name = "darling_macro" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b36230598a2d5de7ec1c6f51f72d8a99a9208daff41de2084d06e3fd3ea56685" +dependencies = [ + "darling_core", + "quote", + "syn", +] + +[[package]] +name = "derive_builder" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d07adf7be193b71cc36b193d0f5fe60b918a3a9db4dad0449f57bcfd519704a3" +dependencies = [ + "derive_builder_macro 0.11.2", +] + +[[package]] +name = "derive_builder" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d67778784b508018359cbc8696edb3db78160bab2c2a28ba7f56ef6932997f8" +dependencies = [ + "derive_builder_macro 0.12.0", +] + +[[package]] +name = "derive_builder_core" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f91d4cfa921f1c05904dc3c57b4a32c38aed3340cce209f3a6fd1478babafc4" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "derive_builder_core" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c11bdc11a0c47bc7d37d582b5285da6849c96681023680b906673c5707af7b0f" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "derive_builder_macro" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f0314b72bed045f3a68671b3c86328386762c93f82d98c65c3cb5e5f573dd68" +dependencies = [ + "derive_builder_core 0.11.2", + "syn", +] + +[[package]] +name = "derive_builder_macro" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebcda35c7a396850a55ffeac740804b40ffec779b98fffbb1738f4033f0ee79e" +dependencies = [ + "derive_builder_core 0.12.0", + "syn", +] + +[[package]] +name = "derive_more" +version = "0.99.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "rustc_version", + "syn", +] + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array", +] + +[[package]] +name = "digest" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" +dependencies = [ + "block-buffer 0.10.3", + "crypto-common", + "subtle", +] + +[[package]] +name = "directories-next" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "339ee130d97a610ea5a5872d2bbb130fdf68884ff09d3028b81bec8a1ac23bbc" +dependencies = [ + "cfg-if 1.0.0", + "dirs-sys-next", +] + +[[package]] +name = "dirs" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + +[[package]] +name = "dirs-sys-next" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + +[[package]] +name = "either" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" + +[[package]] +name = "encoding_rs" +version = "0.8.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "env_logger" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0" +dependencies = [ + "humantime", + "is-terminal", + "log", + "regex", + "termcolor", +] + +[[package]] +name = "errno" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1" +dependencies = [ + "errno-dragonfly", + "libc", + "winapi", +] + +[[package]] +name = "errno-dragonfly" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "fallible-iterator" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" + +[[package]] +name = "fastrand" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" +dependencies = [ + "instant", +] + +[[package]] +name = "fd-lock" +version = "3.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ef1a30ae415c3a691a4f41afddc2dbcd6d70baf338368d85ebc1e8ed92cedb9" +dependencies = [ + "cfg-if 1.0.0", + "rustix", + "windows-sys 0.45.0", +] + +[[package]] +name = "file-per-thread-logger" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84f2e425d9790201ba4af4630191feac6dcc98765b118d4d18e91d23c2353866" +dependencies = [ + "env_logger", + "log", +] + +[[package]] +name = "flate2" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "form_urlencoded" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "fs-set-times" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "857cf27edcb26c2a36d84b2954019573d335bb289876113aceacacdca47a4fd4" +dependencies = [ + "io-lifetimes", + "rustix", + "windows-sys 0.45.0", +] + +[[package]] +name = "futures-channel" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e5317663a9089767a1ec00a487df42e0ca174b61b4483213ac24448e4664df5" +dependencies = [ + "futures-core", +] + +[[package]] +name = "futures-core" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec90ff4d0fe1f57d600049061dc6bb68ed03c7d2fbd697274c41805dcb3f8608" + +[[package]] +name = "futures-sink" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f310820bb3e8cfd46c80db4d7fb8353e15dfff853a127158425f31e0be6c8364" + +[[package]] +name = "futures-task" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcf79a1bf610b10f42aea489289c5a2c478a786509693b80cd39c44ccd936366" + +[[package]] +name = "futures-util" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c1d6de3acfef38d2be4b1f543f553131788603495be83da675e180c8d6b7bd1" +dependencies = [ + "futures-core", + "futures-task", + "pin-project-lite", + "pin-utils", +] + +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + +[[package]] +name = "generic-array" +version = "0.14.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", +] + +[[package]] +name = "getset" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e45727250e75cc04ff2846a66397da8ef2b3db8e40e0cef4df67950a07621eb9" +dependencies = [ + "proc-macro-error", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "gimli" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22030e2c5a68ec659fde1e949a745124b48e6fa8b045b7ed5bd1fe4ccc5c4e5d" +dependencies = [ + "fallible-iterator", + "indexmap", + "stable_deref_trait", +] + +[[package]] +name = "go-flag" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b4a40c9ca507513f573aabaf6a8558173a1ac9aa1363d8de30c7f89b34f8d2b" +dependencies = [ + "cfg-if 0.1.10", +] + +[[package]] +name = "h2" +version = "0.3.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5be7b54589b581f624f566bf5d8eb2bab1db736c51528720b6bd36b96b55924d" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util 0.7.7", + "tracing", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +dependencies = [ + "ahash 0.7.6", +] + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "hermit-abi" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" +dependencies = [ + "libc", +] + +[[package]] +name = "hermit-abi" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "http" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" +dependencies = [ + "bytes", + "http", + "pin-project-lite", +] + +[[package]] +name = "http-range" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21dec9db110f5f872ed9699c3ecf50cf16f423502706ba5c72462e28d3157573" + +[[package]] +name = "httparse" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" + +[[package]] +name = "httpdate" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" + +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + +[[package]] +name = "hyper" +version = "0.14.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e011372fa0b68db8350aa7a248930ecc7839bf46d8485577d69f117a75f164c" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper-tls" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +dependencies = [ + "bytes", + "hyper", + "native-tls", + "tokio", + "tokio-native-tls", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.53" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64c122667b287044802d6ce17ee2ddf13207ed924c712de9a66a5814d5b64765" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "winapi", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca" +dependencies = [ + "cxx", + "cxx-build", +] + +[[package]] +name = "id-arena" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25a2bc672d1148e28034f176e01fffebb08b35768468cc954630da77a1449005" + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "indent_write" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cfe9645a18782869361d9c8732246be7b410ad4e919d3609ebabdac00ba12c3" + +[[package]] +name = "indexmap" +version = "1.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" +dependencies = [ + "autocfg", + "hashbrown", + "serde", +] + +[[package]] +name = "instant" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "io-extras" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d79107d6e60d78351e11f0a2dc9d0eaf304a7efb592e92603783afb8479c7d97" +dependencies = [ + "io-lifetimes", + "windows-sys 0.45.0", +] + +[[package]] +name = "io-lifetimes" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1abeb7a0dd0f8181267ff8adc397075586500b81b28a73e8a0208b00fc170fb3" +dependencies = [ + "libc", + "windows-sys 0.45.0", +] + +[[package]] +name = "ipnet" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146" + +[[package]] +name = "is-terminal" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21b6b32576413a8e69b90e952e4a026476040d81017b80445deda5f2d3921857" +dependencies = [ + "hermit-abi 0.3.1", + "io-lifetimes", + "rustix", + "windows-sys 0.45.0", +] + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440" + +[[package]] +name = "ittapi" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e648c437172ce7d3ac35ca11a068755072054826fa455a916b43524fa4a62a7" +dependencies = [ + "anyhow", + "ittapi-sys", + "log", +] + +[[package]] +name = "ittapi-sys" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9b32a4d23f72548178dde54f3c12c6b6a08598e25575c0d0fa5bd861e0dc1a5" +dependencies = [ + "cc", +] + +[[package]] +name = "jobserver" +version = "0.1.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2" +dependencies = [ + "libc", +] + +[[package]] +name = "joinery" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72167d68f5fce3b8655487b8038691a3c9984ee769590f93f2a631f4ad64e4f5" + +[[package]] +name = "js-sys" +version = "0.3.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "language-tags" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4345964bb142484797b161f473a503a434de77149dd8c7427788c6e13379388" + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "leb128" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" + +[[package]] +name = "libc" +version = "0.2.139" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79" + +[[package]] +name = "link-cplusplus" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5" +dependencies = [ + "cc", +] + +[[package]] +name = "linux-raw-sys" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" + +[[package]] +name = "local-channel" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f303ec0e94c6c54447f84f3b0ef7af769858a9c4ef56ef2a986d3dcd4c3fc9c" +dependencies = [ + "futures-core", + "futures-sink", + "futures-util", + "local-waker", +] + +[[package]] +name = "local-waker" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e34f76eb3611940e0e7d53a9aaa4e6a3151f69541a282fd0dad5571420c53ff1" + +[[package]] +name = "lock_api" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "mach" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa" +dependencies = [ + "libc", +] + +[[package]] +name = "maybe-owned" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4facc753ae494aeb6e3c22f839b158aebd4f9270f55cd3c79906c45476c47ab4" + +[[package]] +name = "memchr" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" + +[[package]] +name = "memfd" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b20a59d985586e4a5aef64564ac77299f8586d8be6cf9106a5a40207e8908efb" +dependencies = [ + "rustix", +] + +[[package]] +name = "memoffset" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" +dependencies = [ + "autocfg", +] + +[[package]] +name = "memoffset" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" +dependencies = [ + "autocfg", +] + +[[package]] +name = "memoffset" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1" +dependencies = [ + "autocfg", +] + +[[package]] +name = "mime" +version = "0.3.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" + +[[package]] +name = "mime_guess" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef" +dependencies = [ + "mime", + "unicase", +] + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" +dependencies = [ + "adler", +] + +[[package]] +name = "mio" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9" +dependencies = [ + "libc", + "log", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys 0.45.0", +] + +[[package]] +name = "native-tls" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" +dependencies = [ + "lazy_static", + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + +[[package]] +name = "nix" +version = "0.22.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4916f159ed8e5de0082076562152a76b7a1f64a01fd9d1e0fea002c37624faf" +dependencies = [ + "bitflags", + "cc", + "cfg-if 1.0.0", + "libc", + "memoffset 0.6.5", +] + +[[package]] +name = "nix" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f3790c00a0150112de0f4cd161e3d7fc4b2d8a5542ffc35f099a2562aecb35c" +dependencies = [ + "bitflags", + "cc", + "cfg-if 1.0.0", + "libc", + "memoffset 0.6.5", +] + +[[package]] +name = "nix" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a" +dependencies = [ + "bitflags", + "cfg-if 1.0.0", + "libc", + "memoffset 0.7.1", + "pin-utils", + "static_assertions", +] + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "nom-supreme" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bd3ae6c901f1959588759ff51c95d24b491ecb9ff91aa9c2ef4acc5b1dcab27" +dependencies = [ + "brownstone", + "indent_write", + "joinery", + "memchr", + "nom", +] + +[[package]] +name = "num-integer" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_cpus" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" +dependencies = [ + "hermit-abi 0.2.6", + "libc", +] + +[[package]] +name = "object" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21158b2c33aa6d4561f1c0a6ea283ca92bc54802a93b263e910746d679a7eb53" +dependencies = [ + "crc32fast", + "hashbrown", + "indexmap", + "memchr", +] + +[[package]] +name = "oci-spec" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98135224dd4faeb24c05a2fac911ed53ea6b09ecb09d7cada1cb79963ab2ee34" +dependencies = [ + "derive_builder 0.11.2", + "getset", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "oci-spec" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "214b837f7dde5026f2028ead5ae720073277c19f82ff85623b142c39d4b843e7" +dependencies = [ + "derive_builder 0.12.0", + "getset", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "once_cell" +version = "1.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" + +[[package]] +name = "opaque-debug" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" + +[[package]] +name = "openssl" +version = "0.10.48" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "518915b97df115dd36109bfa429a48b8f737bd05508cf9588977b599648926d2" +dependencies = [ + "bitflags", + "cfg-if 1.0.0", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "openssl-src" +version = "111.25.2+1.1.1t" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "320708a054ad9b3bf314688b5db87cf4d6683d64cfc835e2337924ae62bf4431" +dependencies = [ + "cc", +] + +[[package]] +name = "openssl-sys" +version = "0.9.85" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d3d193fb1488ad46ffe3aaabc912cc931d02ee8518fe2959aea8ef52718b0c0" +dependencies = [ + "cc", + "libc", + "openssl-src", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "parking_lot" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "redox_syscall", + "smallvec", + "windows-sys 0.45.0", +] + +[[package]] +name = "partition-identity" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa925f9becb532d758b0014b472c576869910929cf4c3f8054b386f19ab9e21" +dependencies = [ + "thiserror", +] + +[[package]] +name = "paste" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d01a5bd0424d00070b0098dd17ebca6f961a959dead1dbcbbbc1d1cd8d3deeba" + +[[package]] +name = "percent-encoding" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" + +[[package]] +name = "pin-project-lite" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkg-config" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160" + +[[package]] +name = "pori" +version = "0.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4a63d338dec139f56dacc692ca63ad35a6be6a797442479b55acd611d79e906" +dependencies = [ + "nom", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "prctl" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "059a34f111a9dee2ce1ac2826a68b24601c4298cfeb1a587c3cb493d5ab46f52" +dependencies = [ + "libc", + "nix 0.26.2", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro2" +version = "1.0.51" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d727cae5b39d21da60fa540906919ad737832fe0b1c165da3a34d6548c849d6" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "proc-mounts" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d652f8435d0ab70bf4f3590a6a851d59604831a458086541b95238cc51ffcf2" +dependencies = [ + "partition-identity", +] + +[[package]] +name = "protobuf" +version = "2.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "106dd99e98437432fed6519dedecfade6a06a73bb7b2a1e019fdd2bee5778d94" + +[[package]] +name = "protobuf-codegen" +version = "2.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "033460afb75cf755fcfc16dfaed20b86468082a2ea24e05ac35ab4a099a017d6" +dependencies = [ + "protobuf", +] + +[[package]] +name = "protobuf-codegen-pure" +version = "2.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95a29399fc94bcd3eeaa951c715f7bea69409b2445356b00519740bcd6ddd865" +dependencies = [ + "protobuf", + "protobuf-codegen", +] + +[[package]] +name = "psm" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5787f7cda34e3033a72192c018bc5883100330f362ef279a8cbccfce8bb4e874" +dependencies = [ + "cc", +] + +[[package]] +name = "pulldown-cmark" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffade02495f22453cd593159ea2f59827aae7f53fa8323f756799b670881dcf8" +dependencies = [ + "bitflags", + "memchr", + "unicase", +] + +[[package]] +name = "quote" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "rayon" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6db3a213adf02b3bcfd2d3846bb41cb22857d131789e01df434fb7e7bc0759b7" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "356a0625f1954f730c0201cdab48611198dc6ce21f4acff55089b5a78e6e835b" +dependencies = [ + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-utils", + "num_cpus", +] + +[[package]] +name = "redox_syscall" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +dependencies = [ + "bitflags", +] + +[[package]] +name = "redox_users" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" +dependencies = [ + "getrandom", + "redox_syscall", + "thiserror", +] + +[[package]] +name = "regalloc2" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "300d4fbfb40c1c66a78ba3ddd41c1110247cf52f97b87d0f2fc9209bd49b030c" +dependencies = [ + "fxhash", + "log", + "slice-group-by", + "smallvec", +] + +[[package]] +name = "regex" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" + +[[package]] +name = "regex-syntax" +version = "0.6.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" + +[[package]] +name = "reqwest" +version = "0.11.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21eed90ec8570952d53b772ecf8f206aa1ec9a3d76b2521c56c42973f2d91ee9" +dependencies = [ + "base64 0.21.0", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "hyper", + "hyper-tls", + "ipnet", + "js-sys", + "log", + "mime", + "native-tls", + "once_cell", + "percent-encoding", + "pin-project-lite", + "serde", + "serde_json", + "serde_urlencoded", + "tokio", + "tokio-native-tls", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "winreg", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + +[[package]] +name = "rustix" +version = "0.36.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f43abb88211988493c1abb44a70efa56ff0ce98f233b7b276146f1f3f7ba9644" +dependencies = [ + "bitflags", + "errno", + "io-lifetimes", + "itoa", + "libc", + "linux-raw-sys", + "once_cell", + "windows-sys 0.45.0", +] + +[[package]] +name = "ryu" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "schannel" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3" +dependencies = [ + "windows-sys 0.42.0", +] + +[[package]] +name = "scopeguard" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" + +[[package]] +name = "scratch" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddccb15bcce173023b3fedd9436f882a0739b8dfb45e4f6b6002bee5929f61b2" + +[[package]] +name = "security-framework" +version = "2.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254" +dependencies = [ + "bitflags", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31c9bb296072e961fcbd8853511dd39c2d8be2deb1e17c6860b1d30732b323b4" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "semver" +version = "1.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58bc9567378fc7690d6b2addae4e60ac2eeea07becb2c64b9f218b53865cba2a" + +[[package]] +name = "serde" +version = "1.0.152" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.152" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cad406b69c91885b5107daf2c29572f6c8cdb3c66826821e286c533490c0bc76" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_spanned" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0efd8caf556a6cebd3b285caf480045fcc1ac04f6bd786b09a6f11af30c4fcf4" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "sha1" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" +dependencies = [ + "cfg-if 1.0.0", + "cpufeatures", + "digest 0.10.6", +] + +[[package]] +name = "sha2" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if 1.0.0", + "cpufeatures", + "digest 0.9.0", + "opaque-debug", +] + +[[package]] +name = "sha2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" +dependencies = [ + "cfg-if 1.0.0", + "cpufeatures", + "digest 0.10.6", +] + +[[package]] +name = "sha256" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "328169f167261957e83d82be47f9e36629e257c62308129033d7f7e7c173d180" +dependencies = [ + "hex", + "sha2 0.9.9", +] + +[[package]] +name = "shellexpand" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ccc8076840c4da029af4f87e4e8daeb0fca6b87bbb02e10cb60b791450e11e4" +dependencies = [ + "dirs", +] + +[[package]] +name = "signal-hook" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "732768f1176d21d09e076c23a93123d40bba92d50c4058da34d45c8de8e682b9" +dependencies = [ + "libc", + "signal-hook-registry", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" +dependencies = [ + "libc", +] + +[[package]] +name = "slab" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" +dependencies = [ + "autocfg", +] + +[[package]] +name = "slice-group-by" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03b634d87b960ab1a38c4fe143b508576f075e7c978bfad18217645ebfdfa2ec" + +[[package]] +name = "smallvec" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" + +[[package]] +name = "socket2" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + +[[package]] +name = "subtle" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "system-interface" +version = "0.25.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f355df185d945435f24c51fda9bf01bea6acb6c0b753e1241e5cc05413a659d4" +dependencies = [ + "bitflags", + "cap-fs-ext", + "cap-std", + "fd-lock", + "io-lifetimes", + "rustix", + "windows-sys 0.45.0", + "winx", +] + +[[package]] +name = "target-lexicon" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ae9980cab1db3fceee2f6c6f643d5d8de2997c58ee8d25fb0cc8a9e9e7348e5" + +[[package]] +name = "tempfile" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af18f7ae1acd354b992402e9ec5864359d693cd8a79dcbef59f76891701c1e95" +dependencies = [ + "cfg-if 1.0.0", + "fastrand", + "redox_syscall", + "rustix", + "windows-sys 0.42.0", +] + +[[package]] +name = "termcolor" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "thiserror" +version = "1.0.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a9cd18aa97d5c45c6603caea1da6628790b37f7a34b6ca89522331c5180fed0" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "time" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a" +dependencies = [ + "libc", + "wasi 0.10.0+wasi-snapshot-preview1", + "winapi", +] + +[[package]] +name = "time" +version = "0.3.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd0cbfecb4d19b5ea75bb31ad904eb5b9fa13f21079c3b92017ebdf4999a5890" +dependencies = [ + "itoa", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd" + +[[package]] +name = "time-macros" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd80a657e71da814b8e5d60d3374fc6d35045062245d80224748ae522dd76f36" +dependencies = [ + "time-core", +] + +[[package]] +name = "tinyvec" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03201d01c3c27a29c8a5cee5b55a93ddae1ccf6f08f65365c2c918f8c1b76f64" +dependencies = [ + "autocfg", + "bytes", + "libc", + "memchr", + "mio", + "num_cpus", + "parking_lot", + "pin-project-lite", + "signal-hook-registry", + "socket2", + "tokio-macros", + "windows-sys 0.45.0", +] + +[[package]] +name = "tokio-macros" +version = "1.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d266c00fde287f55d3f1c3e96c500c362a2b8c695076ec180f27918820bc6df8" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tokio-native-tls" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +dependencies = [ + "native-tls", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.6.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36943ee01a6d67977dd3f84a5a1d2efeb4ada3a1ae771cadfaa535d9d9fc6507" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "log", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5427d89453009325de0d8f342c9490009f76e999cb7672d77e46267448f7e6b2" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", + "tracing", +] + +[[package]] +name = "toml" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" +dependencies = [ + "serde", +] + +[[package]] +name = "toml" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7afcae9e3f0fe2c370fd4657108972cbb2fa9db1b9f84849cefd80741b01cb6" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit", +] + +[[package]] +name = "toml_datetime" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ab8ed2edee10b50132aed5f331333428b011c99402b5a534154ed15746f9622" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.19.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a1eb0622d28f4b9c90adc4ea4b2b46b47663fde9ac5fafcb14a1369d5508825" +dependencies = [ + "indexmap", + "serde", + "serde_spanned", + "toml_datetime", + "winnow", +] + +[[package]] +name = "tower-service" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" + +[[package]] +name = "tracing" +version = "0.1.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" +dependencies = [ + "cfg-if 1.0.0", + "log", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tracing-core" +version = "0.1.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" +dependencies = [ + "once_cell", +] + +[[package]] +name = "try-lock" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" + +[[package]] +name = "ttrpc" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ecfff459a859c6ba6668ff72b34c2f1d94d9d58f7088414c2674ad0f31cc7d8" +dependencies = [ + "byteorder", + "libc", + "log", + "nix 0.23.2", + "protobuf", + "protobuf-codegen-pure", + "thiserror", +] + +[[package]] +name = "typenum" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" + +[[package]] +name = "uapi" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "019450240401d342e2a5bc47f7fbaeb002a38fe18197b83788750d7ffb143274" +dependencies = [ + "cc", + "cfg-if 0.1.10", + "libc", + "uapi-proc", +] + +[[package]] +name = "uapi-proc" +version = "0.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54de46f980cea7b2ae8d8f7f9f1c35cf7062c68343e99345ef73758f8e60975a" +dependencies = [ + "lazy_static", + "libc", + "proc-macro2", + "quote", + "regex", + "syn", +] + +[[package]] +name = "unicase" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" +dependencies = [ + "version_check", +] + +[[package]] +name = "unicode-bidi" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d54675592c1dbefd78cbd98db9bacd89886e1ca50692a0692baefffdeb92dd58" + +[[package]] +name = "unicode-ident" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" + +[[package]] +name = "unicode-normalization" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-width" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" + +[[package]] +name = "unicode-xid" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" + +[[package]] +name = "url" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", +] + +[[package]] +name = "uuid" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" +dependencies = [ + "getrandom", +] + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "walkdir" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" +dependencies = [ + "same-file", + "winapi", + "winapi-util", +] + +[[package]] +name = "want" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" +dependencies = [ + "log", + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.10.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasi-cap-std-sync" +version = "6.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c22ba2ca9076574dc9de38f3141c63677ce5577ed204d57740691b12d35ec8b3" +dependencies = [ + "anyhow", + "async-trait", + "cap-fs-ext", + "cap-rand", + "cap-std", + "cap-time-ext", + "fs-set-times", + "io-extras", + "io-lifetimes", + "is-terminal", + "once_cell", + "rustix", + "system-interface", + "tracing", + "wasi-common", + "windows-sys 0.42.0", +] + +[[package]] +name = "wasi-common" +version = "6.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13183cd7fed5d94b482f4e30e7a0bbf9b52426d51a647019906a1ecff7e84143" +dependencies = [ + "anyhow", + "bitflags", + "cap-rand", + "cap-std", + "io-extras", + "rustix", + "thiserror", + "tracing", + "wasmtime", + "wiggle", + "windows-sys 0.42.0", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.84" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b" +dependencies = [ + "cfg-if 1.0.0", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.84" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454" +dependencies = [ + "cfg-if 1.0.0", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.84" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.84" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.84" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d" + +[[package]] +name = "wasm-encoder" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68f7d56227d910901ce12dfd19acc40c12687994dfb3f57c90690f80be946ec5" +dependencies = [ + "leb128", +] + +[[package]] +name = "wasmparser" +version = "0.100.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64b20236ab624147dfbb62cf12a19aaf66af0e41b8398838b66e997d07d269d4" +dependencies = [ + "indexmap", + "url", +] + +[[package]] +name = "wasmtime" +version = "6.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76a222f5fa1e14b2cefc286f1b68494d7a965f4bf57ec04c59bb62673d639af6" +dependencies = [ + "anyhow", + "async-trait", + "bincode", + "cfg-if 1.0.0", + "indexmap", + "libc", + "log", + "object", + "once_cell", + "paste", + "psm", + "rayon", + "serde", + "target-lexicon", + "wasmparser", + "wasmtime-cache", + "wasmtime-component-macro", + "wasmtime-cranelift", + "wasmtime-environ", + "wasmtime-fiber", + "wasmtime-jit", + "wasmtime-runtime", + "wat", + "windows-sys 0.42.0", +] + +[[package]] +name = "wasmtime-asm-macros" +version = "6.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4407a7246e7d2f3d8fb1cf0c72fda8dbafdb6dd34d555ae8bea0e5ae031089cc" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "wasmtime-cache" +version = "6.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ceb3adf61d654be0be67fffdce42447b0880481348785be5fe40b5dd7663a4c" +dependencies = [ + "anyhow", + "base64 0.13.1", + "bincode", + "directories-next", + "file-per-thread-logger", + "log", + "rustix", + "serde", + "sha2 0.10.6", + "toml 0.5.11", + "windows-sys 0.42.0", + "zstd 0.11.2+zstd.1.5.2", +] + +[[package]] +name = "wasmtime-component-macro" +version = "6.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fa788049cb25d2c6ca14408bbe8e25c5d529f90b22f2ae994048a9aaac3a23e" +dependencies = [ + "anyhow", + "proc-macro2", + "quote", + "syn", + "wasmtime-component-util", + "wasmtime-wit-bindgen", + "wit-parser", +] + +[[package]] +name = "wasmtime-component-util" +version = "6.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef714fd2c055ad19e5b9dfd21cf2efdcd57c841ef5b5e96a0340b4af0b4320e3" + +[[package]] +name = "wasmtime-cranelift" +version = "6.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c366bb8647e01fd08cb5589976284b00abfded5529b33d7e7f3f086c68304a4" +dependencies = [ + "anyhow", + "cranelift-codegen", + "cranelift-entity", + "cranelift-frontend", + "cranelift-native", + "cranelift-wasm", + "gimli", + "log", + "object", + "target-lexicon", + "thiserror", + "wasmparser", + "wasmtime-environ", +] + +[[package]] +name = "wasmtime-environ" +version = "6.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47b8b50962eae38ee319f7b24900b7cf371f03eebdc17400c1dc8575fc10c9a7" +dependencies = [ + "anyhow", + "cranelift-entity", + "gimli", + "indexmap", + "log", + "object", + "serde", + "target-lexicon", + "thiserror", + "wasmparser", + "wasmtime-types", +] + +[[package]] +name = "wasmtime-fiber" +version = "6.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41b166ca664b08e68d992b8184a7d66600bb3f2faf348fa98ce1d4b60195c591" +dependencies = [ + "cc", + "cfg-if 1.0.0", + "rustix", + "wasmtime-asm-macros", + "windows-sys 0.42.0", +] + +[[package]] +name = "wasmtime-jit" +version = "6.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffaed4f9a234ba5225d8e64eac7b4a5d13b994aeb37353cde2cbeb3febda9eaa" +dependencies = [ + "addr2line", + "anyhow", + "bincode", + "cfg-if 1.0.0", + "cpp_demangle", + "gimli", + "ittapi", + "log", + "object", + "rustc-demangle", + "serde", + "target-lexicon", + "wasmtime-environ", + "wasmtime-jit-debug", + "wasmtime-jit-icache-coherence", + "wasmtime-runtime", + "windows-sys 0.42.0", +] + +[[package]] +name = "wasmtime-jit-debug" +version = "6.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eed41cbcbf74ce3ff6f1d07d1b707888166dc408d1a880f651268f4f7c9194b2" +dependencies = [ + "object", + "once_cell", + "rustix", +] + +[[package]] +name = "wasmtime-jit-icache-coherence" +version = "6.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a28ae1e648461bfdbb79db3efdaee1bca5b940872e4175390f465593a2e54c" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "windows-sys 0.42.0", +] + +[[package]] +name = "wasmtime-runtime" +version = "6.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e704b126e4252788ccfc3526d4d4511d4b23c521bf123e447ac726c14545217b" +dependencies = [ + "anyhow", + "cc", + "cfg-if 1.0.0", + "indexmap", + "libc", + "log", + "mach", + "memfd", + "memoffset 0.6.5", + "paste", + "rand", + "rustix", + "wasmtime-asm-macros", + "wasmtime-environ", + "wasmtime-fiber", + "wasmtime-jit-debug", + "windows-sys 0.42.0", +] + +[[package]] +name = "wasmtime-types" +version = "6.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83e5572c5727c1ee7e8f28717aaa8400e4d22dcbd714ea5457d85b5005206568" +dependencies = [ + "cranelift-entity", + "serde", + "thiserror", + "wasmparser", +] + +[[package]] +name = "wasmtime-wasi" +version = "6.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01fe90b8643ef9742e2d9e1c76186b53e0d3c3e81aef1ead89c7a538d48947c9" +dependencies = [ + "anyhow", + "wasi-cap-std-sync", + "wasi-common", + "wasmtime", + "wiggle", +] + +[[package]] +name = "wasmtime-wit-bindgen" +version = "6.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdac99f42950e84adf9d284c60b8b015e5bb6010d5bc53c6a5b0070d6d19ca63" +dependencies = [ + "anyhow", + "heck", + "wit-parser", +] + +[[package]] +name = "wast" +version = "35.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ef140f1b49946586078353a453a1d28ba90adfc54dde75710bc1931de204d68" +dependencies = [ + "leb128", +] + +[[package]] +name = "wast" +version = "54.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d48d9d731d835f4f8dacbb8de7d47be068812cb9877f5c60d408858778d8d2a" +dependencies = [ + "leb128", + "memchr", + "unicode-width", + "wasm-encoder", +] + +[[package]] +name = "wat" +version = "1.0.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1db2e3ed05ea31243761439194bec3af6efbbaf87c4c8667fb879e4f23791a0" +dependencies = [ + "wast 54.0.1", +] + +[[package]] +name = "wax" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06c7a3bac6110ac062b7b422a442b7ee23e07209e2784a036654cab1e71bbafc" +dependencies = [ + "bstr", + "const_format", + "itertools", + "nom", + "nom-supreme", + "pori", + "regex", + "smallvec", + "thiserror", + "walkdir", +] + +[[package]] +name = "web-sys" +version = "0.3.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "wiggle" +version = "6.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4dd02c6a8098bc5fce898313df9ed13e3a98afcdb579a393070ee013505ca7ac" +dependencies = [ + "anyhow", + "async-trait", + "bitflags", + "thiserror", + "tracing", + "wasmtime", + "wiggle-macro", +] + +[[package]] +name = "wiggle-generate" +version = "6.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b657cf901cbffedfd90ececa74ed835864704562052202514d598930cf80bbaa" +dependencies = [ + "anyhow", + "heck", + "proc-macro2", + "quote", + "shellexpand", + "syn", + "witx", +] + +[[package]] +name = "wiggle-macro" +version = "6.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dd1d09a625f96effa501cdff06192eb6a89eeadd4fd4e2489e0c6907f604307" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wiggle-generate", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +dependencies = [ + "winapi", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-sys" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e2522491fbfcd58cc84d47aeb2958948c4b8982e9a2d8a2a35bbaed431390e7" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd" + +[[package]] +name = "winnow" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "faf09497b8f8b5ac5d3bb4d05c0a99be20f26fd3d5f2db7b0716e946d5103658" +dependencies = [ + "memchr", +] + +[[package]] +name = "winreg" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" +dependencies = [ + "winapi", +] + +[[package]] +name = "winx" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "129cd8ee937d535e1a239d9d3c9c0525af0454bc0967d9211a251be062513520" +dependencies = [ + "bitflags", + "io-lifetimes", + "windows-sys 0.45.0", +] + +[[package]] +name = "wit-parser" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f887c3da527a51b321076ebe6a7513026a4757b6d4d144259946552d6fc728b3" +dependencies = [ + "anyhow", + "id-arena", + "indexmap", + "log", + "pulldown-cmark", + "unicode-xid", + "url", +] + +[[package]] +name = "witx" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e366f27a5cabcddb2706a78296a40b8fcc451e1a6aba2fc1d94b4a01bdaaef4b" +dependencies = [ + "anyhow", + "log", + "thiserror", + "wast 35.0.2", +] + +[[package]] +name = "wws-config" +version = "1.1.1" +source = "git+https://github.com/vmware-labs/wasm-workers-server?rev=5207684#52076845fc079e4677b1a8dc90e93ef2916d8428" +dependencies = [ + "anyhow", + "serde", + "serde_json", + "toml 0.7.2", + "wws-runtimes-manager", +] + +[[package]] +name = "wws-data-kv" +version = "1.1.1" +source = "git+https://github.com/vmware-labs/wasm-workers-server?rev=5207684#52076845fc079e4677b1a8dc90e93ef2916d8428" +dependencies = [ + "anyhow", + "serde", + "serde_json", +] + +[[package]] +name = "wws-router" +version = "1.1.1" +source = "git+https://github.com/vmware-labs/wasm-workers-server?rev=5207684#52076845fc079e4677b1a8dc90e93ef2916d8428" +dependencies = [ + "lazy_static", + "regex", + "wax", + "wws-config", + "wws-runtimes-manager", + "wws-store", + "wws-worker", +] + +[[package]] +name = "wws-runtimes" +version = "1.1.1" +source = "git+https://github.com/vmware-labs/wasm-workers-server?rev=5207684#52076845fc079e4677b1a8dc90e93ef2916d8428" +dependencies = [ + "anyhow", + "serde", + "serde_json", + "wasmtime-wasi", + "wws-config", + "wws-runtimes-manager", + "wws-store", +] + +[[package]] +name = "wws-runtimes-manager" +version = "1.1.1" +source = "git+https://github.com/vmware-labs/wasm-workers-server?rev=5207684#52076845fc079e4677b1a8dc90e93ef2916d8428" +dependencies = [ + "anyhow", + "reqwest", + "serde", + "serde_json", + "sha256", + "toml 0.7.2", + "url", + "wws-store", +] + +[[package]] +name = "wws-server" +version = "1.1.1" +source = "git+https://github.com/vmware-labs/wasm-workers-server?rev=5207684#52076845fc079e4677b1a8dc90e93ef2916d8428" +dependencies = [ + "actix-files", + "actix-web", + "anyhow", + "wws-data-kv", + "wws-router", + "wws-worker", +] + +[[package]] +name = "wws-store" +version = "1.1.1" +source = "git+https://github.com/vmware-labs/wasm-workers-server?rev=5207684#52076845fc079e4677b1a8dc90e93ef2916d8428" +dependencies = [ + "anyhow", + "blake3", +] + +[[package]] +name = "wws-worker" +version = "1.1.1" +source = "git+https://github.com/vmware-labs/wasm-workers-server?rev=5207684#52076845fc079e4677b1a8dc90e93ef2916d8428" +dependencies = [ + "actix-web", + "anyhow", + "base64 0.21.0", + "serde", + "serde_json", + "toml 0.7.2", + "wasi-common", + "wasmtime", + "wasmtime-wasi", + "wws-config", + "wws-data-kv", + "wws-runtimes", +] + +[[package]] +name = "zstd" +version = "0.11.2+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4" +dependencies = [ + "zstd-safe 5.0.2+zstd.1.5.2", +] + +[[package]] +name = "zstd" +version = "0.12.3+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76eea132fb024e0e13fd9c2f5d5d595d8a967aa72382ac2f9d39fcc95afd0806" +dependencies = [ + "zstd-safe 6.0.4+zstd.1.5.4", +] + +[[package]] +name = "zstd-safe" +version = "5.0.2+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db" +dependencies = [ + "libc", + "zstd-sys", +] + +[[package]] +name = "zstd-safe" +version = "6.0.4+zstd.1.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7afb4b54b8910cf5447638cb54bf4e8a65cbedd783af98b98c62ffe91f185543" +dependencies = [ + "libc", + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.7+zstd.1.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94509c3ba2fe55294d752b79842c530ccfab760192521df74a081a78d2b3c7f5" +dependencies = [ + "cc", + "libc", + "pkg-config", +] diff --git a/containerd-shim-wws-v1/Cargo.toml b/containerd-shim-wws-v1/Cargo.toml new file mode 100644 index 00000000..696bbe10 --- /dev/null +++ b/containerd-shim-wws-v1/Cargo.toml @@ -0,0 +1,30 @@ +[package] +name = "containerd-shim-wws-v1" +version = "0.5.1" +authors = ["Wasm Labs team "] +edition = "2021" +repository = 'https://github.com/deislabs/containerd-wasm-shims' +license = "Apache-2.0" +homepage = 'https://github.com/deislabs/containerd-wasm-shims' +description = """ +Containerd shim for running Wasm Workers Server workloads. +""" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +containerd-shim = "~0.3" +containerd-shim-wasm = "0.1.1" +wws-config = { git = "https://github.com/vmware-labs/wasm-workers-server", rev = "5207684" } +wws-server = { git = "https://github.com/vmware-labs/wasm-workers-server", rev = "5207684" } +wws-router = { git = "https://github.com/vmware-labs/wasm-workers-server", rev = "5207684" } +log = "~0.4" +tokio = { version = "1", features = [ "full" ] } +tokio-util = { version = "0.6.10", features = [ "codec" ]} +chrono = "~0.4" + +[target.x86_64-unknown-linux-musl.dependencies] +openssl = { version = "=0.10.48", features = ["vendored"] } + +[target.aarch64-unknown-linux-musl.dependencies] +openssl = { version = "=0.10.48", features = ["vendored"] } \ No newline at end of file diff --git a/containerd-shim-wws-v1/quickstart.md b/containerd-shim-wws-v1/quickstart.md new file mode 100644 index 00000000..dc76c92e --- /dev/null +++ b/containerd-shim-wws-v1/quickstart.md @@ -0,0 +1,277 @@ +# Quickstart + +## Pre-requisites +Before you begin, you need to have the following installed: + +- [Docker](https://docs.docker.com/install/) version 4.13.1 (90346) or later with [containerd enabled](https://docs.docker.com/desktop/containerd/) +- [k3d](https://k3d.io/v5.4.6/#installation) +- [kubectl](https://kubernetes.io/docs/tasks/tools/#kubectl) +- [Wasm Workers Server binary](https://workers.wasmlabs.dev/quickstart) +- [Rust](https://www.rust-lang.org/tools/install) + +## Start and configure a k3d cluster + +Start a k3d cluster with the WASM shims already installed: + +```bash +k3d cluster create wasm-cluster --image ghcr.io/deislabs/containerd-wasm-shims/examples/k3d:v0.3.3 -p "8081:80@loadbalancer" --agents 2 --registry-create mycluster-registry:12345 +``` + +Apply RuntimeClass for Wasm Workers Server applications to use the `wws` Wasm shim: + +```bash +kubectl apply -f https://raw.githubusercontent.com/deislabs/containerd-wasm-shims/main/deployments/workloads/runtime.yaml +``` + +## Deploy an existing sample Wasm Workers Server application + +Deploy a pre-built sample `wws` application: + +```bash +kubectl apply -f https://raw.githubusercontent.com/deislabs/containerd-wasm-shims/main/deployments/workloads/workload.yaml +echo "waiting 5 seconds for workload to be ready" +sleep 5 +curl -v http://0.0.0.0:8081/wws/hello +``` + +Confirm you see a response from the sample application. For example: + +```output +$ curl -v http://0.0.0.0:8081/wws/hello +* Trying 0.0.0.0:8081... +* TCP_NODELAY set +* Connected to 0.0.0.0 (127.0.0.1) port 8081 (#0) +> GET /hello HTTP/1.1 +> Host: 0.0.0.0:8081 +> User-Agent: curl/7.68.0 +> Accept: */* +> +* Mark bundle as not supporting multiuse +< HTTP/1.1 200 OK +< Accept: */* +< Accept-Encoding: gzip +< Content-Length: 5 +< Date: Tue, 11 Oct 2022 19:12:17 GMT +< Host: 0.0.0.0:8081 +< User-Agent: curl/7.68.0 +< X-Forwarded-For: 10.42.1.1 +< X-Forwarded-Host: 0.0.0.0:8081 +< X-Forwarded-Port: 8081 +< X-Forwarded-Proto: http +< X-Forwarded-Server: traefik-7cd4fcff68-xr2gh +< X-Real-Ip: 10.42.1.1 +< Content-Type: text/plain; charset=utf-8 +< +* Connection #0 to host 0.0.0.0 left intact + + + Wasm Workers Server + + + + + + +
+

Hello from Wasm Workers Server 👋

+
Replying to /hello
+Method: GET
+User Agent: undefined
+Payload: -
+

+ This page was generated by a JavaScript file running in WebAssembly. +

+
+ +``` + +This example is a website, so feel free to check it on your browser by accessing . + +Delete the pre-built sample Wasm Workers Server application: + +```bash +kubectl delete -f https://raw.githubusercontent.com/deislabs/containerd-wasm-shims/main/deployments/workloads/workload.yaml +``` + +## Build and deploy a Wasm Workers Server application + +Clone the [deislabs/containerd-wasm-shims](https://github.com/deislabs/containerd-wasm-shims) project and navigate to the `containerd-wasm-shims/images/wws` directory. This directory contains the source for the application you deployed in the previous section. + +Note that Wasm Workers Server only requires the source code file for languages like JavaScript. You have more information about how it works in the [documentation](https://workers.wasmlabs.dev/docs/get-started/how-it-works). + +```bash +git clone https://github.com/deislabs/containerd-wasm-shims.git +cd containerd-wasm-shims/images/wws +``` + +## Run the application + +Use `wws` to run the application on your development computer. For example: + +```bash +wws . +``` + +The application is running at . + +Return to the terminal window running `wws` and stop the application. + +## Create a container image for the application + +Use `docker` to build the container image and push it to the k3d registry: + +```bash +docker buildx build --platform=wasi/wasm -t localhost:12345/qs-wasm-wws . +docker push localhost:12345/qs-wasm-wws:latest +``` + +## Deploy the application + +Create a `qs.yaml` file with the following: + +```yml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: wasm-wws +spec: + replicas: 1 + selector: + matchLabels: + app: wasm-wws + template: + metadata: + labels: + app: wasm-wws + spec: + runtimeClassName: wasmtime-wws + containers: + - name: testwasm + image: mycluster-registry:12345/qs-wasm-wws:latest + command: ["/"] +--- +apiVersion: v1 +kind: Service +metadata: + name: wasm-wws +spec: + ports: + - protocol: TCP + port: 80 + targetPort: 3000 + selector: + app: wasm-wws +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: wasm-wws + annotations: + ingress.kubernetes.io/ssl-redirect: "false" + kubernetes.io/ingress.class: traefik +spec: + rules: + - http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: wasm-wws + port: + number: 80 +``` + +Deploy the application and confirm it is running: + +```bash +kubectl apply -f qs.yaml +echo "waiting 5 seconds for workload to be ready" +sleep 5 +curl -v http://0.0.0.0:8081/hello +``` + +Confirm you see a response from the sample application. For example: + +```output +$ curl -v http://0.0.0.0:8081/hello +* Trying 0.0.0.0:8081... +* TCP_NODELAY set +* Connected to 0.0.0.0 (127.0.0.1) port 8081 (#0) +> GET /hello HTTP/1.1 +> Host: 0.0.0.0:8081 +> User-Agent: curl/7.68.0 +> Accept: */* +> +* Mark bundle as not supporting multiuse +< HTTP/1.1 200 OK +< Accept: */* +< Accept-Encoding: gzip +< Content-Length: 5 +< Date: Tue, 11 Oct 2022 20:29:12 GMT +< Host: 0.0.0.0:8081 +< User-Agent: curl/7.68.0 +< X-Forwarded-For: 10.42.0.0 +< X-Forwarded-Host: 0.0.0.0:8081 +< X-Forwarded-Port: 8081 +< X-Forwarded-Proto: http +< X-Forwarded-Server: traefik-7cd4fcff68-xr2gh +< X-Real-Ip: 10.42.0.0 +< Content-Type: text/plain; charset=utf-8 +< +* Connection #0 to host 0.0.0.0 left intact + + + Wasm Workers Server + + + + + + +
+

Hello from Wasm Workers Server 👋

+
Replying to /hello
+Method: GET
+User Agent: undefined
+Payload: -
+

+ This page was generated by a JavaScript file running in WebAssembly. +

+
+ +``` + +## Clean up + +Remove the sample application: + +```bash +kubectl delete -f qs.yaml +``` + +Delete the cluster: + +```bash +k3d cluster delete wasm-cluster +``` + +## Next steps + +Try running Wasm applications on [Docker Desktop](https://docs.docker.com/desktop/wasm/) or on Kubernetes, such as [AKS](https://learn.microsoft.com/en-us/azure/aks/use-wasi-node-pools). \ No newline at end of file diff --git a/containerd-shim-wws-v1/src/main.rs b/containerd-shim-wws-v1/src/main.rs new file mode 100644 index 00000000..1c1a3dec --- /dev/null +++ b/containerd-shim-wws-v1/src/main.rs @@ -0,0 +1,228 @@ +use chrono::{DateTime, Utc}; +use containerd_shim as shim; +use containerd_shim_wasm::sandbox::error::Error; +use containerd_shim_wasm::sandbox::instance::{EngineGetter, InstanceConfig}; +use containerd_shim_wasm::sandbox::oci; +use containerd_shim_wasm::sandbox::{Instance, ShimCli}; +use log::{error, info}; +use std::path::Path; +use std::path::PathBuf; +use std::sync::mpsc::channel; +use std::sync::mpsc::Sender; +use std::sync::Arc; +use std::sync::{Condvar, Mutex}; +use std::thread; +use tokio::runtime::Runtime; +use wws_config::Config; +use wws_router::Routes; +use wws_server::serve; + +/// URL to listen to in wws +const WWS_ADDR: &str = "0.0.0.0"; +const WWS_PORT: u16 = 3000; + +type ExitCode = Arc<(Mutex)>>, Condvar)>; + +pub struct Workers { + exit_code: ExitCode, + id: String, + // TODO: set the stdio to redirect the logs to the pod. Currently, we only set the + // stderr as Wasm Workers use stdin/stdout to pass and receive data. This behavior + // will change in the future. + // stdin: String, + // stdout: String, + stderr: String, + bundle: String, + shutdown_signal: Arc<(Mutex, Condvar)>, +} + +pub fn prepare_module(bundle: String) -> Result { + info!("[wws] Preparing module"); + let mut spec = oci::load(Path::new(&bundle).join("config.json").to_str().unwrap()) + .expect("unable to load OCI bundle"); + + info!("[wws] Canonicalize roots"); + spec.canonicalize_rootfs(&bundle) + .map_err(|err| Error::Others(format!("could not canonicalize rootfs: {err}")))?; + + info!("[wws] Get root"); + let working_dir = oci::get_root(&spec); + info!("[wws] loading project: {}", working_dir.display()); + + Ok(working_dir.clone()) +} + +/// Implement the "default" interface from runwasi +impl Instance for Workers { + type E = (); + fn new(id: String, cfg: Option<&InstanceConfig>) -> Self { + info!("[wws] new instance"); + let cfg = cfg.unwrap(); + + Workers { + exit_code: Arc::new((Mutex::new(None), Condvar::new())), + id, + // TODO: set the stdio to redirect the logs to the pod. Currently, we only set the + // stderr as Wasm Workers use stdin/stdout to pass and receive data. This behavior + // will change in the future. + // stdin: cfg.get_stdin().unwrap_or_default(), + // stdout: cfg.get_stdout().unwrap_or_default(), + stderr: cfg.get_stderr().unwrap_or_default(), + bundle: cfg.get_bundle().unwrap_or_default(), + shutdown_signal: Arc::new((Mutex::new(false), Condvar::new())), + } + } + + fn start(&self) -> Result { + info!("[wws] Starting the wws shim"); + let exit_code = self.exit_code.clone(); + let shutdown_signal = self.shutdown_signal.clone(); + let (tx, rx) = channel::>(); + let bundle = self.bundle.clone(); + + // TODO: set the stdio to redirect the logs to the pod. Currently, we only set the + // stderr as Wasm Workers use stdin/stdout to pass and receive data. This behavior + // will change in the future. + // let stdin = self.stdin.clone(); + // let stdout = self.stdout.clone(); + let stderr = self.stderr.clone(); + + thread::Builder::new() + .name(self.id.clone()) + .spawn(move || { + info!("[wws] Starting the process!"); + let working_dir = match prepare_module(bundle) { + Ok(f) => f, + Err(err) => { + info!("[wws] Error when preparing the module!"); + tx.send(Err(err)).unwrap(); + return; + } + }; + + info!("[wws] working_dir: {}", &working_dir.display()); + + let rt = Runtime::new().unwrap(); + rt.block_on(async { + let rx_future = tokio::task::spawn_blocking(move || { + let (lock, cvar) = &*shutdown_signal; + let mut shutdown = lock.lock().unwrap(); + while !*shutdown { + shutdown = cvar.wait(shutdown).unwrap(); + } + }); + + // Configure and run wws + info!("[wws] Starting wws"); + + let path = working_dir.clone(); + let stderr_path = Path::new(&stderr); + + // Check the runtimes + let config = match Config::load(&path) { + Ok(c) => c, + Err(err) => { + error!("[wws] There was an error reading the .wws.toml file. It will be ignored"); + error!("[wws] Error: {err}"); + + Config::default() + } + }; + + // Check if there're missing runtimes + if config.is_missing_any_runtime(&path) { + error!("[wws] Required language runtimes are not installed. Some files may not be considered workers"); + error!("[wws] You can install the missing runtimes with: wws runtimes install"); + } + + let routes = Routes::new(&path, "", &config); + + // Final server + let f = serve(&path, routes, WWS_ADDR, WWS_PORT, Some(stderr_path)).await.unwrap(); + + info!("[wws] Notify main thread we are about to start"); + tx.send(Ok(())).unwrap(); + tokio::select! { + _ = f => { + info!("[wws] Server shut down: exiting"); + + let (lock, cvar) = &*exit_code; + let mut ec = lock.lock().unwrap(); + *ec = Some((137, Utc::now())); + cvar.notify_all(); + }, + _ = rx_future => { + info!("[wws] User requested shutdown: exiting"); + let (lock, cvar) = &*exit_code; + let mut ec = lock.lock().unwrap(); + *ec = Some((0, Utc::now())); + cvar.notify_all(); + }, + } + }) + })?; + + info!("[wws] Waiting for start notification"); + match rx.recv().unwrap() { + Ok(_) => (), + Err(err) => { + error!("[wws] Error starting instance: {err}"); + let code = self.exit_code.clone(); + + let (lock, cvar) = &*code; + let mut ec = lock.lock().unwrap(); + *ec = Some((139, Utc::now())); + cvar.notify_all(); + return Err(err); + } + } + + // TODO: Can we try to cast and default to 1 when it fails? + Ok(1) // TODO: PID: I wanted to use a thread ID here, but threads use a u64, the API wants a u32 + } + + fn kill(&self, signal: u32) -> Result<(), Error> { + if signal != 9 && signal != 2 { + return Err(Error::InvalidArgument( + "only SIGKILL and SIGINT are supported".to_string(), + )); + } + + let (lock, cvar) = &*self.shutdown_signal; + let mut shutdown = lock.lock().unwrap(); + *shutdown = true; + cvar.notify_all(); + + Ok(()) + } + + fn delete(&self) -> Result<(), Error> { + Ok(()) + } + + fn wait(&self, channel: Sender<(u32, DateTime)>) -> Result<(), Error> { + let code = self.exit_code.clone(); + thread::spawn(move || { + let (lock, cvar) = &*code; + let mut exit = lock.lock().unwrap(); + while (*exit).is_none() { + exit = cvar.wait(exit).unwrap(); + } + let ec = (*exit).unwrap(); + channel.send(ec).unwrap(); + }); + + Ok(()) + } +} + +impl EngineGetter for Workers { + type E = (); + fn new_engine() -> Result { + Ok(()) + } +} + +fn main() { + shim::run::>("io.containerd.wws.v1", None); +} diff --git a/deployments/k3d/Makefile b/deployments/k3d/Makefile index 75bbb8f6..c77616fb 100644 --- a/deployments/k3d/Makefile +++ b/deployments/k3d/Makefile @@ -1,9 +1,11 @@ IMAGE_NAME ?= k3swithshims CLUSTER_NAME ?= k3s-default +PLATFORM ?= linux/amd64 ARCH ?= x86_64 TARGET ?= $(ARCH)-unknown-linux-musl TEST_IMG_NAME_SPIN ?= wasmtest_spin:latest TEST_IMG_NAME_SLIGHT ?= wasmtest_slight:latest +TEST_IMG_NAME_WWS ?= wasmtest_wws:latest compile-musl-spin: make build-spin-cross-$(TARGET) -C ../.. @@ -11,16 +13,20 @@ compile-musl-spin: compile-musl-slight: make build-slight-cross-$(TARGET) -C ../.. -move-musl-to-tmp: compile-musl-spin compile-musl-slight +compile-musl-wws: + make build-wws-cross-$(TARGET) -C ../.. + +move-musl-to-tmp: compile-musl-spin compile-musl-slight compile-musl-wws mkdir -p ./.tmp cp ../../containerd-shim-slight-v1/target/$(TARGET)/release/containerd-shim-*-v1 ./.tmp/ cp ../../containerd-shim-spin-v1/target/$(TARGET)/release/containerd-shim-*-v1 ./.tmp/ + cp ../../containerd-shim-wws-v1/target/$(TARGET)/release/containerd-shim-*-v1 ./.tmp/ build-multi-k3d-image: move-musl-to-tmp docker buildx build -t $(IMAGE_NAME) --platform linux/amd64,linux/arm64 . build-dev-k3d-image: move-musl-to-tmp - docker buildx build -t $(IMAGE_NAME) --load --platform linux/amd64 . + docker buildx build -t $(IMAGE_NAME) --load --platform $(PLATFORM) . create-k3d: build-dev-k3d-image k3d cluster create $(CLUSTER_NAME) --image $(IMAGE_NAME) --api-port 6550 -p "8081:80@loadbalancer" --agents 1 @@ -28,23 +34,26 @@ create-k3d: build-dev-k3d-image build-workload-images: docker buildx build --platform=wasi/wasm --load -t $(TEST_IMG_NAME_SPIN) ../../images/spin docker buildx build --platform=wasi/wasm --load -t $(TEST_IMG_NAME_SLIGHT) ../../images/slight + docker buildx build --platform=wasi/wasm --load -t $(TEST_IMG_NAME_WWS) ../../images/wws load-workload-images: build-workload-images k3d image load $(TEST_IMG_NAME_SPIN) k3d image load $(TEST_IMG_NAME_SLIGHT) + k3d image load $(TEST_IMG_NAME_WWS) up: create-k3d load-workload-images - kubectl label nodes k3d-k3s-default-agent-0 spin-enabled=true slight-enabled=true + kubectl label nodes k3d-k3s-default-agent-0 spin-enabled=true slight-enabled=true wws-enabled=true kubectl apply -f ./workload test: - curl localhost:8081/spin/hello + curl localhost:8081/spin/hello curl localhost:8081/slight/hello + curl localhost:8081/wws/hello integration: move-musl-to-tmp cd ../.. && cargo test -- --nocapture -clean: +clean: k3d cluster delete $(CLUSTER_NAME) install-k3d: diff --git a/deployments/k3d/README.md b/deployments/k3d/README.md index 6a255f01..224abaf2 100644 --- a/deployments/k3d/README.md +++ b/deployments/k3d/README.md @@ -24,6 +24,7 @@ echo "waiting 5 seconds for workload to be ready" sleep 5 curl -v http://127.0.0.1:8081/spin/hello curl -v http://127.0.0.1:8081/slight/hello +curl -v http://127.0.0.1:8081/wws/hello ``` To tear down the cluster, run the following. diff --git a/deployments/k3d/config.toml.tmpl b/deployments/k3d/config.toml.tmpl index 158dd92b..21bf4030 100644 --- a/deployments/k3d/config.toml.tmpl +++ b/deployments/k3d/config.toml.tmpl @@ -106,3 +106,6 @@ enable_keychain = true [plugins.cri.containerd.runtimes.slight] runtime_type = "io.containerd.slight.v1" + +[plugins.cri.containerd.runtimes.wws] + runtime_type = "io.containerd.wws.v1" diff --git a/deployments/k3d/workload/runtime.yaml b/deployments/k3d/workload/runtime.yaml index fe306e19..f283cd70 100644 --- a/deployments/k3d/workload/runtime.yaml +++ b/deployments/k3d/workload/runtime.yaml @@ -14,4 +14,13 @@ metadata: handler: spin scheduling: nodeSelector: - spin-enabled: "true" \ No newline at end of file + spin-enabled: "true" +--- +apiVersion: node.k8s.io/v1 +kind: RuntimeClass +metadata: + name: wasmtime-wws +handler: wws +scheduling: + nodeSelector: + wws-enabled: "true" \ No newline at end of file diff --git a/deployments/k3d/workload/workload.yaml b/deployments/k3d/workload/workload.yaml index 26f0c5c5..4f6a569e 100644 --- a/deployments/k3d/workload/workload.yaml +++ b/deployments/k3d/workload/workload.yaml @@ -71,6 +71,39 @@ spec: selector: app: wasm-spin --- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: wasm-wws +spec: + replicas: 1 + selector: + matchLabels: + app: wasm-wws + template: + metadata: + labels: + app: wasm-wws + spec: + runtimeClassName: wasmtime-wws + containers: + - name: wws-hello + imagePullPolicy: Never + image: wasmtest_wws:latest + command: ["/"] +--- +apiVersion: v1 +kind: Service +metadata: + name: wasm-wws +spec: + ports: + - protocol: TCP + port: 80 + targetPort: 3000 + selector: + app: wasm-wws +--- # Middleware # Strip prefix /spin apiVersion: traefik.containo.us/v1alpha1 @@ -83,6 +116,7 @@ spec: prefixes: - /spin - /slight + - /wws --- apiVersion: networking.k8s.io/v1 kind: Ingress @@ -108,5 +142,12 @@ spec: backend: service: name: wasm-slight + port: + number: 80 + - path: /wws + pathType: Prefix + backend: + service: + name: wasm-wws port: number: 80 \ No newline at end of file diff --git a/deployments/k8s/all-in-one-demo.yaml b/deployments/k8s/all-in-one-demo.yaml index 5f315c58..f9978c0c 100644 --- a/deployments/k8s/all-in-one-demo.yaml +++ b/deployments/k8s/all-in-one-demo.yaml @@ -16,6 +16,15 @@ scheduling: nodeSelector: "kubernetes.azure.com/wasmtime-spin-v1": "true" --- +apiVersion: node.k8s.io/v1 +kind: RuntimeClass +metadata: + name: "wasmtime-wws-v1" +handler: "wws" +scheduling: + nodeSelector: + "kubernetes.azure.com/wasmtime-wws-v1": "true" +--- apiVersion: apps/v1 kind: Deployment metadata: @@ -80,4 +89,37 @@ spec: targetPort: 80 selector: app: wasm-spin + type: LoadBalancer +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: wasm-wws +spec: + replicas: 3 + selector: + matchLabels: + app: wasm-wws + template: + metadata: + labels: + app: wasm-wws + spec: + runtimeClassName: wasmtime-wws-v1 + containers: + - name: testwasm + image: ghcr.io/deislabs/containerd-wasm-shims/examples/wws-js-hello:latest + command: ["/"] +--- +apiVersion: v1 +kind: Service +metadata: + name: wasm-wws +spec: + ports: + - protocol: TCP + port: 80 + targetPort: 3000 + selector: + app: wasm-wws type: LoadBalancer \ No newline at end of file diff --git a/deployments/workloads/runtime.yaml b/deployments/workloads/runtime.yaml index 129e2506..906f2add 100644 --- a/deployments/workloads/runtime.yaml +++ b/deployments/workloads/runtime.yaml @@ -8,4 +8,10 @@ apiVersion: node.k8s.io/v1 kind: RuntimeClass metadata: name: wasmtime-spin -handler: spin \ No newline at end of file +handler: spin +--- +apiVersion: node.k8s.io/v1 +kind: RuntimeClass +metadata: + name: wasmtime-wws +handler: wws \ No newline at end of file diff --git a/deployments/workloads/workload.yaml b/deployments/workloads/workload.yaml index ff2baa09..5958678b 100644 --- a/deployments/workloads/workload.yaml +++ b/deployments/workloads/workload.yaml @@ -76,6 +76,39 @@ spec: selector: app: wasm-spin --- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: wasm-wws +spec: + replicas: 1 + selector: + matchLabels: + app: wasm-wws + template: + metadata: + labels: + app: wasm-wws + spec: + runtimeClassName: wasmtime-wws + containers: + - name: wws-hello + imagePullPolicy: Never + image: ghcr.io/deislabs/containerd-wasm-shims/examples/wws-js-hello:v0.5.1 + command: ["/"] +--- +apiVersion: v1 +kind: Service +metadata: + name: wasm-wws +spec: + ports: + - protocol: TCP + port: 80 + targetPort: 3000 + selector: + app: wasm-wws +--- # Middleware # Strip prefix /spin apiVersion: traefik.containo.us/v1alpha1 @@ -88,6 +121,7 @@ spec: prefixes: - /spin - /slight + - /wws --- apiVersion: networking.k8s.io/v1 kind: Ingress @@ -113,5 +147,12 @@ spec: backend: service: name: wasm-slight + port: + number: 80 + - path: /wws + pathType: Prefix + backend: + service: + name: wasm-wws port: number: 80 \ No newline at end of file diff --git a/images/wws-python/Dockerfile b/images/wws-python/Dockerfile new file mode 100644 index 00000000..df084aa0 --- /dev/null +++ b/images/wws-python/Dockerfile @@ -0,0 +1,13 @@ +# TODO: Remove this step once https://github.com/vmware-labs/wasm-workers-server/issues/120 is closed +FROM --platform=${BUILDPLATFORM} bitnami/minideb AS certs +RUN install_packages ca-certificates + +FROM --platform=${BUILDPLATFORM} ghcr.io/vmware-labs/wws:latest AS installer +COPY --from=certs /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt +# Install the Python runtime +RUN ["/wws", "runtimes", "install", "python", "latest"] + +FROM scratch +COPY --from=installer /.wws ./.wws +COPY --from=installer /.wws.toml . +COPY ./hello.py . \ No newline at end of file diff --git a/images/wws-python/hello.py b/images/wws-python/hello.py new file mode 100644 index 00000000..ebf0e1dc --- /dev/null +++ b/images/wws-python/hello.py @@ -0,0 +1,45 @@ +def worker(req): + # Body response + body = '''\ + + +Wasm Workers Server + + + + + + +
+

Hello from Wasm Workers Server 👋

+
Replying to {url}
+Method: {method}
+Host header: {host}
+

+ This page was generated by a Python script +

+
+ + '''.format( + url=req.url, + method=req.method, + host=req.headers["host"] + ) + + print("Log from the Python module!", file=sys.stderr) + + # Build a new response + res = Response(body) + + # Add a new header + res.headers["x-generated-by"] = "wasm-workers-server" + + return res \ No newline at end of file diff --git a/images/wws/Dockerfile b/images/wws/Dockerfile new file mode 100644 index 00000000..f15672e5 --- /dev/null +++ b/images/wws/Dockerfile @@ -0,0 +1,2 @@ +FROM scratch +COPY ./hello.js . \ No newline at end of file diff --git a/images/wws/hello.js b/images/wws/hello.js new file mode 100644 index 00000000..11ea4abd --- /dev/null +++ b/images/wws/hello.js @@ -0,0 +1,55 @@ +/** + * Builds a reply to the given request + */ +const reply = (request) => { + if (request.method != "GET") { + // Don't allow other methods. + // Here you can see how to return a custom status + return new Response("Method not allowed", { + status: 405 + }); + } + + // Body response + const body = ` + + Wasm Workers Server + + + + + + +
+

Hello from Wasm Workers Server 👋

+
Replying to ${request.url}
+Method: ${request.method}
+User Agent: ${request.headers.get("user-agent")}
+Payload: ${request.body || "-"}
+

+ This page was generated by a JavaScript file running in WebAssembly. +

+
+`; + + // Build a new response + let response = new Response(body); + + // Add a new header + response.headers.set("x-generated-by", "wasm-workers-server"); + + return response; +} + +// Subscribe to the Fetch event +addEventListener("fetch", event => { + return event.respondWith(reply(event.request)); +}); diff --git a/tests/common/mod.rs b/tests/common/mod.rs index 20469ac1..c01e05de 100644 --- a/tests/common/mod.rs +++ b/tests/common/mod.rs @@ -42,6 +42,7 @@ async fn setup_test_helper(test_ns: &str) -> Result { let bin_path = "deployments/k3d/.tmp/"; let slight_shim_path = "deployments/k3d/.tmp/containerd-shim-slight-v1"; let spin_shim_path = "deployments/k3d/.tmp/containerd-shim-spin-v1"; + let wws_shim_path = "deployments/k3d/.tmp/containerd-shim-wws-v1"; if which_binary(slight_shim_path).await.is_err() { println!(" >>> install containerd-shim-slight-v1"); @@ -89,6 +90,29 @@ async fn setup_test_helper(test_ns: &str) -> Result { } } + if which_binary(wws_shim_path).await.is_err() { + println!(" >>> install containerd-shim-wws-v1"); + let mut cmd = Command::new("cross"); + cmd.arg("build") + .arg("--target") + .arg("x86_64-unknown-linux-musl") + .arg("--release") + .arg("--manifest-path") + .arg("containerd-shim-wws-v1/Cargo.toml"); + let output = cmd.output().await?; + if !output.status.success() { + anyhow::bail!("failed to build containerd-shim-wws-v1"); + } + let mut cmd = Command::new("sudo"); + cmd.arg("install") + .arg("containerd-shim-wws-v1/target/x86_64-unknown-linux-musl/release/containerd-shim-wws-v1") + .arg(bin_path); + let output = cmd.output().await?; + if !output.status.success() { + anyhow::bail!("failed to install containerd-shim-wws-v1"); + } + } + // build docker image let mut cmd = Command::new("docker"); cmd.arg("build").arg("-t").arg(test_ns).arg(dockerfile_path); diff --git a/tests/integration_test.rs b/tests/integration_test.rs index fe59e529..1a9f1f38 100644 --- a/tests/integration_test.rs +++ b/tests/integration_test.rs @@ -72,3 +72,26 @@ async fn spin_test() -> Result<()> { Ok(()) } + +#[tokio::test] +async fn wws_test() -> Result<()> { + let host_port = 8082; + + // check the test pod is running + let cluster_name = format!("k3d-{}-{}", "test", "cluster"); + list_pods(&cluster_name).await?; + + // curl for hello + println!(" >>> curl http://localhost:{}/wws/hello", host_port); + let mut res = Vec::new(); + retry_get( + &format!("http://localhost:{}/wws/hello", host_port), + &mut res, + RETRY_TIMES, + INTERVAL_IN_SECS, + ) + .await?; + println!("{}", String::from_utf8_lossy(&res)); + + Ok(()) +} diff --git a/tests/setup.py b/tests/setup.py index 3a979820..97a50bd7 100644 --- a/tests/setup.py +++ b/tests/setup.py @@ -10,10 +10,10 @@ def which(binary_name): return binary_path # panic raise RuntimeError("Could not find %s" % binary_name) - + def setup_test(target): - # run this as root + # run this as root which("k3d") which("cross") which("docker") @@ -23,8 +23,9 @@ def setup_test(target): bin_path = "deployments/k3d/.tmp/" slight_shim_path = "deployments/k3d/.tmp/containerd-shim-slight-v1" spin_shim_path = "deployments/k3d/.tmp/containerd-shim-spin-v1" + wws_shim_path = "deployments/k3d/.tmp/containerd-shim-wws-v1" cluster_name = "test-cluster" - + # create bin_path if not exists if not os.path.exists(bin_path): os.makedirs(bin_path) @@ -34,13 +35,19 @@ def setup_test(target): except RuntimeError: print(">>> install containerd-shim-slight-v1") os.system(f"cp containerd-shim-slight-v1/target/{target}/release/containerd-shim-slight-v1 {bin_path}/containerd-shim-slight-v1") - + try: which(spin_shim_path) except RuntimeError: print(">>> install containerd-shim-spin-v1") os.system(f"cp containerd-shim-spin-v1/target/{target}/release/containerd-shim-spin-v1 {bin_path}/containerd-shim-spin-v1") + try: + which(wws_shim_path) + except RuntimeError: + print(">>> install containerd-shim-wws-v1") + os.system(f"cp containerd-shim-wws-v1/target/{target}/release/containerd-shim-wws-v1 {bin_path}/containerd-shim-wws-v1") + # build the docker image os.system(f"docker build -t k3d-shim-test {dockerfile_path}") @@ -49,31 +56,36 @@ def setup_test(target): # wait for the cluster to be ready os.system("kubectl wait --for=condition=ready node --all --timeout=120s") - + # build slight and spin images locally os.system("docker buildx build -t slight-hello-world:latest ./images/slight --load") os.system("docker buildx build -t spin-hello-world:latest ./images/spin --load") - + os.system("docker buildx build -t wws-hello-world:latest ./images/wws --load") + # create dir if not exists if not os.path.exists("test/out_slight"): os.makedirs("test/out_slight") if not os.path.exists("test/out_spin"): os.makedirs("test/out_spin") - + if not os.path.exists("test/out_wws"): + os.makedirs("test/out_wws") + # save docker images to tar ball os.system("docker save -o test/out_slight/img.tar slight-hello-world:latest") os.system("docker save -o test/out_spin/img.tar spin-hello-world:latest") + os.system("docker save -o test/out_wws/img.tar wws-hello-world:latest") # load tar ball to k3d cluster os.system(f"k3d image import test/out_slight/img.tar -c {cluster_name}") os.system(f"k3d image import test/out_spin/img.tar -c {cluster_name}") + os.system(f"k3d image import test/out_wws/img.tar -c {cluster_name}") # wait for 5 seconds time.sleep(5) print(">>> apply workloads") os.system("kubectl apply -f tests/workloads") - + # wait for 25 seconds time.sleep(25) @@ -84,6 +96,6 @@ def setup_test(target): if __name__ == '__main__': if len(sys.argv) < 2: target = "x86_64-unknown-linux-musl" - else: + else: target = sys.argv[1] setup_test(target = target) \ No newline at end of file diff --git a/tests/workloads/runtime.yaml b/tests/workloads/runtime.yaml index 129e2506..906f2add 100644 --- a/tests/workloads/runtime.yaml +++ b/tests/workloads/runtime.yaml @@ -8,4 +8,10 @@ apiVersion: node.k8s.io/v1 kind: RuntimeClass metadata: name: wasmtime-spin -handler: spin \ No newline at end of file +handler: spin +--- +apiVersion: node.k8s.io/v1 +kind: RuntimeClass +metadata: + name: wasmtime-wws +handler: wws \ No newline at end of file diff --git a/tests/workloads/workload.yaml b/tests/workloads/workload.yaml index ddf40bcb..c9835556 100644 --- a/tests/workloads/workload.yaml +++ b/tests/workloads/workload.yaml @@ -78,6 +78,46 @@ spec: selector: app: wasm-spin --- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: wasm-wws +spec: + replicas: 1 + selector: + matchLabels: + app: wasm-wws + template: + metadata: + labels: + app: wasm-wws + spec: + runtimeClassName: wasmtime-wws + containers: + - name: testwasm + image: docker.io/library/wws-hello-world:latest + imagePullPolicy: Never # prevent k8s from pulling the image from a registry + command: ["/"] + resources: # limit the resources to 128Mi of memory and 100m of CPU + limits: + cpu: 100m + memory: 128Mi + requests: + cpu: 100m + memory: 128Mi +--- +apiVersion: v1 +kind: Service +metadata: + name: wasm-wws +spec: + ports: + - protocol: TCP + port: 80 + targetPort: 3000 + selector: + app: wasm-wws +--- # Middleware # Strip prefix /spin apiVersion: traefik.containo.us/v1alpha1 @@ -90,6 +130,7 @@ spec: prefixes: - /spin - /slight + - /wws --- apiVersion: networking.k8s.io/v1 kind: Ingress @@ -115,5 +156,12 @@ spec: backend: service: name: wasm-slight + port: + number: 80 + - path: /wws + pathType: Prefix + backend: + service: + name: wasm-wws port: number: 80 \ No newline at end of file