# 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/ /