Skip to content

chore: remove the VS Code devcontainer and pin the Node version - #183

Open
andre8244 wants to merge 3 commits into
mainfrom
chore-remove-devcontainer
Open

chore: remove the VS Code devcontainer and pin the Node version#183
andre8244 wants to merge 3 commits into
mainfrom
chore-remove-devcontainer

Conversation

@andre8244

@andre8244 andre8244 commented Aug 28, 2026

Copy link
Copy Markdown
Collaborator

Summary

Removes .devcontainer/ and makes .nvmrc the single source of truth for the Node
version.

The devcontainer wasn't worth keeping. It only ever covered the frontend — a
Node-only image with no Go toolchain and no podman, in a repo where 4 of the 5
components are Go and the dev stack needs podman for postgres/redis/nginx. It
required VS Code plus a global Podman setting to work at all, and what it did
provide is what a pinned Node version and npm ci already give you. Nothing
referenced it outside two stale paragraphs in frontend/README.md.

The Node version was pinned in four places that disagreed (Containerfile
22.18.0, dev.sh tag 22.14.0, CI 20, docs CI 22, both READMEs "20+ LTS").
Now .nvmrc holds 24.20.0 at the repo root, all three workflows read it via
node-version-file, and the Containerfile base image matches.

One deviation: @types/node moves to ^24, but the tsconfig base stays on
@tsconfig/node22. @tsconfig/node24 sets lib: ESNext.Error, which needs
TypeScript >= 5.9, and this repo pins ~5.8.0; bumping it pulls in vue-tsc 3 and
belongs in its own PR. Only affects the lib/target used to check the
vite/vitest/eslint config files — reason recorded in tsconfig.node.json.

Related issue

None — developer-tooling cleanup with no tracking issue.

How to test

nvm install && nvm use                  # .nvmrc -> 24.20.0
cd frontend && rm -rf node_modules && npm ci
npm run type-check && npm run lint && npm run test -- --run && npm run build
cd ../docs && rm -rf node_modules && npm ci && npm run build   # docs move 22 -> 24

Passed locally on 24.20.0 (145 tests, 0 audit vulnerabilities), plus
podman build --target production frontend/. CI is the real check: frontend-tests
on the new node-version-file input, and docs.yml.

Dependencies

None.

The devcontainer built frontend/Containerfile target dev — a bare Node
image with no Go toolchain, no podman and no mkcert — while 4 of the 5
components here are Go and the dev stack needs podman for postgres,
redis and nginx. It could only ever cover the frontend.

It was also broken as configured: workspaceFolder /app pointed at the
repo root, which has no package.json, while the image CMD is
`npm install && npm run dev`. The frontend/README.md instructions dated
from when .devcontainer/ lived under frontend/.

Nothing referenced it — not CI, docker-compose.yml, render.yaml,
deploy.sh, release.sh or the root README — only two stale paragraphs in
frontend/README.md. It also handles git worktrees badly, since each
linked worktree is a different path and the container name is fixed.

