Files
Hermesandsapl-admin 135dcdf1d1 fix(deploy): untrack the committed node_modules symlink and keep it out of the build
ROOT CAUSE (corrected): `frontend/node_modules` is a SYMLINK that got COMMITTED to
dev in d0e3220 — `git add -A frontend` swept it in while it was being used to run
TypeScript/ESLint against a worktree, and .gitignore's rule is `node_modules/`
(trailing slash = directory only), which does not match a symlink. Every deploy
therefore gets the symlink back from `git reset --hard origin/dev`, and the
frontend image build — whose context is the frontend/ directory, so the repo-root
.dockerignore does not apply — died on it:

    #11 [build 5/6] COPY . .
    #11 ERROR: cannot replace to directory .../merged/app/node_modules with file
    ERROR: failed to build: failed to solve: ...

The dev deploy failed twice in a row on the #957 merge (run #3053, attempts 1 and
2); smoke-test-dev and the release-notes job were skipped and dev stayed on the
previous image.

Three changes, in order of what actually fixes it:
1. `git rm --cached frontend/node_modules` — the tracked symlink goes away, so the
   checkout no longer plants it.
2. `.gitignore` gains `node_modules` (no trailing slash) so a symlink of that name
   can never be staged again.
3. `frontend/.dockerignore` keeps node_modules out of the image build context
   either way — `npm ci` installs the dependencies inside the image.

(cherry picked from commit ced2c2db4d)
2026-09-29 12:17:10 +05:30

102 lines
3.5 KiB
Plaintext

# ──────────────────────────────────────────────
# Python Backend
# ──────────────────────────────────────────────
__pycache__/
*.py[cod]
*.pyo
*.egg-info/
dist/
build/
*.egg
.pytest_cache/
*.db
*.sqlite
*.sqlite3
sapl_garment_intel.db
# Virtual environment
.venv/
venv/
env/
ENV/
# Environment variables / secrets
.env
.env.*
!.env.example
!.env.sample
!.env.local.sample
# ──────────────────────────────────────────────
# Frontend (React / Vite / TypeScript)
# ──────────────────────────────────────────────
node_modules/
# A symlink named node_modules is NOT matched by 'node_modules/' (the trailing
# slash means directory only), which let one be committed and then break the
# frontend image build with "cannot replace to directory .../app/node_modules
# with file" (2026-09-28, dev deploy). Match the name, whatever it is.
node_modules
frontend/dist/
frontend/dev-dist/
dist/
*.tsbuildinfo
.next/
# ──────────────────────────────────────────────
# IDE / Editor
# ──────────────────────────────────────────────
.vscode/
.idea/
*.swp
*.swo
*~
.DS_Store
Thumbs.db
# ──────────────────────────────────────────────
# OS & System
# ──────────────────────────────────────────────
.DS_Store
Thumbs.db
desktop.ini
# ──────────────────────────────────────────────
# Logs / Temp
# ──────────────────────────────────────────────
*.log
*.tmp
*.temp
*.cache
tmp/
temp/
# ──────────────────────────────────────────────
# Docker
# ──────────────────────────────────────────────
.docker/
docker-compose.override.yml
# ──────────────────────────────────────────────
# Runtime data (uploads, vector DB)
# ──────────────────────────────────────────────
backend/data/
# ──────────────────────────────────────────────
# Docs (Python caches inside docs/scripts)
# ──────────────────────────────────────────────
docs/scripts/__pycache__/
# Local runtime artifacts
logs.txt
*.empty-bak
.env.uat
# But NOT .env.uat.example — that's a template we want in the repo
!.env.uat.example
# Dev env template (branch dev → dev.ai-automation-hub.tech)
!.env.dev.example
.scannerwork/
backend/.coverage
# QA screenshots (pre-merge evidence, not committed)
.qa-screens/