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
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:
13
.devcontainer/Dockerfile
Normal file
13
.devcontainer/Dockerfile
Normal 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
|
||||
1
.devcontainer/claude-code/README.md
Normal file
1
.devcontainer/claude-code/README.md
Normal file
@@ -0,0 +1 @@
|
||||
# Claude Code
|
||||
27
.devcontainer/claude-code/devcontainer-feature.json
Normal file
27
.devcontainer/claude-code/devcontainer-feature.json
Normal 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"]
|
||||
}
|
||||
}
|
||||
}
|
||||
19
.devcontainer/claude-code/install.sh
Executable file
19
.devcontainer/claude-code/install.sh
Executable 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
|
||||
|
||||
14
.devcontainer/devcontainer-lock.json
Normal file
14
.devcontainer/devcontainer-lock.json
Normal 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"
|
||||
}
|
||||
}
|
||||
}
|
||||
34
.devcontainer/devcontainer.json
Normal file
34
.devcontainer/devcontainer.json
Normal 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"
|
||||
}
|
||||
]
|
||||
}
|
||||
1
.devcontainer/npm/README.md
Normal file
1
.devcontainer/npm/README.md
Normal file
@@ -0,0 +1 @@
|
||||
# PNPM integration
|
||||
25
.devcontainer/npm/devcontainer-feature.json
Normal file
25
.devcontainer/npm/devcontainer-feature.json
Normal 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
15
.devcontainer/npm/install.sh
Executable 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"
|
||||
22
.devcontainer/playwright/README.md
Normal file
22
.devcontainer/playwright/README.md
Normal 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" }
|
||||
}
|
||||
```
|
||||
22
.devcontainer/playwright/devcontainer-feature.json
Normal file
22
.devcontainer/playwright/devcontainer-feature.json
Normal 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"
|
||||
}
|
||||
]
|
||||
}
|
||||
8
.devcontainer/playwright/install.sh
Executable file
8
.devcontainer/playwright/install.sh
Executable 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
16
.devcontainer/post-create.sh
Executable 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
|
||||
Reference in New Issue
Block a user