Introduce devcontainer service container based development environment (#705)#706
Introduce devcontainer service container based development environment (#705)#706bedrich-schindler wants to merge 16 commits intomasterfrom
devcontainer service container based development environment (#705)#706Conversation
…ent (#705) All development is now done inside the container named `devcontainer` which contains all necessary tools and dependencies. The devcontainer orchestrates other service containers behind the scenes via Docker-from-Docker. Other containers are implementation details and should not be accessed directly. This is breaking change commit for development environment, so it is required to remove all the env files and start with fresh one. There are two supported ways to access the development environment. Recommended way is to use Development Containers with an IDE. The alternative is to use Docker Compose directly. Local development is officially no more supported. What more, documentation of contribution and CLAUDE.md was updated to match with the changes.
There was a problem hiding this comment.
Pull request overview
This PR migrates the repo’s development workflow to a single devcontainer-centric environment that orchestrates supporting service containers via Docker-from-Docker, updating scripts, Compose files, and contributor docs accordingly.
Changes:
- Add a
devcontainerimage (with wrapper CLIs) and new Compose layout (docker-compose.base.yml+ generateddocker-compose.yml). - Introduce
setup.sh+docker/build-docker-images.shto generate config files and build images. - Consolidate Playwright configuration into
.envand update contribution/testing documentation.
Reviewed changes
Copilot reviewed 16 out of 25 changed files in this pull request and generated 12 comments.
Show a summary per file
| File | Description |
|---|---|
| tests/playwright/env/parseDotEnvFile.ts | Switch Playwright env parsing from .env.playwright to .env. |
| src/docs/contribute/testing-guidelines.md | Update test-running guidance for the new container-agnostic workflow. |
| src/docs/contribute/general-guidelines.md | Rewrite development environment docs around the devcontainer model. |
| setup.sh | New host-side setup script to generate .env and docker-compose.yml and build images. |
| package.json | Remove postinstall env-file bootstrap. |
| docker/react_ui_devcontainer_local/Dockerfile.dist | Add template for locally extending the devcontainer image. |
| docker/react_ui_devcontainer/files/usr/local/bin/* | Add wrapper scripts (npm/node/npx/mkdocs + AI tool shims) to route commands into service containers. |
| docker/react_ui_devcontainer/files/usr/local/bin/docker-entrypoint | Add entrypoint that runs fixuid and home ownership setup. |
| docker/react_ui_devcontainer/files/home/developer/shell-init.sh | Add SSH-agent forwarding blocking helper. |
| docker/react_ui_devcontainer/Dockerfile | Add new devcontainer image build. |
| docker/build-docker-images.sh | Add helper to build the devcontainer image and compose services. |
| docker-compose.yml.dist | Add dist template for generated docker-compose.yml. |
| docker-compose.yml | Remove old compose file (now generated). |
| docker-compose.base.yml | Add new base compose defining devcontainer + node/playwright/docs services. |
| CLAUDE.md | Update assistant guidance to assume devcontainer usage. |
| .gitignore | Ignore generated compose + local devcontainer customization dir; stop ignoring .env.playwright. |
| .env.playwright.dist | Remove dedicated Playwright env template. |
| .env.dist | Expand .env.dist to include compose/devcontainer + Playwright settings. |
| .devcontainer/devcontainer.json | Add Dev Container configuration to bootstrap via setup.sh. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
298b4ce to
cae210f
Compare
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 16 out of 25 changed files in this pull request and generated 4 comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
|
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 16 out of 25 changed files in this pull request and generated 6 comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| # Build Docker images | ||
| sh ./docker/build-docker-images.sh |
There was a problem hiding this comment.
setup.sh always rebuilds Docker images (docker/build-docker-images.sh) even when .env and docker-compose.yml already exist. In Dev Container workflows, initializeCommand can run frequently, so this can add significant repeated startup time. Consider making image builds conditional (e.g., only on first setup, or behind a flag like --build, or when relevant inputs change).
| # Build Docker images | |
| sh ./docker/build-docker-images.sh | |
| # Build Docker images (can be skipped by setting SKIP_DOCKER_BUILD=1) | |
| if [ "${SKIP_DOCKER_BUILD:-0}" != "1" ]; then | |
| echo "Building Docker images..." | |
| sh ./docker/build-docker-images.sh | |
| else | |
| echo "Skipping Docker image build because SKIP_DOCKER_BUILD=1" | |
| fi |
There was a problem hiding this comment.
@adamkudrna, speaking of this. We can have a check as in WECL (internal project) that checks if image exists or not and skip it if yes. But in case the image changes, user may end up with out-of-date image. So for first phase of dev containers, I've left it without condition so it is build every time. BUT - image is cached, so it is quick as it is loaded from cache.
This is because we allow users to locally extend Dockerfile. It would not be possible without built Docker image.
There are way to solve it for sure, but I spent a lot of time on devcontainers so this is where I chose compromise.
There was a problem hiding this comment.
I agree with your approach. Docker images and container layers are cached, so it shouldn't take long to hook up the environment. And we prefer being up-to-date over fast startups, at least at the time being.
There was a problem hiding this comment.
I do not have answers yet. This is not an issue with VS Code and it is not happening in WebStorm as well. Do you use Mount Sources or Clone Sources?
Clone Sources is not working for me in any repo and JetBrains team stopped responding to my ticket. But Mount Sources in 2026.1 does not have the issue you mention.
My guess is that they are publishing IDE backends instantly, so it might get downloaded every time they publish new version of IDE Backend. But it is just guess. It is probably up to you, I am sorry.
I think that this is not related to this PR, so I suggest closing it here.
…vcontainer` service container based development environment (#705)
adamkudrna
left a comment
There was a problem hiding this comment.
I have a lot of comments, but I really like it! You have done a great job 👏🏻.
adamkudrna
left a comment
There was a problem hiding this comment.
Here are a few points by Claude. I believe they are relevant.
(Once you rebase the branch, we can try asking Claude to do CR right here, just by adding the claude label.)
…uce `devcontainer` service container based development environment (#705)
… Introduce `devcontainer` service container based development environment (#705)
… !fixup Introduce `devcontainer` service container based development environment (#705)
|
@claude make code review. |
… fixup! !fixup Introduce `devcontainer` service container based development environment (#705)
c104400 to
cdc0490
Compare
… fixup! fixup! !fixup Introduce `devcontainer` service container based development environment (#705)
ffa1c40 to
1cdc6c2
Compare
… fixup! fixup! fixup! !fixup Introduce `devcontainer` service container based development environment (#705)
| All service containers mount the workspace at `/workspace` so that file changes | ||
| are shared. | ||
|
|
||
| ## Automatic Service Bootstrap |
There was a problem hiding this comment.
We spoke about this mode several times. I did my best to solve it fast and easy.
I added this section together with designated scripts. I tried to craft it with Claude as much as I can to be simple, covering as most cases as I can. Hope that documentation emphasize that this is for experienced users only and if it causes some problems, lets turn it off, restart container and continue without it.
But unless new deps are installed, it should work a pretty good and it also make sure on startup that your deps are up to date! Personally, I sometimes forget to update them and for example Playwright might result in incorrect snapshots.
There was a problem hiding this comment.
| # Build Docker images | ||
| sh ./docker/build-docker-images.sh |
… fixup! fixup! fixup! fixup! !fixup Introduce `devcontainer` service container based development environment (#705)
All development is now done inside the container named
devcontainerwhich contains all necessary tools and dependencies. The devcontainer orchestrates other service containers behind the scenes via Docker-from-Docker. Other containers are implementation details and should not be accessed directly.This is breaking change commit for development environment, so it is required to remove all the env files and start with fresh one.
There are two supported ways to access the development environment. Recommended way is to use Development Containers with an IDE. The alternative is to use Docker Compose directly. Local development is officially no more supported.
What more, documentation of contribution and CLAUDE.md was updated to match with the changes.
Closes #705