# This Dockerfile is for the Harper website and web services.
# You do not need it to use Harper.
ARG NODE_VERSION=24
FROM rust:latest AS wasm-build
RUN rustup toolchain install
RUN apt-get update -y && apt-get install clang -y
RUN mkdir -p /usr/build/
WORKDIR /usr/build/
RUN cargo install wasm-pack
COPY . .
WORKDIR /usr/build/harper-wasm
RUN wasm-pack build --target web
RUN cargo clean
FROM node:${NODE_VERSION} AS node-build
RUN apt-get update && apt-get install git parallel -y
RUN corepack enable
RUN mkdir -p /usr/build/
WORKDIR /usr/build/
COPY . .
COPY --from=wasm-build /usr/build/harper-wasm/pkg /usr/build/harper-wasm/pkg
RUN pnpm install --engine-strict=false --shamefully-hoist
WORKDIR /usr/build/packages/components
RUN pnpm install --engine-strict=false --shamefully-hoist
RUN pnpm build
WORKDIR /usr/build/packages/harper.js
RUN pnpm build && ./docs.sh
WORKDIR /usr/build/packages/lint-framework
RUN pnpm build
WORKDIR /usr/build/packages/web
RUN pnpm install --engine-strict=false --shamefully-hoist
RUN pnpm build
FROM node:${NODE_VERSION}
COPY --from=node-build /usr/build/node_modules /usr/build/packages/web/node_modules
COPY --from=node-build /usr/build/packages/web/build /usr/build/packages/web/build
COPY ./packages/web/drizzle /usr/build/packages/web/build/drizzle
COPY --from=node-build /usr/build/packages/web/package.json /usr/build/packages/web/package.json
WORKDIR /usr/build/packages/web/build
ENV HOST=0.0.0.0
ENV PORT=3000
ENTRYPOINT ["node", "index"]
# This Dockerfile is for the Harper website and web services. # You do not need it to use Harper. ARG NODE_VERSION=24 FROM rust:latest AS wasm-build RUN rustup toolchain install RUN apt-get update -y && apt-get install clang -y RUN mkdir -p /usr/build/ WORKDIR /usr/build/ RUN cargo install wasm-pack COPY . . WORKDIR /usr/build/harper-wasm RUN wasm-pack build --target web RUN cargo clean FROM node:24 AS node-build RUN apt-get update && apt-get install git parallel -y RUN corepack enable RUN mkdir -p /usr/build/ WORKDIR /usr/build/ COPY . . COPY --from=wasm-build /usr/build/harper-wasm/pkg /usr/build/harper-wasm/pkg RUN pnpm install --engine-strict=false --shamefully-hoist WORKDIR /usr/build/packages/components RUN pnpm install --engine-strict=false --shamefully-hoist RUN pnpm build WORKDIR /usr/build/packages/harper.js RUN pnpm build && ./docs.sh WORKDIR /usr/build/packages/lint-framework RUN pnpm build WORKDIR /usr/build/packages/web RUN pnpm install --engine-strict=false --shamefully-hoist RUN pnpm build FROM node:24 COPY --from=node-build /usr/build/node_modules /usr/build/packages/web/node_modules COPY --from=node-build /usr/build/packages/web/build /usr/build/packages/web/build COPY ./packages/web/drizzle /usr/build/packages/web/build/drizzle COPY --from=node-build /usr/build/packages/web/package.json /usr/build/packages/web/package.json WORKDIR /usr/build/packages/web/build ENV HOST=0.0.0.0 ENV PORT=3000 ENTRYPOINT ["node", "index"]
# Ignore VCS and build outputs .git node_modules target pkg **/node_modules .DS_Store
Build timed out after 600s
# This Dockerfile is for the Harper website and web services.
# You do not need it to use Harper.
ARG NODE_VERSION=24
FROM rust:latest AS wasm-build
RUN rustup toolchain install
RUN apt-get update -y && apt-get install clang -y
RUN mkdir -p /usr/build/
WORKDIR /usr/build/
RUN cargo install wasm-pack
COPY . .
WORKDIR /usr/build/harper-wasm
RUN wasm-pack build --target web
RUN cargo clean
FROM node:${NODE_VERSION} AS node-build
RUN apt-get update && apt-get install git parallel -y
RUN corepack enable
RUN mkdir -p /usr/build/
WORKDIR /usr/build/
COPY . .
COPY --from=wasm-build /usr/build/harper-wasm/pkg /usr/build/harper-wasm/pkg
RUN pnpm install --engine-strict=false --shamefully-hoist
WORKDIR /usr/build/packages/components
RUN pnpm install --engine-strict=false --shamefully-hoist
RUN pnpm build
WORKDIR /usr/build/packages/harper.js
RUN pnpm build && ./docs.sh
WORKDIR /usr/build/packages/lint-framework
RUN pnpm build
WORKDIR /usr/build/packages/web
RUN pnpm install --engine-strict=false --shamefully-hoist
RUN pnpm build
FROM node:${NODE_VERSION}
COPY --from=node-build /usr/build/node_modules /usr/build/packages/web/node_modules
COPY --from=node-build /usr/build/packages/web/build /usr/build/packages/web/build
COPY ./packages/web/drizzle /usr/build/packages/web/build/drizzle
COPY --from=node-build /usr/build/packages/web/package.json /usr/build/packages/web/package.json
WORKDIR /usr/build/packages/web/build
ENV HOST=0.0.0.0
ENV PORT=3000
ENTRYPOINT ["node", "index"]
# This Dockerfile is for the Harper website and web services. # You do not need it to use Harper. ARG NODE_VERSION=24 FROM rust:latest AS wasm-build RUN rustup toolchain install RUN apt-get update -y && apt-get install clang -y RUN mkdir -p /usr/build/ WORKDIR /usr/build/ RUN cargo install wasm-pack COPY . . WORKDIR /usr/build/harper-wasm RUN wasm-pack build --target web RUN cargo clean FROM node:24 AS node-build RUN apt-get update && apt-get install git parallel -y RUN corepack enable RUN mkdir -p /usr/build/ WORKDIR /usr/build/ COPY . . COPY --from=wasm-build /usr/build/harper-wasm/pkg /usr/build/harper-wasm/pkg RUN pnpm install --engine-strict=false --shamefully-hoist WORKDIR /usr/build/packages/components RUN pnpm install --engine-strict=false --shamefully-hoist RUN pnpm build WORKDIR /usr/build/packages/harper.js RUN pnpm build && ./docs.sh WORKDIR /usr/build/packages/lint-framework RUN pnpm build WORKDIR /usr/build/packages/web RUN pnpm install --engine-strict=false --shamefully-hoist RUN pnpm build FROM node:24 COPY --from=node-build /usr/build/node_modules /usr/build/packages/web/node_modules COPY --from=node-build /usr/build/packages/web/build /usr/build/packages/web/build COPY ./packages/web/drizzle /usr/build/packages/web/build/drizzle COPY --from=node-build /usr/build/packages/web/package.json /usr/build/packages/web/package.json WORKDIR /usr/build/packages/web/build ENV HOST=0.0.0.0 ENV PORT=3000 ENTRYPOINT ["node", "index"]
Build timed out after 600s
# This Dockerfile is for the Harper website and web services.
# You do not need it to use Harper.
ARG NODE_VERSION=24
FROM rust:latest AS wasm-build
RUN rustup toolchain install
RUN apt-get update -y && apt-get install clang -y
RUN mkdir -p /usr/build/
WORKDIR /usr/build/
RUN cargo install wasm-pack
COPY . .
WORKDIR /usr/build/harper-wasm
RUN wasm-pack build --target web
RUN cargo clean
FROM node:${NODE_VERSION} AS node-build
RUN apt-get update && apt-get install git parallel -y
RUN corepack enable
RUN mkdir -p /usr/build/
WORKDIR /usr/build/
COPY . .
COPY --from=wasm-build /usr/build/harper-wasm/pkg /usr/build/harper-wasm/pkg
RUN pnpm install --engine-strict=false --shamefully-hoist
WORKDIR /usr/build/packages/components
RUN pnpm install --engine-strict=false --shamefully-hoist
RUN pnpm build
WORKDIR /usr/build/packages/harper.js
RUN pnpm build && ./docs.sh
WORKDIR /usr/build/packages/lint-framework
RUN pnpm build
WORKDIR /usr/build/packages/web
RUN pnpm install --engine-strict=false --shamefully-hoist
RUN pnpm build
FROM node:${NODE_VERSION}
COPY --from=node-build /usr/build/node_modules /usr/build/packages/web/node_modules
COPY --from=node-build /usr/build/packages/web/build /usr/build/packages/web/build
COPY ./packages/web/drizzle /usr/build/packages/web/build/drizzle
COPY --from=node-build /usr/build/packages/web/package.json /usr/build/packages/web/package.json
WORKDIR /usr/build/packages/web/build
ENV HOST=0.0.0.0
ENV PORT=3000
EXPOSE 3000
ENTRYPOINT ["node", "index"]
# This Dockerfile is for the Harper website and web services. # You do not need it to use Harper. FROM rust:latest AS wasm-build RUN rustup toolchain install RUN apt-get update -y && apt-get install -y clang RUN mkdir -p /usr/build/ WORKDIR /usr/build/ RUN cargo install wasm-pack COPY . . WORKDIR /usr/build/harper-wasm RUN wasm-pack build --target web RUN cargo clean FROM node:20 AS node-build RUN apt-get update && apt-get install -y git parallel RUN corepack enable RUN mkdir -p /usr/build/ WORKDIR /usr/build/ COPY . . COPY --from=wasm-build /usr/build/harper-wasm/pkg /usr/build/harper-wasm/pkg # Install pnpm and prepare Node workspace RUN npm i -g pnpm RUN pnpm install --engine-strict=false --shamefully-hoist WORKDIR /usr/build/packages/components RUN pnpm install --engine-strict=false --shamefully-hoist RUN pnpm build WORKDIR /usr/build/packages/harper.js RUN pnpm build && ./docs.sh WORKDIR /usr/build/packages/lint-framework RUN pnpm build WORKDIR /usr/build/packages/web RUN pnpm install --engine-strict=false --shamefully-hoist RUN pnpm build FROM node:20 COPY --from=node-build /usr/build/node_modules /usr/build/packages/web/node_modules COPY --from=node-build /usr/build/packages/web/build /usr/build/packages/web/build COPY ./packages/web/drizzle /usr/build/packages/web/build/drizzle COPY --from=node-build /usr/build/packages/web/package.json /usr/build/packages/web/package.json WORKDIR /usr/build/packages/web/build ENV HOST=0.0.0.0 ENV PORT=3000 EXPOSE 3000 CMD ["node", "index"]
Concerns: RUN rustup toolchain install is missing a toolchain argument (likely to fail during build)., COPY --from=node-build /usr/build/node_modules /usr/build/packages/web/node_modules may fail if /usr/build/node_modules doesn't exist in the node-build stage., Final CMD assumes an executable 'index' in /usr/build/packages/web/build; the build steps do not guarantee this artifact (could be index.js or another entrypoint).
# This Dockerfile is for the Harper website and web services. # You do not need it to use Harper. FROM rust:1.70 AS wasm-build RUN rustup toolchain install 1.70.0 RUN apt-get update -y && apt-get install -y clang RUN mkdir -p /usr/build/ WORKDIR /usr/build/ RUN cargo install wasm-pack COPY . . WORKDIR /usr/build/harper-wasm RUN wasm-pack build --target web RUN cargo clean FROM node:20 AS node-build RUN apt-get update && apt-get install -y git parallel RUN corepack enable RUN mkdir -p /usr/build/ WORKDIR /usr/build/ COPY . . COPY --from=wasm-build /usr/build/harper-wasm/pkg /usr/build/harper-wasm/pkg # Install pnpm and prepare Node workspace RUN npm i -g pnpm RUN pnpm install --engine-strict=false --shamefully-hoist WORKDIR /usr/build/packages/components RUN pnpm install --engine-strict=false --shamefully-hoist RUN pnpm build WORKDIR /usr/build/packages/harper.js RUN pnpm build && ./docs.sh WORKDIR /usr/build/packages/lint-framework RUN pnpm build WORKDIR /usr/build/packages/web RUN pnpm install --engine-strict=false --shamefully-hoist RUN pnpm build FROM node:20 COPY --from=node-build /usr/build/node_modules /usr/build/packages/web/node_modules COPY --from=node-build /usr/build/packages/web/build /usr/build/packages/web/build COPY ./packages/web/drizzle /usr/build/packages/web/build/drizzle COPY --from=node-build /usr/build/packages/web/package.json /usr/build/packages/web/package.json WORKDIR /usr/build/packages/web/build ENV HOST=0.0.0.0 ENV PORT=3000 EXPOSE 3000 CMD ["node", "index"]
Summary (under 1500 chars): - Exact error message and exit code: - error: failed to compile `wasm-pack v0.14.0`, intermediate artifacts can be found at `/tmp/cargo-installnpvS3p` - Caused by: - failed to download replaced source registry `crates-io` - Caused by: - failed to parse manifest at `/usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/clap_derive-4.6.0/Cargo.toml` - Caused by: - failed to parse the `edition` key - Caused by: - this version of Cargo is older than the `2024` edition, and only supports `2015`, `2018`, and `2021` editions. - Exit code: 101 - Failing command/step: - [wasm-build 6/10] RUN cargo install wasm-pack - Dockerfile: line 11 - Missing packages or files mentioned: - Not explicitly missing packages/files. The issue is a Cargo manifest parsing failure caused by an edition mismatch, not a missing dependency. The log also shows a failure to download a registry index, but the root cause is cargo not understanding the 2024 edition referenced in Clap Derive 4.6.0. - Version mismatch info: - The build uses rust:1.70 (Rust toolchain installed in the wasm-build step). The error indicates Cargo does not support the Rust 2024 edition used by clap_derive-4.6.0/Cargo.toml. - Root cause: Cargo/toolchain is too old to parse the 2024 edition. Solution typically involves upgrading the Rust toolchain (or using a wasm-pack/version compatible with older editions).
# This Dockerfile is for the Harper website and web services. # You do not need it to use Harper. FROM rust:latest AS wasm-build RUN apt-get update -y && apt-get install -y clang RUN mkdir -p /usr/build/ WORKDIR /usr/build/ RUN cargo install wasm-pack COPY . . WORKDIR /usr/build/harper-wasm RUN wasm-pack build --target web RUN cargo clean FROM node:20 AS node-build RUN apt-get update && apt-get install -y git parallel RUN corepack enable RUN mkdir -p /usr/build/ WORKDIR /usr/build/ COPY . . COPY --from=wasm-build /usr/build/harper-wasm/pkg /usr/build/harper-wasm/pkg # Install pnpm and prepare Node workspace RUN npm i -g pnpm RUN pnpm install --engine-strict=false --shamefully-hoist WORKDIR /usr/build/packages/components RUN pnpm install --engine-strict=false --shamefully-hoist RUN pnpm build WORKDIR /usr/build/packages/harper.js RUN pnpm build && ./docs.sh WORKDIR /usr/build/packages/lint-framework RUN pnpm build WORKDIR /usr/build/packages/web RUN pnpm install --engine-strict=false --shamefully-hoist RUN pnpm build FROM node:20 COPY --from=node-build /usr/build/node_modules /usr/build/packages/web/node_modules COPY --from=node-build /usr/build/packages/web/build /usr/build/packages/web/build COPY ./packages/web/drizzle /usr/build/packages/web/build/drizzle COPY --from=node-build /usr/build/packages/web/package.json /usr/build/packages/web/package.json WORKDIR /usr/build/packages/web/build ENV HOST=0.0.0.0 ENV PORT=3000 EXPOSE 3000 CMD ["node", "index"]
Build timed out after 600s
# Minimal Dockerfile to build harper-cli from source and provide a runnable image FROM rust:latest AS builder WORKDIR /work COPY . . # Build only the harper-cli binary to keep the build lighter RUN cargo build -p harper-cli --release FROM debian:bullseye-slim AS runtime # Install minimal runtime dependencies RUN apt-get update && apt-get install -y ca-certificates && rm -rf /var/lib/apt/lists/* # Copy the built binary from builder stage COPY --from=builder /work/harper-cli/target/release/harper-cli /usr/local/bin/harper WORKDIR /work # Default command: show version or run lint as needed CMD ["harper-cli", "--version"]
Concerns: The final binary is copied to /usr/local/bin/harper but the CMD runs harper-cli --version, causing a mismatch and likely runtime failure., The COPY --from=builder path /work/harper-cli/target/release/harper-cli may be incorrect depending on repository layout/workspace; cargo outputs binaries under target/release, and the exact path depends on whether harper-cli is at repository root or inside a subdirectory. This could cause the binary copy to fail., FROM rust:latest is not pinned, which can lead to non-deterministic builds. Pin to a specific Rust version for reproducible builds.
# Minimal Dockerfile to build harper-cli from source and provide a runnable image FROM rust:1.76 AS builder WORKDIR /workspace # Cache-busting: copy only manifest first, if possible; here we copy everything for simplicity COPY . . # Build only the harper-cli binary from the workspace RUN cargo build -p harper-cli --release FROM debian:bullseye-slim AS runtime # Install minimal runtime dependencies RUN apt-get update && apt-get install -y ca-certificates && rm -rf /var/lib/apt/lists/* # Copy the built binary from the builder stage and name it t harper COPY --from=builder /workspace/target/release/harper-cli /usr/local/bin/harper RUN chmod +x /usr/local/bin/harper WORKDIR /work # Default command shows version/help CMD ["harper", "--version"]
Concerns: Comment has a minor typo ('name it t harper') but is harmless, Final image runs as root; consider adding a non-root user for security
Smoke [FAIL]: harper --version
Output: harper: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.32' not found (required by harper)
harper: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.33' not found (required by harper)
harper: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by harper)
Smoke [PASS]: command -v harper
Smoke [PASS]: ls -l /usr/local/bin/harper# Minimal Dockerfile to build harper-cli from source and provide a runnable image FROM rust:1.76 AS builder WORKDIR /workspace # Cache-busting: copy only manifest first, if possible; here we copy everything for simplicity COPY . . # Build only the harper-cli binary from the workspace RUN cargo build -p harper-cli --release FROM debian:bookworm-slim AS runtime # Install minimal runtime dependencies RUN apt-get update && apt-get install -y ca-certificates && rm -rf /var/lib/apt/lists/* # Copy the built binary from the builder stage and name it t harper COPY --from=builder /workspace/target/release/harper-cli /usr/local/bin/harper RUN chmod +x /usr/local/bin/harper WORKDIR /work # Default command shows version/help CMD ["harper", "--version"]
Smoke [PASS]: harper --version Smoke [PASS]: harper --help Smoke [PASS]: test -x /usr/local/bin/harper