From ba9c42d4c786bd7a66b754940ac0d2a7570a8f51 Mon Sep 17 00:00:00 2001 From: "Quentin McGaw (desktop)" Date: Tue, 7 Sep 2021 19:50:33 +0000 Subject: [PATCH] Maint: upgrade devcontainer settings --- .devcontainer/.dockerignore | 5 ++ .devcontainer/Dockerfile | 1 + .devcontainer/README.md | 70 +++++++++++++++++ .devcontainer/devcontainer.json | 130 ++++++++++++------------------- .devcontainer/docker-compose.yml | 23 +++++- 5 files changed, 146 insertions(+), 83 deletions(-) create mode 100644 .devcontainer/.dockerignore create mode 100644 .devcontainer/Dockerfile create mode 100644 .devcontainer/README.md diff --git a/.devcontainer/.dockerignore b/.devcontainer/.dockerignore new file mode 100644 index 0000000..ac9cb06 --- /dev/null +++ b/.devcontainer/.dockerignore @@ -0,0 +1,5 @@ +.dockerignore +devcontainer.json +docker-compose.yml +Dockerfile +README.md diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile new file mode 100644 index 0000000..9d3c502 --- /dev/null +++ b/.devcontainer/Dockerfile @@ -0,0 +1 @@ +FROM qmcgaw/godevcontainer diff --git a/.devcontainer/README.md b/.devcontainer/README.md new file mode 100644 index 0000000..03a2c2f --- /dev/null +++ b/.devcontainer/README.md @@ -0,0 +1,70 @@ +# Development container + +Development container that can be used with VSCode. + +It works on Linux, Windows and OSX. + +## Requirements + +- [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 +- [Docker Compose](https://docs.docker.com/compose/install/) installed + +## 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. **For Docker on Windows without WSL:** if you want to use SSH keys, bind mount your host `~/.ssh` to `/tmp/.ssh` instead of `~/.ssh` by changing the `volumes` section in the [docker-compose.yml](docker-compose.yml). +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. + +## Customization + +### Customize the image + +You can make changes to the [Dockerfile](Dockerfile) and then rebuild the image. For example, your Dockerfile could be: + +```Dockerfile +FROM qmcgaw/godevcontainer +RUN apk add curl +``` + +To rebuild the image, either: + +- With VSCode through the command palette, select `Remote-Containers: Rebuild and reopen in container` +- With a terminal, go to this directory and `docker-compose build` + +### Customize VS code settings + +You can customize **settings** and **extensions** in the [devcontainer.json](devcontainer.json) definition file. + +### Entrypoint script + +You can bind mount a shell script to `/home/vscode/.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). You can also now do it directly with VSCode without restarting the container. + +### Run other services + +1. Modify [docker-compose.yml](docker-compose.yml) to launch other services at the same time as this development container, such as a test database: + + ```yml + database: + image: postgres + restart: always + environment: + POSTGRES_PASSWORD: password + ``` + +1. In [devcontainer.json](devcontainer.json), change the line `"runServices": ["vscode"],` to `"runServices": ["vscode", "database"],`. +1. In the VS code command palette, rebuild the container. diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index c3935d4..21d451c 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,5 +1,5 @@ { - "name": "stackedit-docker-dev", + "name": "stackedit-dev", "dockerComposeFile": [ "docker-compose.yml" ], @@ -8,110 +8,80 @@ "vscode" ], "shutdownAction": "stopCompose", - "postCreateCommand": "go mod download", + "postCreateCommand": "source ~/.windows.sh && go mod download && go mod tidy", "workspaceFolder": "/workspace", - "appPort": 8000, + // "overrideCommand": "", "extensions": [ "golang.go", - "IBM.output-colorizer", - "eamodio.gitlens", - "mhutchie.git-graph", + "eamodio.gitlens", // IDE Git information "davidanson.vscode-markdownlint", - "shardulm94.trailing-spaces", - "alefragnani.Bookmarks", - "Gruntfuggly.todo-tree", - "mohsen1.prettify-json", - "quicktype.quicktype", - "spikespaz.vscode-smoothtype", - "stkb.rewrap", - "vscode-icons-team.vscode-icons" + "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 + // "zxh404.vscode-proto3", // Supports Proto syntax + // "jrebocho.vscode-random", // Generates random values + // "alefragnani.Bookmarks", // Manage bookmarks + // "quicktype.quicktype", // Paste JSON as code + // "spikespaz.vscode-smoothtype", // smooth cursor animation ], "settings": { - // General settings "files.eol": "\n", - // Docker "remote.extensionKind": { "ms-azuretools.vscode-docker": "workspace" }, - // Golang general settings + "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, - "gopls": { - "completeUnimported": true, - "deepCompletion": true, - "usePlaceholders": false - }, "go.lintTool": "golangci-lint", - "go.lintFlags": [ - "--fast", - "--enable", - "rowserrcheck", - "--enable", - "bodyclose", - "--enable", - "dogsled", - "--enable", - "dupl", - "--enable", - "gochecknoglobals", - "--enable", - "gochecknoinits", - "--enable", - "gocognit", - "--enable", - "goconst", - "--enable", - "gocritic", - "--enable", - "gocyclo", - "--enable", - "goimports", - "--enable", - "golint", - "--enable", - "gosec", - "--enable", - "interfacer", - "--enable", - "maligned", - "--enable", - "misspell", - "--enable", - "nakedret", - "--enable", - "prealloc", - "--enable", - "scopelint", - "--enable", - "unconvert", - "--enable", - "unparam", - "--enable", - "whitespace" - ], - // Golang on save "go.buildOnSave": "workspace", "go.lintOnSave": "workspace", "go.vetOnSave": "workspace", "editor.formatOnSave": true, - "[go]": { - "editor.codeActionsOnSave": { - "source.organizeImports": true - } - }, - // Golang testing "go.toolsEnvVars": { - "GOFLAGS": "-tags=" + "GOFLAGS": "-tags=", + "CGO_ENABLED": 1 // for the race detector }, "gopls.env": { "GOFLAGS": "-tags=" }, - "go.testEnvVars": {}, + "go.testEnvVars": { + "": "", + }, "go.testFlags": [ - "-v" + "-v", + "-race" ], - "go.testTimeout": "600s" + "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 1c6ef13..80cab45 100644 --- a/.devcontainer/docker-compose.yml +++ b/.devcontainer/docker-compose.yml @@ -2,14 +2,31 @@ version: "3.7" services: vscode: - image: qmcgaw/godevcontainer + build: . + image: godevcontainer volumes: - ../:/workspace - - ~/.ssh:/home/vscode/.ssh:ro - - ~/.ssh:/root/.ssh:ro + # Docker + - ~/.docker:/root/.docker:z + # Docker socket to access Docker server - /var/run/docker.sock:/var/run/docker.sock + # SSH directory for Linux, OSX and WSL + - ~/.ssh:/root/.ssh:z + # For Windows without WSL, a copy will be made + # from /tmp/.ssh to ~/.ssh to fix permissions + # - ~/.ssh:/tmp/.ssh:ro + # Shell history persistence + - ~/.zsh_history:/root/.zsh_history:z + # Git config + - ~/.gitconfig:/root/.gitconfig:z + # Kubernetes + - ~/.kube:/root/.kube:z + environment: + - TZ= cap_add: + # For debugging with dlv - SYS_PTRACE security_opt: + # For debugging with dlv - seccomp:unconfined entrypoint: zsh -c "while sleep 1000; do :; done"