Skip to content

✨ feat(devcontainer): add multi-environment configs for VS Code, Codespaces, and JetBrains#721

Draft
codekiln wants to merge 6 commits intomainfrom
i718-multi-env-devcontainer
Draft

✨ feat(devcontainer): add multi-environment configs for VS Code, Codespaces, and JetBrains#721
codekiln wants to merge 6 commits intomainfrom
i718-multi-env-devcontainer

Conversation

@codekiln
Copy link
Owner

@codekiln codekiln commented Jan 6, 2026

Summary

Adds three separate devcontainer configurations optimized for different development environments:

Config Location Workspace Secrets File Watching
VS Code Local Default .devcontainer/ Bind mount .env file gRPC FUSE
Codespaces .devcontainer/codespaces/ Cloud-managed GitHub secrets Cloud-managed
JetBrains .devcontainer/jetbrains/ Named volume + .devcontainer bind .env via bind Native inotify

Why Three Configurations?

  • VS Code Local: Bind mounts project from host, uses local .env file
  • Codespaces: Cloud-based, no local files - .env is gitignored and doesn't exist in cloud, must use GitHub Codespaces secrets
  • JetBrains: Needs named volume for native inotify support (avoids gRPC FUSE warnings), but also needs access to local .env file via hybrid mount

Changes

  • Add codespaces/ config that works without .env file (uses GitHub secrets directly)
  • Add jetbrains/ config with hybrid mount (named volume for workspace, bind mount for .devcontainer)
  • Add X11 libraries to Dockerfile for JetBrains Gateway compatibility (libxext6, libxrender1, libxtst6, libxi6, libfreetype6)
  • Update README with three-config architecture documentation
  • Mark override file approach as deprecated for JetBrains users

Test Plan

  • VS Code local: Default config still works with "Reopen in Container"
  • Codespaces: Create Codespace and select codespaces/devcontainer.json
  • JetBrains Gateway: Clone Repository workflow with jetbrains/devcontainer.json
  • Verify JetBrains shows named volume (not grpcfuse): mount | grep /workspace

Fixes #718

🤖 Generated with Claude Code

…spaces, and JetBrains

Add three separate devcontainer configurations optimized for different development environments:

- Default (.devcontainer/): VS Code local with bind mount and .env file
- Codespaces (.devcontainer/codespaces/): No .env dependency, uses GitHub secrets only
- JetBrains (.devcontainer/jetbrains/): Hybrid mount (named volume + .devcontainer bind)

