jdx/mise

mise run fails when adding env directives

mdesouky opened this issue · 2 comments

Describe the bug
When adding a python env line to [env] block in .mise.toml file as follows:

[env]
_.file = 'server/.env'
_.python.venv = { path = ".venv", create = true } # create the venv if it doesn't exist

and trying to run tasks I get the following error

The application panicked (crashed).
Message:  called `Result::unwrap()` on an `Err` value: JoinPathsError { inner: JoinPathsError }
Location: src/path_env.rs:50

Full trace

❯ RUST_BACKTRACE=full mise run install
The application panicked (crashed).
Message:  called `Result::unwrap()` on an `Err` value: JoinPathsError { inner: JoinPathsError }
Location: src/path_env.rs:50

  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ BACKTRACE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
                                ⋮ 9 frames hidden ⋮                               
  10: mise::toolset::Toolset::env_with_path::ha352fc7531460682
      at <unknown source file>:<unknown line>
  11: mise::cli::run::Run::run::h58120052c1c0853f
      at <unknown source file>:<unknown line>
  12: mise::cli::Cli::run::hf6cb0a1443c80811
      at <unknown source file>:<unknown line>
  13: mise::main::h4b059410b007a228
      at <unknown source file>:<unknown line>
  14: std::sys_common::backtrace::__rust_begin_short_backtrace::h59d757c488a0c1a5
      at <unknown source file>:<unknown line>
  15: std::rt::lang_start::{{closure}}::hc34123bf95d8d56d
      at <unknown source file>:<unknown line>
  16: std::panicking::try::h0cf3a98f51cee1e9
      at <unknown source file>:<unknown line>
  17: std::rt::lang_start_internal::h07dd9d9140cc1a1e
      at <unknown source file>:<unknown line>
  18: _main<unknown>
      at <unknown source file>:<unknown line>

Run with COLORBT_SHOW_HIDDEN=1 environment variable to disable frame filtering.

To Reproduce

  • Add the following line under the [env] block

_.python.venv = { path = ".venv", create = true }

Expected behavior
Mise tasks should run as normal which happens when you remove that line

mise doctor output

❯ mise doctor     
version: 2024.7.4 macos-arm64 (2024-07-19)
activated: yes
shims_on_path: yes

build_info: 
  Target: aarch64-apple-darwin
  Features: DEFAULT, NATIVE_TLS
  Built: Fri, 19 Jul 2024 02:39:35 +0000
  Rust Version: rustc 1.79.0 (129f3b996 2024-06-10) (Homebrew)
  Profile: release

shell: 
  /bin/zsh
  zsh 5.9 (x86_64-apple-darwin23.0)

dirs: 
  data: ~/.local/share/mise
  config: ~/.config/mise
  cache: ~/Library/Caches/mise
  state: ~/.local/state/mise
  shims: ~/.local/share/mise/shims

config_files: 
  ~/.config/mise/config.toml
  ~/.mise.toml
  ~/git/logbooks/.mise.toml

backends: 
  cargo
  core
  go
  npm
  pipx
  spm
  ubi

plugins: 
  aws-iam-authenticator  https://github.com/zekker6/asdf-aws-iam-authenticator#fd1866a
  awscli                 https://github.com/MetricMike/asdf-awscli.git#ac99537
  bun                    (core)
  deno                   (core)
  erlang                 (core)
  go                     (core)
  java                   (core)
  kubectl                https://github.com/asdf-community/asdf-kubectl.git#cbe6df4
  kubectx                https://gitlab.com/wt0f/asdf-kubectx.git#8c0b4aa
  node                   (core)
  pnpm                   https://github.com/jonathanmorley/asdf-pnpm.git#305baff
  poetry                 https://github.com/mise-plugins/mise-poetry.git#431c335
  python                 (core)
  ruby                   (core)
  sops                   https://github.com/mise-plugins/mise-sops#d746770
  terraform              https://github.com/asdf-community/asdf-hashicorp.git#f1602b6
  terragrunt             https://github.com/ohmer/asdf-terragrunt.git#4a6651a
  tflint                 https://github.com/skyzyx/asdf-tflint.git#37e7eb9
  trivy                  https://github.com/zufardhiyaulhaq/asdf-trivy.git#537a22a
  zig                    (core)

toolset: 
  poetry@1.8.3          
  node@16.20.2          
  python@3.11.9         
  pnpm@8.15.9           
  aws-iam-authenticator@0.6.11  
  kubectx@0.9.5         
  kubectl@1.28.1        
  awscli@2.13.14        

env_vars: 
  MISE_SHELL=zsh

