From 73baa1a9fe31926c56d5f4904dc035ebeacc05b4 Mon Sep 17 00:00:00 2001 From: Dhara Pandya Date: Sat, 6 Jun 2026 23:33:25 +0530 Subject: [PATCH] feat(infra): add Docker, Compose and Dev Container support for Tauri --- .devcontainer/Dockerfile | 0 .devcontainer/devcontainer.json | 19 ++++++++ docker/.dockerignore | 17 +++++++ docker/Dockerfile | 81 +++++++++++++++++++++++++++++++++ docker/docker-compose.yml | 43 +++++++++++++++++ docker/scripts/build.sh | 0 docker/scripts/dev.sh | 0 package-lock.json | 29 +----------- package.json | 2 +- 9 files changed, 162 insertions(+), 29 deletions(-) create mode 100644 .devcontainer/Dockerfile create mode 100644 .devcontainer/devcontainer.json create mode 100644 docker/.dockerignore create mode 100644 docker/Dockerfile create mode 100644 docker/docker-compose.yml create mode 100644 docker/scripts/build.sh create mode 100644 docker/scripts/dev.sh diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile new file mode 100644 index 0000000..e69de29 diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000..38d41bf --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,19 @@ +{ + "name": "Tauri Dev Environment", + "dockerComposeFile": "../docker/docker-compose.yml", + "service": "tauri-app", + "workspaceFolder": "/app", + + "customizations": { + "vscode": { + "extensions": [ + "rust-lang.rust-analyzer", + "vadimcn.vscode-lldb", + "tauri-apps.tauri-vscode", + "esbenp.prettier-vscode", + "dbaeumer.vscode-eslint" + ] + } + }, + "remoteUser": "developer" +} \ No newline at end of file diff --git a/docker/.dockerignore b/docker/.dockerignore new file mode 100644 index 0000000..ca7a5fb --- /dev/null +++ b/docker/.dockerignore @@ -0,0 +1,17 @@ +node_modules +target +dist +build +.cache +.git +.github +.vscode +.idea + +*.log +.env +.env.* +.DS_Store + +src-tauri/target +coverage \ No newline at end of file diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 0000000..cf378e9 --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,81 @@ +#Base Builder Image +FROM rust:1.88-slim AS base + +ENV DEBIAN_FRONTEND=noninteractive + +# Install Node.js LTS +RUN apt-get update && apt-get install -y \ + curl \ + git \ + wget \ + pkg-config \ + build-essential \ + libssl-dev \ + libgtk-3-dev \ + libwebkit2gtk-4.1-dev \ + libappindicator3-dev \ + librsvg2-dev \ + patchelf \ + openssl \ + ca-certificates \ + xdg-utils \ + file \ + libxdo-dev \ + && rm -rf /var/lib/apt/lists/* + +# Install Node.js +RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - && \ + apt-get update && apt-get install -y nodejs + +# Install package managers +RUN npm install -g \ + pnpm \ + yarn \ + @tauri-apps/cli + +# Create non-root user +RUN useradd -ms /bin/bash developer + +WORKDIR /app + + +# Dependency Cache Stage +FROM base AS dependencies + +COPY package.json ./ +COPY package-lock.json* ./ +COPY pnpm-lock.yaml* ./ +COPY yarn.lock* ./ + +RUN \ + if [ -f package-lock.json ]; then npm install; fi && \ + if [ -f pnpm-lock.yaml ]; then pnpm install; fi && \ + if [ -f yarn.lock ]; then yarn install; fi + +COPY src-tauri/Cargo.toml ./src-tauri/Cargo.toml +COPY src-tauri/Cargo.lock ./src-tauri/Cargo.lock + +RUN mkdir -p src-tauri/src && \ + echo "fn main() {}" > src-tauri/src/main.rs && \ + touch src-tauri/src/lib.rs + +RUN cd src-tauri && cargo fetch + +# Development Stage +FROM base AS development + +COPY --from=dependencies /usr/local/cargo /usr/local/cargo +COPY --from=dependencies /app /app + +WORKDIR /app + +#USER developer + +USER root +RUN mkdir -p /tmp/cargo-target && chmod -R 777 /tmp/cargo-target + +EXPOSE 1420 +EXPOSE 1421 +EXPOSE 5173 + +CMD ["npm", "run", "tauri", "dev"] \ No newline at end of file diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml new file mode 100644 index 0000000..21624ac --- /dev/null +++ b/docker/docker-compose.yml @@ -0,0 +1,43 @@ +services: + tauri-app: + build: + context: .. + dockerfile: docker/Dockerfile + target: development + + container_name: tauri-dev + + working_dir: /app + + environment: + - DISPLAY=${DISPLAY} + - WAYLAND_DISPLAY=${WAYLAND_DISPLAY} + - XDG_RUNTIME_DIR=${XDG_RUNTIME_DIR} + - RUST_BACKTRACE=1 + - NODE_ENV=development + - CHOKIDAR_USEPOLLING=true + - CARGO_TARGET_DIR=/tmp/cargo-target + + volumes: + - ..:/app + - cargo-cache:/usr/local/cargo/registry + - /tmp/cargo-target/ + - /app/node_modules/ + - /tmp/.X11-unix:/tmp/.X11-unix + + ports: + - "1420:1420" + - "1421:1421" + - "5173:5173" + + stdin_open: true + tty: true + + networks: + - tauri-network +networks: + tauri-network: + +volumes: + cargo-cache: + \ No newline at end of file diff --git a/docker/scripts/build.sh b/docker/scripts/build.sh new file mode 100644 index 0000000..e69de29 diff --git a/docker/scripts/dev.sh b/docker/scripts/dev.sh new file mode 100644 index 0000000..e69de29 diff --git a/package-lock.json b/package-lock.json index d05dfa7..852e444 100644 --- a/package-lock.json +++ b/package-lock.json @@ -39,7 +39,7 @@ "@playwright/test": "^1.60.0", "@tailwindcss/typography": "^0.5.19", "@tailwindcss/vite": "^4.3.0", - "@tauri-apps/cli": "2.10.1", + "@tauri-apps/cli": "^2.10.1", "@testing-library/jest-dom": "^6.9.1", "@testing-library/react": "^16.3.2", "@testing-library/user-event": "^14.6.1", @@ -4118,9 +4118,6 @@ "arm64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -4138,9 +4135,6 @@ "arm64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -4158,9 +4152,6 @@ "x64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -4178,9 +4169,6 @@ "x64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -4407,9 +4395,6 @@ "arm64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "Apache-2.0 OR MIT", "optional": true, "os": [ @@ -4427,9 +4412,6 @@ "arm64" ], "dev": true, - "libc": [ - "musl" - ], "license": "Apache-2.0 OR MIT", "optional": true, "os": [ @@ -4447,9 +4429,6 @@ "riscv64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "Apache-2.0 OR MIT", "optional": true, "os": [ @@ -4467,9 +4446,6 @@ "x64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "Apache-2.0 OR MIT", "optional": true, "os": [ @@ -4487,9 +4463,6 @@ "x64" ], "dev": true, - "libc": [ - "musl" - ], "license": "Apache-2.0 OR MIT", "optional": true, "os": [ diff --git a/package.json b/package.json index 0b00702..8bb2bc9 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,7 @@ "@playwright/test": "^1.60.0", "@tailwindcss/typography": "^0.5.19", "@tailwindcss/vite": "^4.3.0", - "@tauri-apps/cli": "2.10.1", + "@tauri-apps/cli": "^2.10.1", "@testing-library/jest-dom": "^6.9.1", "@testing-library/react": "^16.3.2", "@testing-library/user-event": "^14.6.1",