diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 5188531..3d5ead5 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -48,9 +48,9 @@ "runArgs": ["--env-file", "${localWorkspaceFolder}/.devcontainer/.env"], "mounts": [ - "source=musher-spec-${devcontainerId}-gh-config,target=/home/vscode/.config/gh,type=volume", - "source=musher-spec-${devcontainerId}-claude-config,target=/home/vscode/.claude,type=volume", - "source=musher-spec-${devcontainerId}-codex-config,target=/home/vscode/.codex,type=volume" + "source=musher-${devcontainerId}-gh-config,target=/home/vscode/.config/gh,type=volume", + "source=musher-${devcontainerId}-claude-config,target=/home/vscode/.claude,type=volume", + "source=musher-${devcontainerId}-codex-config,target=/home/vscode/.codex,type=volume" ], "containerEnv": { @@ -123,7 +123,6 @@ "timonwong.shellcheck", "eamodio.gitlens", "bierner.markdown-mermaid", - "github.copilot", "github.copilot-chat" ], "settings": { diff --git a/.devcontainer/scripts/lib/base-setup.sh b/.devcontainer/scripts/lib/base-setup.sh index 24048c6..10fd5d0 100644 --- a/.devcontainer/scripts/lib/base-setup.sh +++ b/.devcontainer/scripts/lib/base-setup.sh @@ -90,17 +90,27 @@ base_setup_path() { export PATH="${_MISE_SHIMS}:${_HOME}/.local/bin:${PATH}" } -# Installs the pinned mise release via the official installer if mise is not -# already present. +# Installs the pinned mise release via the official installer unless that +# exact release is already present. +# +# A mise of any other version is replaced, not kept: the volumes and home +# directory outlive a pin bump, and a container created before one kept its +# older mise, which then refused the config's min_version and left every +# mise-managed CLI uninstalled. # # Outputs: # Writes progress to stderr via log() # Returns: # 0 on success, non-zero on failure base_install_mise() { + local installed="" if has_cmd mise; then - log "mise already installed, skipping" - return 0 + installed="$(mise --version 2>/dev/null | awk 'NR == 1 { print $1 }')" + if [[ "${installed}" == "${_MISE_VERSION#v}" ]]; then + log "mise ${installed} already installed, skipping" + return 0 + fi + log "mise ${installed:-of unknown version} is not the pinned ${_MISE_VERSION}; replacing it" fi log "Installing mise ${_MISE_VERSION} (https://mise.run)..." # MISE_VERSION is the installer's own input: it fetches that release rather