diff --git a/.devcontainer/README.md b/.devcontainer/README.md index 9d10ccd4..f14390ac 100644 --- a/.devcontainer/README.md +++ b/.devcontainer/README.md @@ -9,17 +9,21 @@ It works on Linux, Windows and OSX. - [VS code](https://code.visualstudio.com/download) installed - [VS code remote containers extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) installed - [Docker](https://www.docker.com/products/docker-desktop) installed and running - - If you don't use Linux or WSL 2, share your home directory `~/` and the directory of your project with Docker Desktop - [Docker Compose](https://docs.docker.com/compose/install/) installed -- Ensure your host has the following and that they are accessible by Docker: - - `~/.ssh` directory - - `~/.gitconfig` file (can be empty) ## Setup +1. Create the following files on your host if you don't have them: + + ```sh + touch ~/.gitconfig ~/.zsh_history + ``` + + Note that the development container will create the empty directories `~/.docker`, `~/.ssh` and `~/.kube` if you don't have them. + +1. **For Docker on OSX or Windows without WSL**: ensure your home directory `~` is accessible by Docker. 1. Open the command palette in Visual Studio Code (CTRL+SHIFT+P). 1. Select `Remote-Containers: Open Folder in Container...` and choose the project directory. -1. For Docker running on Windows HyperV, if you want to use SSH keys, bind mount them at `/tmp/.ssh` by changing the `volumes` section in the [docker-compose.yml](docker-compose.yml). ## Customization @@ -29,13 +33,9 @@ You can make changes to the [Dockerfile](Dockerfile) and then rebuild the image. ```Dockerfile FROM qmcgaw/godevcontainer -USER root RUN apk add curl -USER vscode ``` -Note that you may need to use `USER root` to build as root, and then change back to `USER vscode`. - To rebuild the image, either: - With VSCode through the command palette, select `Remote-Containers: Rebuild and reopen in container` @@ -47,11 +47,11 @@ You can customize **settings** and **extensions** in the [devcontainer.json](dev ### Entrypoint script -You can bind mount a shell script to `/home/vscode/.welcome.sh` to replace the [current welcome script](shell/.welcome.sh). +You can bind mount a shell script to `/root/.welcome.sh` to replace the [current welcome script](shell/.welcome.sh). ### Publish a port -To access a port from your host to your development container, publish a port in [docker-compose.yml](docker-compose.yml). +To access a port from your host to your development container, publish a port in [docker-compose.yml](docker-compose.yml). You can also now do it directly with VSCode without restarting the container. ### Run other services diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 1a2666dd..f277c58c 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,82 +1,76 @@ -{ - "name": "gluetun-dev", - "dockerComposeFile": [ - "docker-compose.yml" - ], - "service": "vscode", - "runServices": [ - "vscode" - ], - "shutdownAction": "stopCompose", - "postCreateCommand": "source ~/.windows.sh && go mod download && go mod tidy", - "workspaceFolder": "/workspace", - "extensions": [ - "golang.go", - "eamodio.gitlens", // IDE Git information - "davidanson.vscode-markdownlint", - "ms-azuretools.vscode-docker", // Docker integration and linting - "shardulm94.trailing-spaces", // Show trailing spaces - "Gruntfuggly.todo-tree", // Highlights TODO comments - "bierner.emojisense", // Emoji sense for markdown - "stkb.rewrap", // rewrap comments after n characters on one line - "vscode-icons-team.vscode-icons", // Better file extension icons - "github.vscode-pull-request-github", // Github interaction - "redhat.vscode-yaml", // Kubernetes, Drone syntax highlighting - "bajdzis.vscode-database", // Supports connections to mysql or postgres, over SSL, socked - "IBM.output-colorizer", // Colorize your output/test logs - "mohsen1.prettify-json", // Prettify JSON data - "github.copilot", - ], - "settings": { - "files.eol": "\n", - "remote.extensionKind": { - "ms-azuretools.vscode-docker": "workspace" - }, - "editor.codeActionsOnSaveTimeout": 3000, - "go.useLanguageServer": true, - "[go]": { - "editor.formatOnSave": true, - "editor.codeActionsOnSave": { - "source.organizeImports": true, - }, - // Optional: Disable snippets, as they conflict with completion ranking. - "editor.snippetSuggestions": "none" - }, - "[go.mod]": { - "editor.formatOnSave": true, - "editor.codeActionsOnSave": { - "source.organizeImports": true, - }, - }, - "gopls": { - "usePlaceholders": false, - "staticcheck": true - }, - "go.autocompleteUnimportedPackages": true, - "go.gotoSymbol.includeImports": true, - "go.gotoSymbol.includeGoroot": true, - "go.lintTool": "golangci-lint", - "go.buildOnSave": "workspace", - "go.lintOnSave": "workspace", - "go.vetOnSave": "workspace", - "editor.formatOnSave": true, - "go.toolsEnvVars": { - "GOFLAGS": "-tags=", - // "CGO_ENABLED": 1 // for the race detector - }, - "gopls.env": { - "GOFLAGS": "-tags=" - }, - "go.testEnvVars": { - "": "" - }, - "go.testFlags": [ - "-v", - // "-race" - ], - "go.testTimeout": "10s", - "go.coverOnSingleTest": true, - "go.coverOnSingleTestFile": true, - "go.coverOnTestPackage": true - } +{ + "name": "gluetun-dev", + "dockerComposeFile": [ + "docker-compose.yml" + ], + "service": "vscode", + "runServices": [ + "vscode" + ], + "shutdownAction": "stopCompose", + "postCreateCommand": "~/.windows.sh && go mod download && go mod tidy", + "workspaceFolder": "/workspace", + // "overrideCommand": "", + "customizations": { + "vscode": { + "extensions": [ + "golang.go", + "eamodio.gitlens", // IDE Git information + "davidanson.vscode-markdownlint", + "ms-azuretools.vscode-docker", // Docker integration and linting + "shardulm94.trailing-spaces", // Show trailing spaces + "Gruntfuggly.todo-tree", // Highlights TODO comments + "bierner.emojisense", // Emoji sense for markdown + "stkb.rewrap", // rewrap comments after n characters on one line + "vscode-icons-team.vscode-icons", // Better file extension icons + "github.vscode-pull-request-github", // Github interaction + "redhat.vscode-yaml", // Kubernetes, Drone syntax highlighting + "bajdzis.vscode-database", // Supports connections to mysql or postgres, over SSL, socked + "IBM.output-colorizer", // Colorize your output/test logs + "github.copilot" // AI code completion + ], + "settings": { + "files.eol": "\n", + "remote.extensionKind": { + "ms-azuretools.vscode-docker": "workspace" + }, + "go.useLanguageServer": true, + "[go]": { + "editor.codeActionsOnSave": { + "source.organizeImports": true + } + }, + "[go.mod]": { + "editor.codeActionsOnSave": { + "source.organizeImports": true + } + }, + "gopls": { + "build.buildFlags": [ + "-tags", + "" + ], + "usePlaceholders": false, + "staticcheck": true + }, + "go.lintTool": "golangci-lint", + "go.lintOnSave": "package", + "editor.formatOnSave": true, + "go.toolsEnvVars": { + "CGO_ENABLED": "0" + }, + "go.testEnvVars": { + "CGO_ENABLED": "1" + }, + "go.testFlags": [ + "-v", + "-race" + ], + "go.testTimeout": "10s", + "go.coverOnSingleTest": true, + "go.coverOnSingleTestFile": true, + "go.coverOnTestPackage": true + } + } + } } \ No newline at end of file diff --git a/.devcontainer/docker-compose.yml b/.devcontainer/docker-compose.yml index 8fef9028..9075c16a 100644 --- a/.devcontainer/docker-compose.yml +++ b/.devcontainer/docker-compose.yml @@ -1,30 +1,28 @@ -version: "3.7" - -services: - vscode: - build: . - devices: - - /dev/net/tun:/dev/net/tun - volumes: - - ../:/workspace - # Docker socket to access Docker server - - /var/run/docker.sock:/var/run/docker.sock - # Docker configuration - - ~/.docker:/root/.docker - # SSH directory for Linux, OSX and WSL - # On Linux and OSX, a symlink /mnt/ssh <-> ~/.ssh is - # created in the container. On Windows, files are copied - # from /mnt/ssh to ~/.ssh to fix permissions. - - ~/.ssh:/mnt/ssh - # Shell history persistence - - ~/.zsh_history:/root/.zsh_history - environment: - - TZ= - cap_add: - # For debugging with dlv - # - SYS_PTRACE - - NET_ADMIN - security_opt: - # For debugging with dlv - - seccomp:unconfined - entrypoint: zsh -c "while sleep 1000; do :; done" +version: "3.7" + +services: + vscode: + build: . + volumes: + - ../:/workspace + # Docker socket to access Docker server + - /var/run/docker.sock:/var/run/docker.sock + # SSH directory for Linux, OSX and WSL + # On Linux and OSX, a symlink /mnt/ssh <-> ~/.ssh is + # created in the container. On Windows, files are copied + # from /mnt/ssh to ~/.ssh to fix permissions. + - ~/.ssh:/mnt/ssh + # Shell history persistence + - ~/.zsh_history:/root/.zsh_history + # Git config + - ~/.gitconfig:/root/.gitconfig + environment: + - TZ= + cap_add: + # For debugging with dlv + - SYS_PTRACE + - NET_ADMIN + security_opt: + # For debugging with dlv + - seccomp:unconfined + entrypoint: [ "zsh", "-c", "while sleep 1000; do :; done" ]