snapshot of https://github.com/marmelab/atomic-crm.git (main, 2026-09-18; blobs > 131072B omitted)
Some checks failed
✅ Check / 🔬 ESLint (push) Failing after 21s
✅ Check / 🏷️ Typecheck (push) Failing after 11s
✅ Check / 🔎 Test (push) Failing after 11s
✅ Check / e2e-test (push) Failing after 11s
✅ Check / 🔨 Build (push) Failing after 11s
🚀 Deploy / 🚀 Deploy (doc) (push) Failing after 12s
🚀 Deploy / 🚀 Deploy (demo) (push) Failing after 12s
🚀 Deploy / 🚀 Deploy (supabase) (push) Failing after 18s

This commit is contained in:
upstream-mirror
2026-09-18 01:48:50 +05:00
commit 93ecc1a6f8
787 changed files with 75240 additions and 0 deletions

13
.devcontainer/Dockerfile Normal file
View File

@@ -0,0 +1,13 @@
FROM node:24-trixie
RUN apt update && apt install -y sudo build-essential
ARG USERNAME=node
RUN echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME \
&& chmod 0440 /etc/sudoers.d/$USERNAME
USER node
RUN echo 'alias g="git"' >> /home/node/.bash_aliases
ENV DEVCONTAINER=true

View File

@@ -0,0 +1 @@
# Claude Code

View File

@@ -0,0 +1,27 @@
{
"id": "claude-code",
"version": "1.0.0",
"name": "Claude Code",
"mounts": [
{
"type": "bind",
"source": "${localEnv:HOME}/.claude.json",
"target": "/home/node/.claude.json"
},
{
"type": "bind",
"source": "${localEnv:HOME}/.claude",
"target": "/home/node/.claude"
},
{
"type": "volume",
"source": "claude-plugins",
"target": "/home/node/.claude/plugins"
}
],
"customizations": {
"vscode": {
"extensions": ["Anthropic.claude-code"]
}
}
}

View File

@@ -0,0 +1,19 @@
#!/usr/bin/env bash
set -e
CLAUDE_PATH="/home/${_CONTAINER_USER}/.claude"
CLAUDE_PLUGINS_PATH="${CLAUDE_PATH}/plugins"
mkdir -p "$CLAUDE_PLUGINS_PATH" && chown -R $_CONTAINER_USER:$_CONTAINER_USER "$CLAUDE_PATH"
su - "$_CONTAINER_USER" <<'EOL'
cd /tmp
curl -fsSL https://claude.ai/install.sh -o claude-install.sh
chmod +x claude-install.sh
./claude-install.sh
rm -f claude-install.sh
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
EOL

View File

@@ -0,0 +1,14 @@
{
"features": {
"ghcr.io/devcontainers/features/docker-in-docker:3": {
"version": "3.1.0",
"resolved": "ghcr.io/devcontainers/features/docker-in-docker@sha256:62e04ec83d944da4fd2830f68a677d1f5466c0654aea1e4baa30232d16029ac1",
"integrity": "sha256:62e04ec83d944da4fd2830f68a677d1f5466c0654aea1e4baa30232d16029ac1"
},
"ghcr.io/postfinance/devcontainer-features/playwright-deps:1": {
"version": "1.0.0",
"resolved": "ghcr.io/postfinance/devcontainer-features/playwright-deps@sha256:1fbd235678d55637ddfb93c800249e48ae72af36cb382297ff3a22bab8945acb",
"integrity": "sha256:1fbd235678d55637ddfb93c800249e48ae72af36cb382297ff3a22bab8945acb"
}
}
}

View File

@@ -0,0 +1,34 @@
// See https://containers.dev/implementors/json_reference/ for configuration reference
{
"name": "Atomic CRM",
"build": {
"dockerfile": "Dockerfile"
},
"workspaceFolder": "/workspaces/atomic-crm",
"workspaceMount": "source=${localWorkspaceFolder},target=${containerWorkspaceFolder},type=bind,consistency=cached",
"postCreateCommand": "bash .devcontainer/post-create.sh",
"remoteUser": "node",
"features": {
"./claude-code": {},
"./npm": {
"workspaceFolder": "${containerWorkspaceFolder}"
},
"./playwright": {},
"ghcr.io/devcontainers/features/docker-in-docker:3": {
"moby": false
}
},
"customizations": {
"vscode": {
"extensions": []
}
},
"forwardPorts": [5173, 5174],
"mounts": [
{
"type": "volume",
"source": "${devcontainerId}-tmp",
"target": "/tmp"
}
]
}

