# Builds one2html + onenote.rs (src/lib.rs wraps them over an in-memory file # system) to one WebAssembly module for johnmcm.com's /onenote-viewer. # Run build.ps1; output lands in frontend/vendor/local/onenote@1/. FROM rust:1-slim-bookworm@sha256:2c3a22f0a5533ea2dd5a16627bc841228151faa2d4de2644ac9987e4a2f1f2fa AS build RUN apt-get update -qq && apt-get install -y -qq --no-install-recommends git ca-certificates >/dev/null \ && rustup target add wasm32-unknown-unknown \ && cargo install --locked wasm-bindgen-cli --version 0.2.129 # The sources, at the commits this build was tested with. one2html asks for # onenote_parser 1.1 from crates.io and patches in git master, a patch Cargo # ignores from a dependency; point it at the same pinned parser instead. ARG ONENOTE_RS=fa4d7a044324af3bfe68727704a9789a08b36a3c ARG ONE2HTML=59930ad309004030f812790c6749efe4265bb6bd RUN git clone -q https://github.com/msiemens/onenote.rs /deps/onenote.rs && git -C /deps/onenote.rs checkout -q $ONENOTE_RS && git clone -q https://github.com/msiemens/one2html /deps/one2html && git -C /deps/one2html checkout -q $ONE2HTML && test "$(git -C /deps/onenote.rs rev-parse HEAD)" = "$ONENOTE_RS" && test "$(git -C /deps/one2html rev-parse HEAD)" = "$ONE2HTML" && rm -rf /deps/onenote.rs/crates/parser/tests /deps/onenote.rs/crates/parser/benches && sed -i 's#^onenote_parser = { version = "1.1", default-features = false }#onenote_parser = { path = "/deps/onenote.rs/crates/parser", default-features = false }#' /deps/one2html/Cargo.toml && sed -i '/^\[patch.crates-io\]/,$d' /deps/one2html/Cargo.toml && grep -q 'path = "/deps/onenote.rs/crates/parser"' /deps/one2html/Cargo.toml WORKDIR /src COPY Cargo.toml Cargo.lock* ./ COPY src ./src RUN cargo build --release --target wasm32-unknown-unknown \ && wasm-bindgen --target web --out-dir /out --out-name onenote --no-typescript target/wasm32-unknown-unknown/release/onenote_wasm.wasm \ && mv /out/onenote_bg.wasm /out/onenote.wasm \ && sed -i "s/onenote_bg\.wasm/onenote.wasm/g" /out/onenote.js \ && mv /out/onenote.js /out/onenote.mjs \ && cp Cargo.lock /out/Cargo.lock FROM scratch AS export COPY --from=build /out/ /