FROM rust:1.93.0-alpine3.23 AS builder
RUN rustup target add wasm32-wasip1
RUN apk update
WORKDIR /rs-zip2sqlite
RUN apk add clang21
RUN apk add cmake
RUN apk add ninja
RUN apk add python3
RUN apk add wasi-sdk
RUN apk add musl-dev
COPY --link ./Cargo.toml ./
COPY --link ./Cargo.lock ./
RUN mkdir src
RUN echo 'fn main(){}' > ./src/main.rs
RUN cargo check
ENV CFLAGS='-I/usr/share/wasi-sysroot/include/wasm32-wasip1'
RUN cargo build --target wasm32-wasip1 --profile release-wasi
COPY --link ./src/ ./src/
RUN touch ./src/lib.rs
RUN touch ./src/main.rs
RUN cargo build --target wasm32-wasip1 --profile release-wasi
RUN cp target/wasm32-wasip1/release-wasi/rs-zip2sqlite.wasm /usr/local/bin/
FROM golang:1.25.6-alpine3.23 AS demo
RUN go install -v github.com/tetratelabs/wazero/cmd/wazero@v1.11.0
COPY --link --from=builder /usr/local/bin/rs-zip2sqlite.wasm /
RUN apk add zip
RUN apk add sqlite
RUN apk add jq
RUN mkdir -p ./sample.d
RUN printf hw1 > ./sample.d/hw1.txt
RUN find ./sample.d -type f | zip -@ -T -v -o ./sample.d/input.zip
RUN cat ./sample.d/input.zip | \
wazero \
run \
-mount ./sample.d:/guest.d \
/rs-zip2sqlite.wasm \
-- \
--outname /guest.d/output.sqlar
RUN sqlite3 -json ./sample.d/output.sqlar 'SELECT * FROM sqlar' | jq '.[]'
RUN cp /rs-zip2sqlite.wasm /usr/local/bin/
FROM scratch
COPY --link --from=demo /usr/local/bin/rs-zip2sqlite.wasm /