settings: 
  activate_aggressive = false
  all_compile = false
  always_keep_download = false
  always_keep_install = false
  asdf_compat = false
  cargo_binstall = true
  color = true
  disable_default_shorthands = false
  disable_tools = []
  experimental = true
  go_default_packages_file = "~/.default-go-packages"
  go_download_mirror = "https://dl.google.com/go"
  go_repo = "https://github.com/golang/go"
  go_set_gopath = false
  go_set_goroot = true
  go_skip_checksum = false
  http_timeout = 30
  jobs = 4
  legacy_version_file = true
  legacy_version_file_disable_tools = []
  libgit2 = true
  node_compile = false
  not_found_auto_install = true
  paranoid = false
  plugin_autoupdate_last_check_duration = "7d"
  python_compile = true
  python_default_packages_file = "/Users/mohamed/.default-python-packages"
  python_pyenv_repo = "https://github.com/pyenv/pyenv.git"
  raw = false
  trusted_config_paths = []
  quiet = false
  verbose = false
  yes = false
  ci = false
  debug = false
  trace = false
  log_level = "info"
  python_venv_auto_create = false

  [status]
  missing_tools = "if_other_versions_installed"
  show_env = false
  show_tools = false

No warnings found
1 problem found:

1. new mise version 2024.8.13 available, currently on 2024.7.4

Additional context
debug output

❯ mise run install --debug
[DEBUG] ARGS: /opt/homebrew/bin/mise run install --debug
[DEBUG] Config {
    Config Files: [
        "~/git/logbooks/.mise.toml",
        "~/.mise.toml",
        "~/.config/mise/config.toml",
    ],
}
[DEBUG] Toolset (1.376375ms): poetry@latest, node@16, python@3.11, pnpm@8, aws-iam-authenticator@0.6.11, kubectx@0.9.5, kubectl@1.28.1, awscli@2.13.14
[DEBUG] glob: "/Users/mohamed/git/logbooks/server/.env"
The application panicked (crashed).
Message:  called `Result::unwrap()` on an `Err` value: JoinPathsError { inner: JoinPathsError }
Location: src/path_env.rs:50

Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.
Run with RUST_BACKTRACE=full to include source snippets.

Trace output

