| FROM node:20-slim | |
| # Install build dependencies | |
| RUN apt-get update && apt-get install -y \ | |
| git \ | |
| python3 \ | |
| cmake \ | |
| build-essential \ | |
| curl \ | |
| wget \ | |
| ca-certificates \ | |
| xz-utils \ | |
| && rm -rf /var/lib/apt/lists/* | |
| # Set toolchain paths | |
| ENV INSTALL_BASE=/opt/wasm-toolchains | |
| ENV EMSDK_PATH=/opt/wasm-toolchains/emsdk | |
| ENV SWIFTWASM_PATH=/opt/wasm-toolchains/swiftwasm | |
| # --- Install Emscripten --- | |
| RUN mkdir -p ${INSTALL_BASE} && \ | |
| git clone https://github.com/emscripten-core/emsdk.git ${EMSDK_PATH} && \ | |
| cd ${EMSDK_PATH} && \ | |
| ./emsdk install latest && \ | |
| ./emsdk activate latest | |
| # --- Install SwiftWasm (Linux x86_64) --- | |
| RUN mkdir -p ${SWIFTWASM_PATH} && \ | |
| SWIFTWASM_VERSION="swift-wasm-5.10-SNAPSHOT-2023-11-02-a" && \ | |
| SWIFTWASM_TARBALL="${SWIFTWASM_VERSION}-ubuntu22.04_x86_64.tar.gz" && \ | |
| SWIFTWASM_URL="https://github.com/swiftwasm/swift/releases/download/${SWIFTWASM_VERSION}/${SWIFTWASM_TARBALL}" && \ | |
| cd /tmp && \ | |
| curl -L -o "${SWIFTWASM_TARBALL}" "${SWIFTWASM_URL}" && \ | |
| tar xzf "${SWIFTWASM_TARBALL}" -C ${SWIFTWASM_PATH} --strip-components=1 && \ | |
| rm -f "${SWIFTWASM_TARBALL}" | |
| # Set up app | |
| WORKDIR /app | |
| COPY package*.json ./ | |
| RUN npm ci | |
| COPY . . | |
| RUN npm run build | |
| # HF Space default port is 7860, but we accept PORT env | |
| EXPOSE 7860 | |
| ENV PORT=7860 | |
| CMD ["node", "dist/server.js"] | |