Introduce devcontainer service container based development environment (#705)#706
Introduce devcontainer service container based development environment (#705)#706bedrich-schindler wants to merge 16 commits into
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.
…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.
There was a problem hiding this comment.
I quickly tested both modes by editing a component (no re-install) and it seems to work well. 👏🏻
… fixup! fixup! fixup! fixup! !fixup Introduce `devcontainer` service container based development environment (#705)
adamkudrna
left a comment
There was a problem hiding this comment.
You have done a great job @bedrich-schindler 👏🏻.
- Docs are clear and understandable.
- I tested the default mode and auto-start mode, both OK.
- I successfully started Claude (but stopped before logging in).
- I did not test any customization features.
- Only issue I have observed so far is the missing Git intergration in my Jetbrains.
Can't wait to start using it!
| > You can skip this section when using [Development Containers]. They run this | ||
| > script automatically the first time the project is opened. |
There was a problem hiding this comment.
I think this paragraph belongs to the parent section, so I can skip right to "Accessing the Development Environment" instead of "Manual setup".
| vim \ | ||
| nano \ | ||
| openssh-client \ | ||
| git \ |
There was a problem hiding this comment.
I am testing a fresh install and have issues with Git. I can reach Git in the devcontainer's terminal:
$ git
But I cannot turn on Jetbrains' integration of Git in IDE Settings:
Git is not installed
Failed to start Git process: Couldn't run In "/root" execute/usr/bin/git -c core.quotepath=false -c log.showSignature=falseversion: 13: Permission denied (os error 13)
It already pops out on devcontainer startup:
When I run the same command /usr/bin/git -c core.quotepath=false -c log.showSignature=false in the devcontainer's terminal, Git successfully responds.
| @@ -0,0 +1,23 @@ | |||
| { | |||
| "name": "React UI (${localWorkspaceFolderBasename})", | |||
There was a problem hiding this comment.
I found out the name is used on the Dev Containers screen in Jetbrains:
Project's terminal is also nice:
But when I open the project in IDE, the project name matches the root folder which is simply workspace:
This is not very useful when navigating in recent projects, and I wonder what happens with worktrees… Is there an easy way to make Jetbrains project name inherit from this setting?
| All service containers mount the workspace at `/workspace` so that file changes | ||
| are shared. | ||
|
|
||
| ## Automatic Service Bootstrap |
There was a problem hiding this comment.
I quickly tested both modes by editing a component (no re-install) and it seems to work well. 👏🏻
| # Change to the parent directory of the script | ||
| cd "$SCRIPT_DIR/.." | ||
|
|
||
| # Install dependencies if node_modules is missing or out of date |

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