View File

@@ -0,0 +1 @@
# PNPM integration

View File

@@ -0,0 +1,25 @@
{
"id": "npm",
"version": "1.0.0",
"name": "NPM",
"options": {
"workspaceFolder": {
"type": "string",
"default": "",
"description": "Absolute path to the workspace folder inside the container. Used to pre-create and own the node_modules volume mount point."
}
},
"postCreateCommand": "npm install",
"mounts": [
{
"type": "volume",
"source": "${devcontainerId}-node-modules",
"target": "${containerWorkspaceFolder}/node_modules"
},
{
"type": "volume",
"source": "${devcontainerId}-global-node-modules",
"target": "/usr/local/lib/node_modules"
}
]
}

15
.devcontainer/npm/install.sh Executable file
View File

@@ -0,0 +1,15 @@
#!/usr/bin/env bash
set -e
WORKSPACE_FOLDER="${WORKSPACEFOLDER:-}"
if [ -z "$WORKSPACE_FOLDER" ]; then
echo "The 'workspaceFolder' option is not set. Please set it to the workspace folder path inside the container."
exit 1
fi
NODE_MODULES_PATH="${WORKSPACE_FOLDER}/node_modules"
mkdir -p "$NODE_MODULES_PATH" && chown -R $_CONTAINER_USER:$_CONTAINER_USER "$NODE_MODULES_PATH"
mkdir -p "/usr/local/lib/node_modules"

View File

@@ -0,0 +1,22 @@
# Playwright integration
Installs Playwright system dependencies (via the `playwright-deps` feature) and
persists downloaded browsers in a named volume across container rebuilds.
## Cache folder
The browser cache lives at `PLAYWRIGHT_BROWSERS_PATH` (default
`/mount/.ms-playwright`). This single env var is the source of truth: the
volume mount target (`${containerEnv:PLAYWRIGHT_BROWSERS_PATH}`) and the
`install.sh` setup both read it.
The dev container features spec does not allow a feature `option` to drive
`containerEnv`/`mounts`, so to change the folder, override the env var in your
`devcontainer.json` — the volume mount follows automatically:
```jsonc
{
"features": { "./playwright": {} },
"containerEnv": { "PLAYWRIGHT_BROWSERS_PATH": "/custom/path" }
}
```

View File

@@ -0,0 +1,22 @@
{
"id": "playwright",
"version": "1.0.0",
"name": "Playwright",
"containerEnv": {
"PLAYWRIGHT_BROWSERS_PATH": "/mount/.ms-playwright"
},
"dependsOn": {
"ghcr.io/postfinance/devcontainer-features/playwright-deps:1": {
"installChromiumDeps": true,
"installFirefoxDeps": true,
"installWebkitDeps": true
}
},
"mounts": [
{
"type": "volume",
"source": "${devcontainerId}-playwright",
"target": "/mount/.ms-playwright"
}
]
}

View File

@@ -0,0 +1,8 @@
#!/usr/bin/env bash
if [ -z "$PLAYWRIGHT_BROWSERS_PATH" ]; then
echo "PLAYWRIGHT_BROWSERS_PATH environment variable is not set. Please set it to the desired Playwright folder path."
exit 1
fi
mkdir -p "$PLAYWRIGHT_BROWSERS_PATH" && chown -R $_CONTAINER_USER:$_CONTAINER_USER "$PLAYWRIGHT_BROWSERS_PATH"

16
.devcontainer/post-create.sh Executable file
View File

@@ -0,0 +1,16 @@
#!/usr/bin/env bash
set -euo pipefail
claude plugin marketplace add anthropics/claude-plugins-official
claude plugin marketplace update claude-plugins-official
claude plugin install typescript-lsp
sudo npm install -g supabase typescript-language-server
# Install Playwright browsers using the REPO's pinned playwright version (resolved
# from node_modules after the ./npm feature ran `npm install`), so the downloaded
# browser revision always matches what package.json/package-lock.json expect.
# Doing it here — instead of the playwright feature's floating `npx playwright
# install` — is what keeps the repo the single source of truth for the version and
# avoids the "browser revision X installed but the repo wants Y" mismatch.
npx playwright install chromium chromium-headless-shell