Its one irreplaceable payload, the extension list, moves to a tracked
.vscode/extensions.json, which applies in every checkout rather than
only inside the container. golang.go is added: pointless in a Node-only
image, the most important extension on the host. .gitignore switches to
.vscode/* plus a negation so only extensions.json is tracked; personal
settings.json stays ignored.

Also drops frontend/nethesis-vue-components-3.12.2.tgz, unreferenced by
both package.json (which wants ^3.13.0 from the registry) and
package-lock.json.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@andre8244 andre8244 self-assigned this Aug 28, 2026
@edospadoni
edospadoni deployed to chore-remove-devcontainer - my-backend-qa PR #183 August 28, 2026 15:22 — with Render Active
@edospadoni
edospadoni deployed to chore-remove-devcontainer - my-frontend-qa PR #183 August 28, 2026 15:22 — with Render Active
@edospadoni
edospadoni deployed to chore-remove-devcontainer - my-collect-qa PR #183 August 28, 2026 15:22 — with Render Active
@github-actions

Copy link
Copy Markdown
Contributor

🔗 Redirect URIs Added to Logto

The following redirect URIs have been automatically added to the Logto application configuration:

Redirect URIs:

  • https://my-proxy-qa-pr-183.onrender.com/login-redirect

Post-logout redirect URIs:

  • https://my-proxy-qa-pr-183.onrender.com/login

These will be automatically removed when the PR is closed or merged.

@andre8244
andre8244 force-pushed the chore-remove-devcontainer branch from 6b4aa04 to 2de0e8a Compare August 28, 2026 15:40
@edospadoni
edospadoni deployed to chore-remove-devcontainer - my-backend-qa PR #183 August 28, 2026 15:40 — with Render Active
@edospadoni
edospadoni deployed to chore-remove-devcontainer - my-collect-qa PR #183 August 28, 2026 15:40 — with Render Active
@edospadoni
edospadoni deployed to chore-remove-devcontainer - my-frontend-qa PR #183 August 28, 2026 15:40 — with Render Active
@andre8244
andre8244 force-pushed the chore-remove-devcontainer branch from 2de0e8a to f597020 Compare August 28, 2026 15:54
@edospadoni
edospadoni deployed to chore-remove-devcontainer - my-frontend-qa PR #183 August 28, 2026 15:54 — with Render Active
@edospadoni
edospadoni deployed to chore-remove-devcontainer - my-collect-qa PR #183 August 28, 2026 15:54 — with Render Active
@edospadoni
edospadoni deployed to chore-remove-devcontainer - my-backend-qa PR #183 August 28, 2026 15:54 — with Render Active
@andre8244
andre8244 force-pushed the chore-remove-devcontainer branch from f597020 to cc93393 Compare August 28, 2026 16:15
@edospadoni
edospadoni deployed to chore-remove-devcontainer - my-frontend-qa PR #183 August 28, 2026 16:15 — with Render Active
@edospadoni
edospadoni deployed to chore-remove-devcontainer - my-backend-qa PR #183 August 28, 2026 16:15 — with Render Active
@edospadoni
edospadoni deployed to chore-remove-devcontainer - my-collect-qa PR #183 August 28, 2026 16:15 — with Render Active
andre8244 and others added 2 commits August 28, 2026 18:25
The Node version was stated in four places that disagreed: the frontend
Containerfile said 22.18.0, dev.sh tagged 22.14.0, ci-main.yml and
release-production.yml used 20, docs.yml used 22, and both READMEs said
"20+ LTS". Nothing reconciled them.

Pin 24.20.0 in .nvmrc at the repo root — root, not frontend/, because nvm
and fnm search upward, so a single pin covers frontend/ and docs/ alike. No
.node-version alongside it: that file uniquely serves nodenv, which nobody
here uses. All three workflows now read .nvmrc via node-version-file, and
the Containerfile base image matches it.

engines is a major floor (">=24") in both frontend and docs package.json,
not a copy of the pin: .nvmrc does the pinning, engines only guards against
a runtime too old for the type definitions, and a patch-level floor would
need bumping on every Node release. engine-strict is deliberately not
enabled, since npm applies it to dependency ranges too, so this stays an
EBADENGINE warning. Both lockfiles are regenerated so their root engines
agree with their package.json.

@types/node moves to ^24 (resolves 24.13.3), but the tsconfig base stays on
@tsconfig/node22: @tsconfig/node24 uses lib "ESNext.Error", which needs
TypeScript >= 5.9, and typescript is pinned ~5.8.0. Bumping that would pull
in vue-tsc 3 and is a separate change. The gap only affects the lib/target
used to check the vite/vitest/eslint config files, so it is harmless; the
reason is recorded in tsconfig.node.json.

packageManager is deliberately not added — npm ships inside the Node
tarball, so pinning Node already pins npm, and a Corepack field would be a
fourth version string to maintain.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
dev.sh and the Containerfile's dev stage were the non-VS-Code half of the
devcontainer setup, and with the devcontainer gone they are the last
reason to keep a container in the frontend dev loop. The convention for a
Vite app is host-native — pin Node, npm ci, npm run dev — and here the
container actively hurts:

- dev.sh bind-mounts $(pwd) and its CMD runs `npm install` inside the
  container, overwriting the host's node_modules with container-resolved
  native binaries (esbuild, rollup). Interleaving ./dev.sh with a host
  `npm run dev` in one tree corrupts it, and nothing documented that.
- Editor tooling must resolve node_modules from the host. Installing
  inside the container breaks Volar, ESLint and vue-tsc in the editor,
  whose only fix is running the editor in the container too.
- The maintenance tax went unpaid: dev.sh still tagged its image
  dev-22.14.0 against a 22.18.0 base.

base, builder, dist and production stages are untouched; nothing else
referenced target dev (docker-compose.yml's frontend-full builds
production). Verified `podman build --target production` still succeeds.

docker-compose up -d from the repo root remains the path for running the
app without installing anything, and the README now says so.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@andre8244
andre8244 force-pushed the chore-remove-devcontainer branch from cc93393 to d96c9d4 Compare August 28, 2026 16:26
@andre8244 andre8244 changed the title chore: remove the VS Code devcontainer and unify Node/Go version pinning chore: remove the VS Code devcontainer and pin the Node version Aug 28, 2026
@edospadoni
edospadoni deployed to chore-remove-devcontainer - my-frontend-qa PR #183 August 28, 2026 16:26 — with Render Active
@andre8244
andre8244 marked this pull request as ready for review August 28, 2026 16:31
@andre8244
andre8244 requested a review from edospadoni August 28, 2026 16:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants