{
    "name": "Dapr Dev Environment",
    // Update the container version when you publish dev-container
    "image": "ghcr.io/dapr/dapr-dev:latest",
    // Replace with uncommented line below to build your own local copy of the image
    //"dockerFile": "../docker/Dockerfile-dev",
    "containerEnv": {
        // Uncomment to overwrite devcontainer .kube/config and .minikube certs with the localhost versions
        // each time the devcontainer starts, if the respective .kube-localhost/config and .minikube-localhost
        // folders respectively are bind mounted to the devcontainer.
        // "SYNC_LOCALHOST_KUBECONFIG": "true",

        // Uncomment to disable docker-in-docker and automatically proxy default /var/run/docker.sock to
        // the localhost bind-mount /var/run/docker-host.sock.
        // "BIND_LOCALHOST_DOCKER": "true",

        // Necessary for components-contrib's certification tests
        "GOLANG_PROTOBUF_REGISTRATION_CONFLICT": "ignore"
    },
    "features": {
        "ghcr.io/devcontainers/features/sshd:1": {},
        "ghcr.io/devcontainers/features/github-cli:1": {},
        "ghcr.io/devcontainers/features/azure-cli:1": {}
    },
    "mounts": [
        // Mount docker-in-docker library volume
        "type=volume,source=dind-var-lib-docker,target=/var/lib/docker",

        // Bind mount docker socket under an alias to support docker-from-docker
        "type=bind,source=/var/run/docker.sock,target=/var/run/docker-host.sock"

        // Uncomment to clone local .kube/config into devcontainer
        // "type=bind,source=${env:HOME}${env:USERPROFILE}/.kube,target=/home/dapr/.kube-localhost",

        // Uncomment to additionally clone minikube certs into devcontainer for use with .kube/config
        // "type=bind,source=${env:HOME}${env:USERPROFILE}/.minikube,target=/home/dapr/.minikube-localhost"
    ],
    // Always run image-defined default command
    "overrideCommand": false,
    // On Linux, this will prevent new files getting created as root, but you
    // may need to update the USER_UID and USER_GID in docker/Dockerfile-dev
    // to match your user if not 1000.
    "remoteUser": "dapr",
    "runArgs": [
        // Enable ptrace-based debugging for go
        "--cap-add=SYS_PTRACE",
        "--security-opt",
        "seccomp=unconfined",

        // Uncomment to bind to host network for local devcontainer; this is necessary if using the
        // bind-mounted /var/run/docker-host.sock directly.
        // "--net=host",

        // Enable docker-in-docker configuration. Comment out if not using for better security.
        "--privileged",

        // Run the entrypoint defined in container image.
        "--init"
    ],
    "customizations": {
        "vscode": {
            "extensions": [
                "davidanson.vscode-markdownlint",
                "golang.go",
                "ms-azuretools.vscode-dapr",
                "ms-azuretools.vscode-docker",
                "ms-kubernetes-tools.vscode-kubernetes-tools"
            ],
            "settings": {
                "go.toolsManagement.checkForUpdates": "local",
                "go.useLanguageServer": true,
                "go.gopath": "/go",
                "go.buildTags": "e2e,perf,conftests,unit,integration_test,certtests,allcomponents",
                "git.alwaysSignOff": true,
                "terminal.integrated.env.linux": {
                    "GOLANG_PROTOBUF_REGISTRATION_CONFLICT": "ignore"
                }
            }
        }
    },
    "workspaceFolder": "/workspaces/dapr",
    "workspaceMount": "type=bind,source=${localWorkspaceFolder},target=/workspaces/dapr"
}
