Skip to content

Commit

Permalink
chore: add devcontainer and vscode launch configurations (#128)
Browse files Browse the repository at this point in the history
  • Loading branch information
Janhouse authored Feb 28, 2024
1 parent c013f06 commit 3176f6e
Show file tree
Hide file tree
Showing 6 changed files with 174 additions and 1 deletion.
22 changes: 22 additions & 0 deletions .devcontainer/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
## Based on microsoft go devcontainer - https://github.com/microsoft/vscode-dev-containers/blob/v0.205.2/containers/go/.devcontainer/Dockerfile
# [Choice] Go version (use -bullseye variants on local arm64/Apple Silicon): 1, 1.16, 1.17, 1-bullseye, 1.16-bullseye, 1.17-bullseye, 1-buster, 1.16-buster, 1.17-buster
ARG VARIANT=1-bullseye
FROM mcr.microsoft.com/vscode/devcontainers/go:${VARIANT}

# [Choice] Node.js version: none, lts/*, 16, 14, 12, 10
ARG NODE_VERSION="none"
RUN if [ "${NODE_VERSION}" != "none" ]; then su vscode -c "umask 0002 && . /usr/local/share/nvm/nvm.sh && nvm install ${NODE_VERSION} 2>&1"; fi

RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
&& apt-get -y install --no-install-recommends protobuf-compiler

USER vscode

RUN go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest \
&& go install github.com/bufbuild/buf/cmd/[email protected] \
&& go install github.com/fullstorydev/grpcurl/cmd/grpcurl@latest \
&& go install google.golang.org/protobuf/cmd/protoc-gen-go@latest \
&& go install connectrpc.com/connect/cmd/protoc-gen-connect-go@latest \
&& go install github.com/GeertJohan/go.rice/rice@latest \
&& go install github.com/goreleaser/goreleaser@latest \
&& npm install -g @bufbuild/protoc-gen-es @connectrpc/protoc-gen-connect-es
51 changes: 51 additions & 0 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
{
"name": "Go",
"build": {
"dockerfile": "Dockerfile",
"args": {
// Update the VARIANT arg to pick a version of Go: 1, 1.16, 1.17
// Append -bullseye or -buster to pin to an OS version.
// Use -bullseye variants on local arm64/Apple Silicon.
"VARIANT": "1-1.21-bookworm",
// Options
"NODE_VERSION": "lts/*"
}
},
"runArgs": [
"--cap-add=SYS_PTRACE",
"--security-opt",
"seccomp=unconfined"
],
"customizations": {
"vscode": {
// Set *default* container specific settings.json values on container create.
"settings": {
"go.toolsManagement.checkForUpdates": "local",
"go.useLanguageServer": true,
"go.gopath": "/go",
"go.goroot": "/usr/local/go",
"typescript.tsdk": "webui/node_modules/typescript/lib",
"typescript.enablePromptUseWorkspaceTsdk": true,
"gitlens.telemetry.enabled": false
},
// Add the IDs of extensions you want installed when the container is created.
"extensions": [
"golang.Go",
"ms-azuretools.vscode-docker",
"mhutchie.git-graph",
"eamodio.gitlens",
"donjayamanne.githistory",
"esbenp.prettier-vscode",
"iulian-radu-at.vscode-tasks-sidebar"
]
}
},
// Use 'forwardPorts' to make a list of ports inside the container available locally.
// "forwardPorts": [],

// Use 'postCreateCommand' to run commands after the container is created.
// "postCreateCommand": "go version",

// Comment out connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root.
"remoteUser": "vscode"
}
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
backrest
backrest-*
dist
backrest.exe
backrest.exe
__debug_bin
36 changes: 36 additions & 0 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
{
"version": "0.2.0",
"configurations": [
{
"name": "Debug Go backend",
"type": "go",
"request": "launch",
"mode": "debug",
"program": "${workspaceFolder}/backrest.go",
"output": "__debug_bin",
"preLaunchTask": "Build Webui",
},
{
"type": "chrome",
"request": "launch",
"preLaunchTask": "Parcel",
"postDebugTask": "Terminate Parcel",
"name": "Debug TS frontend",
"url": "http://localhost:1234",
"webRoot": "${workspaceFolder}/webui/src/",
"sourceMapPathOverrides": {
"../*": "${webRoot}/*"
}
}
],
"compounds": [
{
"name": "Debug Backrest (backend+frontend)",
"configurations": [
"Debug Go backend",
"Debug TS frontend"
],
"stopAll": true
}
]
}
51 changes: 51 additions & 0 deletions .vscode/tasks.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
{
"version": "2.0.0",
"tasks": [
{
"label": "npm i",
"type": "shell",
"command": "cd webui && npm i",
},
{
"label": "Parcel",
"type": "npm",
"script": "start",
"dependsOn": "npm i",
"isBackground": true,
"problemMatcher": {
"background": {
"activeOnStart": true,
"beginsPattern": "parcel serve",
"endsPattern": "Built in"
},
"pattern": {
"regexp": ".*"
}
},
"path": "webui"
},
{
"label": "Build Webui",
"type": "npm",
"script": "build",
"path": "webui",
"group": "build",
"problemMatcher": [],
"dependsOn": "npm i"
},
{
"label": "Terminate Parcel",
"command": "echo ${input:terminate}",
"type": "shell",
"problemMatcher": []
}
],
"inputs": [
{
"id": "terminate",
"type": "command",
"command": "workbench.action.tasks.terminate",
"args": "Parcel"
}
]
}
12 changes: 12 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,3 +29,15 @@ npm install -g @bufbuild/protoc-gen-es @connectrpc/protoc-gen-connect-es
(cd webui && npm i && npm run build)
(cd cmd/backrest && go build .)
```

## Using VSCode Dev Containers

You can also use VSCode with `Dev Containers` extension to quickly get up and running with a working development and debugging environment.

0. Make sure Docker and VSCode with Dev Containers extension is installed
1. Clone this repository
2. Open this folder in VSCode
3. When propmpted, click on `Open in Container` button, or run `> Dev Containers: Rebuild and Reopen in Containers` command
4. When container is started, go to `Run and Debug`, choose `Debug Backrest (backend+frontend)` and run it

Provided launch configuration has hot reload for typescript frontend.

0 comments on commit 3176f6e

Please sign in to comment.