Key changes:
- Add Codespaces config that works without .env file (gitignored, doesn't exist in cloud)
- Add JetBrains config with hybrid mount for native inotify support
- Add X11 libraries to Dockerfile for JetBrains Gateway compatibility
- Update README with three-config architecture documentation
- Mark override file approach as deprecated for JetBrains users

Fixes #718

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings January 6, 2026 13:12
@github-actions
Copy link
Contributor

github-actions bot commented Jan 6, 2026

Unit Test Results

186 tests  ±0   186 ✅ ±0   1s ⏱️ ±0s
  1 suites ±0     0 💤 ±0 
  1 files   ±0     0 ❌ ±0 

Results for commit 5545f1f. ± Comparison against base commit 47eb92a.

♻️ This comment has been updated with latest results.

@github-actions
Copy link
Contributor

github-actions bot commented Jan 6, 2026

SDK Integration Test Results

294 tests  ±0   294 ✅ ±0   34s ⏱️ -13s
 13 suites ±0     0 💤 ±0 
  1 files   ±0     0 ❌ ±0 

Results for commit 5545f1f. ± Comparison against base commit 47eb92a.

♻️ This comment has been updated with latest results.

@github-actions
Copy link
Contributor

github-actions bot commented Jan 6, 2026

Integration Test Results

315 tests  ±0   311 ✅  - 4   4m 36s ⏱️ -31s
 13 suites ±0     0 💤 ±0 
  1 files   ±0     4 ❌ +4 

For more details on these failures, see this check.

Results for commit 5545f1f. ± Comparison against base commit 47eb92a.

♻️ This comment has been updated with latest results.

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR introduces a multi-environment devcontainer architecture with three separate, optimized configurations tailored to different development tools and workflows: VS Code (local), GitHub Codespaces, and JetBrains Gateway.

Key Changes:

  • Added dedicated Codespaces configuration that works exclusively with GitHub secrets (no .env file dependency)
  • Added dedicated JetBrains configuration with hybrid mount approach (named volume for workspace + bind mount for .devcontainer folder) to resolve gRPC FUSE file watching issues
  • Enhanced Dockerfile with X11 libraries required for JetBrains Gateway compatibility
  • Updated documentation to explain the three-config architecture and deprecate the manual override file approach for JetBrains users

Reviewed changes

Copilot reviewed 7 out of 7 changed files in this pull request and generated no comments.

Show a summary per file
File Description
.devcontainer/jetbrains/docker-compose.yml New JetBrains-specific compose config with hybrid mount strategy (named volume for workspace, bind mount for .devcontainer to access .env file)
.devcontainer/jetbrains/devcontainer.json New JetBrains devcontainer configuration referencing the JetBrains-specific docker-compose file
.devcontainer/codespaces/docker-compose.yml New Codespaces-specific compose config that uses GitHub secrets directly without .env file dependency
.devcontainer/codespaces/devcontainer.json New Codespaces devcontainer configuration with VS Code extensions and settings
.devcontainer/README.md Comprehensive documentation update explaining the three-config architecture, setup steps for each environment, and trade-offs
.devcontainer/docker-compose.override.yml.template Updated with deprecation notices directing JetBrains and Codespaces users to dedicated configurations
.devcontainer/Dockerfile Added X11 libraries (libxext6, libxrender1, libxtst6, libxi6, libfreetype6) required for JetBrains Gateway support

The changes are well-structured, properly documented, and follow consistent patterns across all configurations. Each environment's unique requirements (bind mounts vs named volumes, .env files vs GitHub secrets) are appropriately addressed. No issues were identified during the review.

Copilot AI review requested due to automatic review settings January 8, 2026 12:04
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated 2 comments.

@codekiln
Copy link
Owner Author

codekiln commented Jan 8, 2026

@copilot open a new pull request to apply changes based on the comments in this thread

Copy link
Contributor

Copilot AI commented Jan 8, 2026

@codekiln I've opened a new pull request, #722, to work on those changes. Once the pull request is ready, I'll request review from you.

* Initial plan

* 🐛 fix(codespaces): correct volume mount path to repository root

Co-authored-by: codekiln <140930+codekiln@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: codekiln <140930+codekiln@users.noreply.github.com>
@codekiln
Copy link
Owner Author

codekiln commented Jan 8, 2026

In jetbrains:

[post-create] Skipping gh CLI extensions (will be installed after authentication)
[post-create] Setting up tmux configuration...
/workspace/.devcontainer/post-create.sh: line 132: cd: /workspace/.devcontainer: No such file or directory
Lifecycle script command: `bash /workspace/.devcontainer/post-create.sh` is failed with exit code: 1
bash: /workspace/.devcontainer/setup-github-auth.sh: No such file or directory
Lifecycle script command: `bash /workspace/.devcontainer/setup-github-auth.sh` is failed with exit code: 127


This was using the VCS clone method.

I think there's a conceptual difference between how we need to configure vcs clone method in jetbrains and how it works in VS Code because the .env file will just not be there before it's cloned. It's more like codepsaces, but without the ability to define the environment variables ahead of time.

@codekiln codekiln marked this pull request as draft January 15, 2026 13:48
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.

🐛 fix(devcontainer): docker-compose.override.yml not picked up by JetBrains Gateway rebuilds

2 participants