From 3fda932442e8b574f0d22e067271a719be6e8274 Mon Sep 17 00:00:00 2001 From: Julian Pawlowski Date: Sun, 12 Apr 2026 12:11:29 +0000 Subject: [PATCH] chore(devcontainer): wire commit message instructions and align jsonc formatting - Link commit-messages.instructions.md via commitMessageGeneration.instructions setting so the VS Code SCM Generate button applies project commit rules - Add explicit editor.formatOnSave: true to [jsonc] language block, matching the existing [json] block for consistent behavior Release-Notes: skip User-Impact: none --- .devcontainer/devcontainer.json | 345 ++++++++++++++++---------------- 1 file changed, 176 insertions(+), 169 deletions(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 0c62605..153d8f7 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,174 +1,181 @@ { - "name": "jpawlowski/hass.tibber_prices", - "image": "mcr.microsoft.com/devcontainers/python:3.14", - "postCreateCommand": "bash .devcontainer/setup-git.sh && scripts/setup/setup", - "postStartCommand": "scripts/motd", - "containerEnv": { - "PYTHONASYNCIODEBUG": "1", - "TIBBER_PRICES_DEV": "1" + "name": "jpawlowski/hass.tibber_prices", + "image": "mcr.microsoft.com/devcontainers/python:3.14", + "postCreateCommand": "bash .devcontainer/setup-git.sh && scripts/setup/setup", + "postStartCommand": "scripts/motd", + "containerEnv": { + "PYTHONASYNCIODEBUG": "1", + "TIBBER_PRICES_DEV": "1" + }, + "forwardPorts": [ + 8123, + 3000, + 3001 + ], + "portsAttributes": { + "8123": { + "label": "Home Assistant", + "onAutoForward": "notify" }, - "forwardPorts": [ - 8123, - 3000, - 3001 - ], - "portsAttributes": { - "8123": { - "label": "Home Assistant", - "onAutoForward": "notify" - }, - "3000": { - "label": "Docusaurus User Docs", - "onAutoForward": "notify" - }, - "3001": { - "label": "Docusaurus Developer Docs", - "onAutoForward": "notify" - } + "3000": { + "label": "Docusaurus User Docs", + "onAutoForward": "notify" }, - "customizations": { - "vscode": { - "extensions": [ - "charliermarsh.ruff", - "EditorConfig.EditorConfig", - "esbenp.prettier-vscode", - "github.copilot", - "github.vscode-pull-request-github", - "ms-python.python", - "ms-python.vscode-pylance", - "ms-vscode-remote.remote-containers", - "redhat.vscode-yaml", - "ryanluker.vscode-coverage-gutters" - ], - "settings": { - "editor.tabSize": 4, - "editor.formatOnSave": true, - "editor.formatOnType": false, - "extensions.ignoreRecommendations": false, - "files.eol": "\n", - "files.trimTrailingWhitespace": true, - "python.analysis.typeCheckingMode": "basic", - "python.analysis.autoImportCompletions": true, - "python.analysis.diagnosticMode": "workspace", - "python.analysis.diagnosticSeverityOverrides": { - "reportUnusedImport": "none", - "reportUnusedVariable": "none", - "reportUnusedCoroutine": "none", - "reportMissingTypeStubs": "none" - }, - "python.analysis.include": [ - "custom_components/tibber_prices" - ], - "python.analysis.exclude": [ - "**/.venv/**", - "**/venv/**", - "**/__pycache__/**", - "**/.git/**", - "**/.github/**", - "**/docs/**", - "**/node_modules/**" - ], - "python.defaultInterpreterPath": "${workspaceFolder}/.venv/bin/python", - "python.analysis.extraPaths": [ - "${workspaceFolder}/.venv/lib/python3.14/site-packages" - ], - "python.terminal.activateEnvironment": true, - "python.terminal.activateEnvInCurrentTerminal": true, - "python.testing.pytestArgs": [ - "--no-cov" - ], - "[json]": { - "editor.defaultFormatter": "esbenp.prettier-vscode", - "editor.tabSize": 2 - }, - "[jsonc]": { - "editor.defaultFormatter": "esbenp.prettier-vscode", - "editor.tabSize": 2 - }, - "[python]": { - "editor.defaultFormatter": "charliermarsh.ruff", - "editor.formatOnSave": true, - "editor.codeActionsOnSave": { - "source.fixAll.ruff": "explicit", - "source.organizeImports.ruff": "explicit" - } - }, - "[markdown]": { - "editor.wordWrap": "on" - }, - "yaml.customTags": [ - "!secret scalar", - "!include scalar", - "!include_dir_list scalar", - "!include_dir_merge_list scalar", - "!include_dir_named scalar", - "!include_dir_merge_named scalar", - "!input scalar" - ], - "markdown.validate.enabled": false, - "markdown.validate.fileLinks.enabled": "ignore", - "markdown.validate.fragmentLinks.enabled": "ignore", - "json.schemas": [ - { - "fileMatch": [ - "homeassistant/components/*/manifest.json" - ], - "url": "${containerWorkspaceFolder}/schemas/json/manifest_schema.json" - }, - { - "fileMatch": [ - "homeassistant/components/*/translations/*.json" - ], - "url": "${containerWorkspaceFolder}/schemas/json/translation_schema.json" - } - ], - "git.useConfigOnly": false - } - } - }, - "mounts": [ - "source=${localEnv:HOME}${localEnv:USERPROFILE}/.gitconfig,target=/home/vscode/.gitconfig.host,type=bind,consistency=cached" - ], - "remoteUser": "vscode", - "features": { - "ghcr.io/devcontainers/features/github-cli:1": {}, - "ghcr.io/flexwie/devcontainer-features/op:1": { - "version": "latest" - }, - "ghcr.io/devcontainers/features/node:1": { - "version": "24" - }, - "ghcr.io/devcontainers/features/rust:1": { - "version": "latest", - "profile": "minimal" - }, - "ghcr.io/devcontainer-community/devcontainer-features/yq:1": { - "version": "latest" - }, - "ghcr.io/devcontainers-extra/features/apt-packages:1": { - "packages": [ - "bat", - "eza", - "fd-find", - "ffmpeg", - "fzf", - "git-delta", - "httpie", - "hyperfine", - "ipython3", - "jo", - "jq", - "libpcap-dev", - "libturbojpeg0", - "miller", - "moreutils", - "ripgrep", - "shellcheck", - "shfmt", - "sqlite3", - "tree", - "yamllint" - ] - } + "3001": { + "label": "Docusaurus Developer Docs", + "onAutoForward": "notify" } + }, + "customizations": { + "vscode": { + "extensions": [ + "charliermarsh.ruff", + "EditorConfig.EditorConfig", + "esbenp.prettier-vscode", + "github.copilot", + "github.vscode-pull-request-github", + "ms-python.python", + "ms-python.vscode-pylance", + "ms-vscode-remote.remote-containers", + "redhat.vscode-yaml", + "ryanluker.vscode-coverage-gutters" + ], + "settings": { + "editor.tabSize": 4, + "editor.formatOnSave": true, + "editor.formatOnType": false, + "extensions.ignoreRecommendations": false, + "files.eol": "\n", + "files.trimTrailingWhitespace": true, + "python.analysis.typeCheckingMode": "basic", + "python.analysis.autoImportCompletions": true, + "python.analysis.diagnosticMode": "workspace", + "python.analysis.diagnosticSeverityOverrides": { + "reportUnusedImport": "none", + "reportUnusedVariable": "none", + "reportUnusedCoroutine": "none", + "reportMissingTypeStubs": "none" + }, + "python.analysis.include": [ + "custom_components/tibber_prices" + ], + "python.analysis.exclude": [ + "**/.venv/**", + "**/venv/**", + "**/__pycache__/**", + "**/.git/**", + "**/.github/**", + "**/docs/**", + "**/node_modules/**" + ], + "python.defaultInterpreterPath": "${workspaceFolder}/.venv/bin/python", + "python.analysis.extraPaths": [ + "${workspaceFolder}/.venv/lib/python3.14/site-packages" + ], + "python.terminal.activateEnvironment": true, + "python.terminal.activateEnvInCurrentTerminal": true, + "python.testing.pytestArgs": [ + "--no-cov" + ], + "[json]": { + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": true, + "editor.tabSize": 2 + }, + "[jsonc]": { + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": true, + "editor.tabSize": 2 + }, + "[python]": { + "editor.defaultFormatter": "charliermarsh.ruff", + "editor.formatOnSave": true, + "editor.codeActionsOnSave": { + "source.fixAll.ruff": "explicit", + "source.organizeImports.ruff": "explicit" + } + }, + "[markdown]": { + "editor.wordWrap": "on" + }, + "yaml.customTags": [ + "!secret scalar", + "!include scalar", + "!include_dir_list scalar", + "!include_dir_merge_list scalar", + "!include_dir_named scalar", + "!include_dir_merge_named scalar", + "!input scalar" + ], + "markdown.validate.enabled": false, + "markdown.validate.fileLinks.enabled": "ignore", + "markdown.validate.fragmentLinks.enabled": "ignore", + "json.schemas": [ + { + "fileMatch": [ + "homeassistant/components/*/manifest.json" + ], + "url": "${containerWorkspaceFolder}/schemas/json/manifest_schema.json" + }, + { + "fileMatch": [ + "homeassistant/components/*/translations/*.json" + ], + "url": "${containerWorkspaceFolder}/schemas/json/translation_schema.json" + } + ], + "github.copilot.chat.commitMessageGeneration.instructions": [ + { + "file": ".github/instructions/commit-messages.instructions.md" + } + ], + "git.useConfigOnly": false + } + } + }, + "mounts": [ + "source=${localEnv:HOME}${localEnv:USERPROFILE}/.gitconfig,target=/home/vscode/.gitconfig.host,type=bind,consistency=cached" + ], + "remoteUser": "vscode", + "features": { + "ghcr.io/devcontainers/features/github-cli:1": {}, + "ghcr.io/flexwie/devcontainer-features/op:1": { + "version": "latest" + }, + "ghcr.io/devcontainers/features/node:1": { + "version": "24" + }, + "ghcr.io/devcontainers/features/rust:1": { + "version": "latest", + "profile": "minimal" + }, + "ghcr.io/devcontainer-community/devcontainer-features/yq:1": { + "version": "latest" + }, + "ghcr.io/devcontainers-extra/features/apt-packages:1": { + "packages": [ + "bat", + "eza", + "fd-find", + "ffmpeg", + "fzf", + "git-delta", + "httpie", + "hyperfine", + "ipython3", + "jo", + "jq", + "libpcap-dev", + "libturbojpeg0", + "miller", + "moreutils", + "ripgrep", + "shellcheck", + "shfmt", + "sqlite3", + "tree", + "yamllint" + ] + } + } }