diff --git a/.devcontainer/.dockerignore b/.devcontainer/.dockerignore new file mode 100644 index 00000000..ac9cb068 --- /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 00000000..9d3c502d --- /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 00000000..bf276bab --- /dev/null +++ b/.devcontainer/README.md @@ -0,0 +1,68 @@ +# 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 + - 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. 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 +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` +- 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). + +### 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 b9109226..8e7853ec 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,5 +1,5 @@ { - "name": "pia-dev", + "name": "gluetun-dev", "dockerComposeFile": [ "docker-compose.yml" ], @@ -12,27 +12,25 @@ "workspaceFolder": "/workspace", "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 ], "settings": { - // General settings "files.eol": "\n", - // Docker "remote.extensionKind": { "ms-azuretools.vscode-docker": "workspace" }, - // Golang general settings "go.useLanguageServer": true, "go.autocompleteUnimportedPackages": true, "go.gotoSymbol.includeImports": true, @@ -43,7 +41,6 @@ "usePlaceholders": false }, "go.lintTool": "golangci-lint", - // Golang on save "go.buildOnSave": "workspace", "go.lintOnSave": "workspace", "go.vetOnSave": "workspace", @@ -53,20 +50,21 @@ "source.organizeImports": true } }, - // Golang testing "go.toolsEnvVars": { - "GOFLAGS": "-tags=integration" + "GOFLAGS": "-tags=", + // "CGO_ENABLED": 1 // for the race detector }, "gopls.env": { - "GOFLAGS": "-tags=integration" + "GOFLAGS": "-tags=" }, "go.testEnvVars": {}, "go.testFlags": [ "-v", // "-race" ], - "go.testTimeout": "600s", + "go.testTimeout": "10s", + "go.coverOnSingleTest": true, "go.coverOnSingleTestFile": true, - "go.coverOnSingleTest": true + "go.coverOnTestPackage": true } } \ No newline at end of file diff --git a/.devcontainer/docker-compose.yml b/.devcontainer/docker-compose.yml index b43c8e37..66b41a09 100644 --- a/.devcontainer/docker-compose.yml +++ b/.devcontainer/docker-compose.yml @@ -2,14 +2,24 @@ version: "3.7" services: vscode: - image: qmcgaw/godevcontainer + build: . + image: godevcontainer volumes: - ../:/workspace + # Docker socket to access Docker server + - /var/run/docker.sock:/var/run/docker.sock + # SSH directory - ~/.ssh:/home/vscode/.ssh - ~/.ssh:/root/.ssh - - /var/run/docker.sock:/var/run/docker.sock + # Git config + - ~/.gitconfig:/home/districter/.gitconfig + - ~/.gitconfig:/root/.gitconfig + 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"