❯ mise run install --trace
[DEBUG] (1) mise::cli: [src/cli/mod.rs:217] ARGS: /opt/homebrew/bin/mise run install --trace
[TRACE] (1) mise::config: [src/config/mod.rs:69] Settings: Settings {
    activate_aggressive: false,
    all_compile: false,
    always_keep_download: false,
    always_keep_install: false,
    asdf_compat: false,
    cargo_binstall: true,
    color: true,
    disable_default_shorthands: false,
    disable_tools: {},
    experimental: true,
    go_default_packages_file: "~/.default-go-packages",
    go_download_mirror: "https://dl.google.com/go",
    go_repo: "https://github.com/golang/go",
    go_set_gobin: None,
    go_set_gopath: false,
    go_set_goroot: true,
    go_skip_checksum: false,
    http_timeout: 30,
    jobs: 4,
    legacy_version_file: true,
    legacy_version_file_disable_tools: {},
    libgit2: true,
    node_compile: false,
    not_found_auto_install: true,
    paranoid: false,
    plugin_autoupdate_last_check_duration: "7d",
    python_compile: Some(
        true,
    ),
    python_default_packages_file: Some(
        "/Users/mohamed/.default-python-packages",
    ),
    python_patch_url: None,
    python_patches_directory: None,
    python_precompiled_arch: None,
    python_precompiled_os: None,
    python_pyenv_repo: "https://github.com/pyenv/pyenv.git",
    raw: false,
    shorthands_file: None,
    status: SettingsStatus {
        missing_tools: IfOtherVersionsInstalled,
        show_env: false,
        show_tools: false,
    },
    task_output: None,
    trusted_config_paths: {},
    quiet: false,
    verbose: true,
    yes: false,
    ci: false,
    cd: None,
    debug: true,
    env_file: None,
    trace: true,
    log_level: "trace",
    python_venv_auto_create: false,
}
[TRACE] (3) mise::plugins::mise_plugin_toml: [src/plugins/mise_plugin_toml.rs:28] parsing: /Users/mohamed/.local/share/mise/plugins/poetry/mise.plugin.toml
[TRACE] (6) mise::plugins::mise_plugin_toml: [src/plugins/mise_plugin_toml.rs:28] parsing: /Users/mohamed/.local/share/mise/plugins/sops/mise.plugin.toml
[TRACE] (6) mise::file: [src/file.rs:129] cat ~/.local/share/mise/plugins/sops/mise.plugin.toml
[TRACE] (3) mise::file: [src/file.rs:129] cat ~/.local/share/mise/plugins/poetry/mise.plugin.toml
[TRACE] (4) mise::file: [src/file.rs:129] cat ~/.local/share/mise/installs/tflint/.mise.backend.json
[TRACE] (8) mise::file: [src/file.rs:129] cat ~/.local/share/mise/installs/awscli/.mise.backend.json
[TRACE] (6) mise::file: [src/file.rs:129] cat ~/.local/share/mise/installs/pnpm/.mise.backend.json
[TRACE] (3) mise::file: [src/file.rs:129] cat ~/.local/share/mise/installs/poetry/.mise.backend.json
[TRACE] (5) mise::file: [src/file.rs:129] cat ~/.local/share/mise/installs/python/.mise.backend.json
[TRACE] (2) mise::file: [src/file.rs:129] cat ~/.local/share/mise/installs/terraform/.mise.backend.json
[TRACE] (9) mise::file: [src/file.rs:129] cat ~/.local/share/mise/installs/terragrunt/.mise.backend.json
[TRACE] (7) mise::file: [src/file.rs:129] cat ~/.local/share/mise/installs/node/.mise.backend.json
[TRACE] (3) mise::plugins::mise_plugin_toml: [src/plugins/mise_plugin_toml.rs:28] parsing: /Users/mohamed/.local/share/mise/plugins/poetry/mise.plugin.toml
[TRACE] (3) mise::file: [src/file.rs:129] cat ~/.local/share/mise/plugins/poetry/mise.plugin.toml
[TRACE] (2) mise::file: [src/file.rs:129] cat ~/.local/share/mise/installs/aws-iam-authenticator/.mise.backend.json
[TRACE] (9) mise::file: [src/file.rs:129] cat ~/.local/share/mise/installs/kubectx/.mise.backend.json
[TRACE] (3) mise::file: [src/file.rs:129] cat ~/.local/share/mise/installs/kubectl/.mise.backend.json
[TRACE] (8) mise::file: [src/file.rs:129] cat ~/.local/share/mise/installs/sops/.mise.backend.json
[TRACE] (8) mise::plugins::mise_plugin_toml: [src/plugins/mise_plugin_toml.rs:28] parsing: /Users/mohamed/.local/share/mise/plugins/sops/mise.plugin.toml
[TRACE] (8) mise::file: [src/file.rs:129] cat ~/.local/share/mise/plugins/sops/mise.plugin.toml
[TRACE] (5) mise::file: [src/file.rs:129] cat ~/.local/share/mise/installs/trivy/.mise.backend.json
[TRACE] (8) mise::cache: [src/cache.rs:87] reading ~/Library/Caches/mise/terraform/legacy_filenames-a1faa.msgpack.z
[TRACE] (2) mise::cache: [src/cache.rs:87] reading ~/Library/Caches/mise/terragrunt/legacy_filenames-a1faa.msgpack.z
[TRACE] (6) mise::cache: [src/cache.rs:87] reading ~/Library/Caches/mise/poetry/legacy_filenames-a1faa.msgpack.z
[TRACE] (3) mise::config::config_file::mise_toml: [src/config/config_file/mise_toml.rs:86] parsing: ~/.mise.toml
[TRACE] (3) mise::file: [src/file.rs:129] cat ~/.mise.toml
[TRACE] (4) mise::config::config_file::mise_toml: [src/config/config_file/mise_toml.rs:86] parsing: ~/.config/mise/config.toml
[TRACE] (4) mise::file: [src/file.rs:129] cat ~/.config/mise/config.toml
[TRACE] (2) mise::config::config_file::mise_toml: [src/config/config_file/mise_toml.rs:86] parsing: ~/git/logbooks/.mise.toml
[TRACE] (2) mise::file: [src/file.rs:129] cat ~/git/logbooks/.mise.toml
[TRACE] (4) mise::file: [src/file.rs:129] cat ~/.config/mise/config.toml
[TRACE] (2) mise::file: [src/file.rs:129] cat ~/git/logbooks/.mise.toml
[TRACE] (3) mise::file: [src/file.rs:129] cat ~/.mise.toml
[TRACE] (4) mise::config::config_file::mise_toml: [src/config/config_file/mise_toml.rs:96] [settings]
experimental = true
python_compile = true

[tools]
python = "3.12.0"

[TRACE] (3) mise::config::config_file::mise_toml: [src/config/config_file/mise_toml.rs:96] [tools]
python = "3.12.1"
node = "18"
pnpm = "8"
aws-iam-authenticator = "0.6.11"
kubectx = "0.9.5"
kubectl = "1.28.1"
awscli = "2.13.14"

[TRACE] (2) mise::config::config_file::mise_toml: [src/config/config_file/mise_toml.rs:96] [tools]
poetry = { version = 'latest', pyproject = 'server/pyproject.toml' }
node = '16'
python = { version='3.11', virtualenv='.venv' }

[env]
_.file = 'server/.env'
_.python.venv = { path = ".venv", create = true } # create the venv if it doesn't exist

[tasks."install:tools"]
description = "Sets up tools"
run = ["mise install"]


[tasks."install:python:pip"]
description = "Upgrade pip to latest"
run = ["python -m pip install --upgrade pip"]
depends = ["install:tools"]

[tasks."install:python:precommit"]
description = "Sets up pre_commit"
run = ["pip install pre-commit", "mise reshim", "pre-commit install"]
depends = ["install:python:pip"]

[tasks."install:python:requirements"]
description = "Sets up pre_commit"
run = ["poetry install -C server"]
depends = ["install:python:pip"]

[tasks.install]
description = "Installs everything"
depends = ["install:*"]


[DEBUG] (1) mise::config: [src/config/mod.rs:90] Config {
    Config Files: [
        "~/git/logbooks/.mise.toml",
        "~/.mise.toml",
        "~/.config/mise/config.toml",
    ],
}
[TRACE] (1) mise::config: [src/config/mod.rs:235] loading task [install:tools] mise install from ~/git/logbooks/.mise.toml
[TRACE] (1) mise::config: [src/config/mod.rs:235] loading task [install:python:requirements] poetry install -C server from ~/git/logbooks/.mise.toml
[TRACE] (1) mise::config: [src/config/mod.rs:235] loading task [install:python:precommit] pip install pre-commit from ~/git/logbooks/.mise.toml
[TRACE] (1) mise::config: [src/config/mod.rs:235] loading task [install:python:pip] python -m pip install --upgrade pip from ~/git/logbooks/.mise.toml
[TRACE] (1) mise::config: [src/config/mod.rs:235] loading task [install] from ~/git/logbooks/.mise.toml
[DEBUG] (1) mise::toolset::builder: [src/toolset/builder.rs:48] Toolset (2.628625ms): poetry@latest, node@16, python@3.11, pnpm@8, aws-iam-authenticator@0.6.11, kubectx@0.9.5, kubectl@1.28.1, awscli@2.13.14
[DEBUG] (1) xx::file: [/Users/brew/Library/Caches/Homebrew/cargo_cache/registry/src/index.crates.io-6f17d22bba15001f/xx-1.1.5/src/file.rs:212] glob: "/Users/mohamed/git/logbooks/server/.env"
[TRACE] (1) mise::config::env_directive: [src/config/env_directive.rs:164] python venv: .venv create=true
[TRACE] (2) mise::backend::asdf: [src/backend/asdf.rs:856] cache key element: {% if project_root %}
    {{ project_root | canonicalize }}
  {% endif %} -> /Users/mohamed/git/logbooks
[TRACE] (2) mise::backend::asdf: [src/backend/asdf.rs:856] cache key element: {% if opts.pyproject %}
    {{ opts.pyproject }}
  {% endif %} -> server/pyproject.toml
[TRACE] (2) mise::cache: [src/cache.rs:87] reading ~/Library/Caches/mise/poetry/1.8.3/exec_env/533c65f7f2-3a4016d2f4-a1faa.msgpack.z
[TRACE] (4) mise::cache: [src/cache.rs:87] reading ~/Library/Caches/mise/pnpm/8.15.9/list_bin_paths-a1faa.msgpack.z
[TRACE] (2) mise::backend::asdf: [src/backend/asdf.rs:856] cache key element: {% if project_root %}
    {{ project_root | canonicalize }}
  {% endif %} -> /Users/mohamed/git/logbooks
[TRACE] (5) mise::cache: [src/cache.rs:87] reading ~/Library/Caches/mise/awscli/2.13.14/list_bin_paths-a1faa.msgpack.z
[TRACE] (6) mise::cache: [src/cache.rs:87] reading ~/Library/Caches/mise/kubectx/0.9.5/list_bin_paths-a1faa.msgpack.z
[TRACE] (3) mise::cache: [src/cache.rs:87] reading ~/Library/Caches/mise/aws-iam-authenticator/0.6.11/list_bin_paths-a1faa.msgpack.z
[TRACE] (7) mise::cache: [src/cache.rs:87] reading ~/Library/Caches/mise/kubectl/1.28.1/list_bin_paths-a1faa.msgpack.z
[TRACE] (2) mise::backend::asdf: [src/backend/asdf.rs:856] cache key element: {% if opts.pyproject %}
    {{ opts.pyproject }}
  {% endif %} -> server/pyproject.toml
[TRACE] (2) mise::cache: [src/cache.rs:87] reading ~/Library/Caches/mise/poetry/1.8.3/list_bin_paths/533c65f7f2-3a4016d2f4-a1faa.msgpack.z
The application panicked (crashed).
Message:  called `Result::unwrap()` on an `Err` value: JoinPathsError { inner: JoinPathsError }
Location: src/path_env.rs:50

Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.
Run with RUST_BACKTRACE=full to include source snippets.

I've addressed this bug in #2511

thanks @mcallaway