Description
Describe the bug
I'm trying to rewrite some of our Make targets to use Mise tasks, but I'm having trouble with environment variables. It doesn't matter if I set the variable explicitly in the [env]
block in the config file, specify it via a .env
file set in env._.file
, or export it in a shell file specified in env._.source
. The issue is the same. I can't access the variable in templates using the env
object or the get_env
function. However, if I use the same variable as a bash variable (like $FOO
) in a task, it works without any issues.
To Reproduce
Example 1: task
# mise.toml
min_version = "2024.12.14"
[env]
VERSION_CONTROLLER_GEN = "{{ exec(command='go list -f {{.Version}} -m sigs.k8s.io/controller-tools') }}"
BAR = "bar"
[tasks.bar]
run = """
echo '{{ env.BAR }} {{ get_env(name="BAR") }}'
echo '{{ env.VERSION_CONTROLLER_GEN }} {{ get_env(name="VERSION_CONTROLLER_GEN") }}'
"""
Result of mise run bar
:
panic in task: panicked at src/task/task_script_parser.rs:280:54:
called `Result::unwrap()` on an `Err` value: Error { kind: Msg("Failed to render '__tera_one_off'"), source: Some(Error { kind: Msg("Variable `env.BAR` not found in context while rendering '__tera_one_off'"), source: None }) }
Example 2: tool version
min_version = "2024.12.14"
[env]
VERSION_CONTROLLER_GEN = "{{ exec(command='go list -f {{.Version}} -m sigs.k8s.io/controller-tools') }}"
[tools]
controller-gen = "{{ env.VERSION_CONTROLLER_GEN }}"
In this situation mise is broken and even mise doctor
returns
mise ERROR failed to parse template {{ env.VERSION_CONTROLLER_GEN }} in ~/project/mise.toml
mise ERROR Failed to render '__tera_one_off'
mise ERROR Variable `env.VERSION_CONTROLLER_GEN` not found in context while rendering '__tera_one_off'
mise ERROR Run with --verbose or MISE_VERBOSE=1 for more information
Expected behavior
Variables set in the [env]
block, a .env
file (using env._.file
), or a shell file (using env._.source
) should be available in templates. They should work with the env
object and the get_env
function, no matter how they are defined.
mise doctor
output
version: 2024.12.14 macos-arm64 (ac3079c 2024-12-18)
activated: yes
shims_on_path: no
build_info:
Target: aarch64-apple-darwin
Features: DEFAULT, NATIVE_TLS, OPENSSL
Built: Wed, 18 Dec 2024 18:58:00 +0000
Rust Version: rustc 1.83.0 (90b35a623 2024-11-26)
Profile: release
shell:
/opt/homebrew/bin/fish
fish, version 3.7.1
dirs:
cache: ~/Library/Caches/mise
config: ~/.config/mise
data: ~/.local/share/mise
shims: ~/.local/share/mise/shims
state: ~/.local/state/mise
config_files:
~/.config/mise/config.toml
~/project/mise.toml
backends:
aqua
asdf
cargo
core
gem
go
npm
pipx
spm
ubi
vfox
plugins:
clang-format git@github.com:higebu/asdf-llvm.git#c527fd9
oapi-codegen git@github.com:dylanrayboss/asdf-oapi-codegen.git#a988840
toolset:
aqua:GoogleContainerTools/container-structure-test@1.19.3
aqua:etcd-io/etcd@3.5.17
aqua:golangci/golangci-lint@1.62.0
aqua:helm/helm@3.16.4
aqua:jqlang/jq@1.7.1
aqua:koalaman/shellcheck@0.10.0
aqua:kubernetes-sigs/kubebuilder@4.3.1
aqua:kubernetes/kubectl@1.32.0
aqua:norwoodj/helm-docs@1.11.0
aqua:protocolbuffers/protobuf-go/protoc-gen-go@1.28.1
aqua:protocolbuffers/protobuf/protoc@29.1
aqua:stackrox/kube-linter@0.6.5
asdf:oapi-codegen@2.4.1
github.com/chrusty/protoc-gen-jsonschema/cmd/protoc-gen-jsonschema@v0.0.0-20230606235304-e35f2ad05c0c
go:github.com/envoyproxy/protoc-gen-validate@v1.1.0
go:github.com/google/osv-scanner/cmd/osv-scanner@1.9.1
go:github.com/onsi/ginkgo/v2/ginkgo@v2.22.0
go:google.golang.org/grpc/cmd/protoc-gen-go-grpc@1.1.0
go:sigs.k8s.io/controller-tools/cmd/controller-gen@v0.16.5
ubi:bartsmykla/clang-tools-static-binaries@foo
ubi:hadolint/hadolint@2.12.0
ubi:jdx/usage@1.6.0
ubi:k3d-io/k3d@5.7.5
ubi:kubernetes-sigs/kind@0.26.0
ubi:mikefarah/yq@4.30.8
path:
~/.local/share/mise/installs/container-structure-test/1.19.3
~/.local/share/mise/installs/controller-gen/v0.16.5/bin
~/.local/share/mise/installs/etcd/3.5.17/etcd-v3.5.17-darwin-amd64
~/.local/share/mise/installs/ginkgo/v2.22.0/bin
~/.local/share/mise/installs/golangci-lint/1.62.0/golangci-lint-1.62.0-darwin-arm64
~/.local/share/mise/installs/hadolint/2.12.0/bin
~/.local/share/mise/installs/helm/3.16.4/darwin-arm64
~/.local/share/mise/installs/helm-docs/1.11.0
~/.local/share/mise/installs/jq/1.7.1
~/.local/share/mise/installs/k3d/5.7.5/bin
~/.local/share/mise/installs/kind/0.26.0/bin
~/.local/share/mise/installs/kube-linter/0.6.5
~/.local/share/mise/installs/kubebuilder/4.3.1
~/.local/share/mise/installs/kubectl/1.32.0
~/.local/share/mise/installs/oapi-codegen/2.4.1/bin
~/.local/share/mise/installs/osv-scanner/1.9.1/bin
~/.local/share/mise/installs/protoc/29.1/bin
~/.local/share/mise/installs/protoc-gen-go/1.28.1
~/.local/share/mise/installs/protoc-gen-go-grpc/1.1.0/bin
~/.local/share/mise/installs/protoc-gen-jsonschema/v0.0.0-20230606235304-e35f2ad05c0c/bin
~/.local/share/mise/installs/protoc-gen-validate/v1.1.0/bin
~/.local/share/mise/installs/shellcheck/0.10.0/shellcheck-v0.10.0
~/.local/share/mise/installs/yq/4.30.8/bin
~/.local/share/mise/installs/usage/1.6.0/bin
~/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.4.darwin-arm64/bin
~/go/bin
~/.local/bin
/opt/homebrew/bin
/opt/homebrew/sbin
/opt/homebrew/opt/make/libexec/gnubin
/opt/homebrew/opt/coreutils/libexec/gnubin
~/.cargo/bin
/bin
~/go/bin
~/bin
/usr/local/opt/libiconv/bin
/usr/local/sbin
/usr/local/opt/ruby/bin
/usr/local/opt/openssl@3/bin
/usr/local/bin
/usr/bin
/usr/sbin
/Library/Apple/usr/bin
/usr/local/MacGPG2/bin
env_vars:
MISE_SHELL=fish
settings:
experimental true ~/.config/mise/config.toml
experimental true ~/project/mise.toml
No problems found
Additional context
Add any other context about the problem here. Consider running mise with --debug
or --trace
for extra debug info.
Output of mise doctor -vv
when used {{ env.VERSION_CONTROLLER_GEN }}
as a tool version:
TRACE 1 [src/cli/mod.rs:313] logger done
TRACE 1 [src/cli/mod.rs:314] migrate start
TRACE 1 [src/cli/mod.rs:314] migrate done
DEBUG 1 [src/cli/mod.rs:319] ARGS: /Users/bart/.local/bin/mise doctor -vv
TRACE 1 [src/cli/mod.rs:325] run doctor start
version: 2024.12.14 macos-arm64 (ac3079c 2024-12-18)
activated: yes
shims_on_path: no
build_info:
Target: aarch64-apple-darwin
Features: DEFAULT, NATIVE_TLS, OPENSSL
Built: Wed, 18 Dec 2024 18:58:00 +0000
Rust Version: rustc 1.83.0 (90b35a623 2024-11-26)
Profile: release
DEBUG 1 [src/cmd.rs:94] $ /opt/homebrew/bin/fish --version
shell:
/opt/homebrew/bin/fish
fish, version 3.7.1
dirs:
cache: ~/Library/Caches/mise
config: ~/.config/mise
data: ~/.local/share/mise
shims: ~/.local/share/mise/shims
state: ~/.local/state/mise
TRACE 1 [src/config/mod.rs:95] load start
TRACE 1 [src/backend/mod.rs:56] load_tools start
TRACE 3 [src/file.rs:176] cat ~/.local/share/mise/installs/container-structure-test/.mise.backend
TRACE 4 [src/file.rs:176] cat ~/.local/share/mise/installs/kustomize/.mise.backend
TRACE 7 [src/file.rs:176] cat ~/.local/share/mise/installs/protoc/.mise.backend
TRACE 15 [src/file.rs:176] cat ~/.local/share/mise/installs/protoc-gen-go/.mise.backend
TRACE 13 [src/file.rs:176] cat ~/.local/share/mise/installs/oapi-codegen/.mise.backend
TRACE 14 [src/file.rs:176] cat ~/.local/share/mise/installs/jq/.mise.backend
TRACE 11 [src/file.rs:176] cat ~/.local/share/mise/installs/kind/.mise.backend
TRACE 16 [src/file.rs:176] cat ~/.local/share/mise/installs/helm-docs/.mise.backend
TRACE 3 [src/toolset/install_state.rs:99] init_tools container-structure-test
TRACE 5 [src/file.rs:176] cat ~/.local/share/mise/installs/ginkgo/.mise.backend
TRACE 3 [src/file.rs:176] cat ~/.local/share/mise/installs/kube-linter/.mise.backend
TRACE 9 [src/file.rs:176] cat ~/.local/share/mise/installs/controller-gen/.mise.backend
TRACE 6 [src/file.rs:176] cat ~/.local/share/mise/installs/helm/.mise.backend
TRACE 10 [src/file.rs:176] cat ~/.local/share/mise/installs/kubebuilder/.mise.backend
TRACE 7 [src/toolset/install_state.rs:99] init_tools protoc
TRACE 15 [src/toolset/install_state.rs:99] init_tools protoc-gen-go
TRACE 14 [src/toolset/install_state.rs:99] init_tools jq
TRACE 4 [src/toolset/install_state.rs:99] init_tools kustomize
TRACE 15 [src/file.rs:176] cat ~/.local/share/mise/installs/osv-scanner/.mise.backend
TRACE 14 [src/file.rs:176] cat ~/.local/share/mise/installs/k3d/.mise.backend
TRACE 5 [src/toolset/install_state.rs:99] init_tools ginkgo
TRACE 16 [src/toolset/install_state.rs:99] init_tools helm-docs
TRACE 5 [src/file.rs:176] cat ~/.local/share/mise/installs/golangci-lint/.mise.backend
TRACE 8 [src/file.rs:176] cat ~/.local/share/mise/installs/protoc-gen-validate/.mise.backend
TRACE 11 [src/toolset/install_state.rs:99] init_tools kind
TRACE 12 [src/file.rs:176] cat ~/.local/share/mise/installs/protoc-gen-go-grpc/.mise.backend
TRACE 13 [src/toolset/install_state.rs:99] init_tools oapi-codegen
TRACE 16 [src/file.rs:176] cat ~/.local/share/mise/installs/usage/.mise.backend
TRACE 11 [src/file.rs:176] cat ~/.local/share/mise/installs/skaffold/.mise.backend
TRACE 10 [src/toolset/install_state.rs:99] init_tools kubebuilder
TRACE 9 [src/toolset/install_state.rs:99] init_tools controller-gen
TRACE 15 [src/toolset/install_state.rs:99] init_tools osv-scanner
TRACE 3 [src/toolset/install_state.rs:99] init_tools kube-linter
TRACE 7 [src/file.rs:176] cat ~/.local/share/mise/installs/protoc-gen-jsonschema/.mise.backend
TRACE 15 [src/file.rs:176] cat ~/.local/share/mise/installs/goreleaser/.mise.backend
TRACE 3 [src/file.rs:176] cat ~/.local/share/mise/installs/hadolint/.mise.backend
TRACE 4 [src/toolset/install_state.rs:99] init_tools ubi-cli-cli
TRACE 10 [src/file.rs:176] cat ~/.local/share/mise/installs/kubectl/.mise.backend
TRACE 13 [src/toolset/install_state.rs:99] init_tools ubi-muttleyxd-clang-tools-static-binaries
TRACE 9 [src/file.rs:176] cat ~/.local/share/mise/installs/etcd/.mise.backend
TRACE 13 [src/file.rs:176] cat ~/.local/share/mise/installs/yq/.mise.backend
TRACE 6 [src/toolset/install_state.rs:99] init_tools helm
TRACE 4 [src/file.rs:176] cat ~/.local/share/mise/installs/shellcheck/.mise.backend
TRACE 14 [src/toolset/install_state.rs:99] init_tools k3d
TRACE 6 [src/file.rs:176] cat ~/.local/share/mise/installs/ubi-bartsmykla-clang-tools-static-binaries/.mise.backend
TRACE 8 [src/toolset/install_state.rs:99] init_tools protoc-gen-validate
TRACE 12 [src/toolset/install_state.rs:99] init_tools protoc-gen-go-grpc
TRACE 5 [src/toolset/install_state.rs:99] init_tools golangci-lint
TRACE 7 [src/toolset/install_state.rs:99] init_tools protoc-gen-jsonschema
TRACE 15 [src/toolset/install_state.rs:99] init_tools goreleaser
TRACE 3 [src/toolset/install_state.rs:99] init_tools hadolint
TRACE 11 [src/toolset/install_state.rs:99] init_tools skaffold
TRACE 16 [src/toolset/install_state.rs:99] init_tools usage
TRACE 6 [src/toolset/install_state.rs:99] init_tools ubi:bartsmykla/clang-tools-static-binaries
TRACE 13 [src/toolset/install_state.rs:99] init_tools yq
TRACE 9 [src/toolset/install_state.rs:99] init_tools etcd
TRACE 4 [src/toolset/install_state.rs:99] init_tools shellcheck
TRACE 10 [src/toolset/install_state.rs:99] init_tools kubectl
TRACE 1 [src/toolset/install_state.rs:56] init_plugins clang-format
TRACE 1 [src/toolset/install_state.rs:56] init_plugins oapi-codegen
TRACE 1 [src/registry.rs:41] disable_backends
TRACE 1 [src/registry.rs:45] disable_backends
TRACE 1 [src/backend/mod.rs:66] load_tools core
TRACE 1 [src/backend/mod.rs:77] load_tools install_state
TRACE 1 [src/backend/mod.rs:91] load_tools done
TRACE 1 [src/config/mod.rs:97] load idiomatic_files
TRACE 1 [src/config/mod.rs:103] load config_filenames
TRACE 1 [src/config/mod.rs:105] load config_paths
TRACE 1 [src/config/mod.rs:106] config_paths: ["/Users/bart/project/mise.toml", "/Users/bart/.config/mise/config.toml"]
TRACE 3 [src/file.rs:176] cat ~/project/mise.toml
TRACE 4 [src/file.rs:176] cat ~/.config/mise/config.toml
TRACE 3 [src/config/config_file/mise_toml.rs:112] parsing: ~/project/mise.toml
TRACE 4 [src/config/config_file/mise_toml.rs:112] parsing: ~/.config/mise/config.toml
TRACE 3 [src/cli/args/tool_arg.rs:60] parsing ToolVersionType from: 1.19.3
TRACE 3 [src/cli/args/tool_arg.rs:60] parsing ToolVersionType from: {{ env.VERSION_CONTROLLER_GEN }}
TRACE 3 [src/cli/args/tool_arg.rs:60] parsing ToolVersionType from: 3.5.17
TRACE 4 [src/cli/args/tool_arg.rs:60] parsing ToolVersionType from: latest
TRACE 3 [src/cli/args/tool_arg.rs:60] parsing ToolVersionType from: {{ exec(command='go list -f {{.Version}} -m github.com/onsi/ginkgo/v2') }}
TRACE 3 [src/cli/args/tool_arg.rs:60] parsing ToolVersionType from: 1.62.0
TRACE 3 [src/cli/args/tool_arg.rs:60] parsing ToolVersionType from: 2.12.0
TRACE 3 [src/cli/args/tool_arg.rs:60] parsing ToolVersionType from: 3.16.4
TRACE 3 [src/cli/args/tool_arg.rs:60] parsing ToolVersionType from: 1.11.0
TRACE 3 [src/cli/args/tool_arg.rs:60] parsing ToolVersionType from: 1.7.1
TRACE 3 [src/cli/args/tool_arg.rs:60] parsing ToolVersionType from: 5.7.5
TRACE 3 [src/cli/args/tool_arg.rs:60] parsing ToolVersionType from: 0.26.0
TRACE 3 [src/cli/args/tool_arg.rs:60] parsing ToolVersionType from: 0.6.5
TRACE 3 [src/cli/args/tool_arg.rs:60] parsing ToolVersionType from: 4.3.1
TRACE 3 [src/cli/args/tool_arg.rs:60] parsing ToolVersionType from: 1.32.0
TRACE 3 [src/cli/args/tool_arg.rs:60] parsing ToolVersionType from: 2.4.1
TRACE 3 [src/cli/args/tool_arg.rs:60] parsing ToolVersionType from: 1.9.1
TRACE 3 [src/cli/args/tool_arg.rs:60] parsing ToolVersionType from: 29.1
TRACE 3 [src/cli/args/tool_arg.rs:60] parsing ToolVersionType from: 1.28.1
TRACE 3 [src/cli/args/tool_arg.rs:60] parsing ToolVersionType from: 1.1.0
TRACE 3 [src/cli/args/tool_arg.rs:60] parsing ToolVersionType from: v0.0.0-20230606235304-e35f2ad05c0c
TRACE 3 [src/cli/args/tool_arg.rs:60] parsing ToolVersionType from: {{ exec(command='go list -f {{.Version}} -m github.com/envoyproxy/protoc-gen-validate') }}
TRACE 3 [src/cli/args/tool_arg.rs:60] parsing ToolVersionType from: 0.10.0
TRACE 3 [src/cli/args/tool_arg.rs:60] parsing ToolVersionType from: foo
TRACE 3 [src/cli/args/tool_arg.rs:60] parsing ToolVersionType from: 4.30.8
TRACE 1 [src/config/mod.rs:108] load config_files
TRACE 1 [src/config/mod.rs:1114] load_vars start
DEBUG 1 [/Users/runner/.cargo/registry/src/index.crates.io-6f17d22bba15001f/xx-2.0.3/src/file.rs:216] glob: "/Users/bart/project/.mise/.env"
TRACE 1 [src/config/mod.rs:1127] load_vars done
TRACE 1 [src/config/mod.rs:1129] EnvResults {
env: {
"CI": (
"false",
"/Users/bart/project/mise.toml",
),
"K8S_MIN_VERSION": (
"v1.25.16-k3s4",
"/Users/bart/project/.mise/.env",
),
"K8S_MAX_VERSION": (
"v1.31.1-k3s1",
"/Users/bart/project/.mise/.env",
),
"ACTION_PREFIX": (
"",
"/Users/bart/project/.mise/.env",
),
},
env_files: [
"/Users/bart/project/.mise/.env",
],
}
TRACE 1 [src/config/mod.rs:1097] load_aliases: 6
TRACE 1 [src/config/mod.rs:746] project_root: Some("/Users/bart/project")
TRACE 1 [src/config/mod.rs:1109] load_plugins: 0
TRACE 1 [src/config/mod.rs:135] load build
TRACE 1 [src/config/mod.rs:138] load validate
TRACE 1 [src/config/mod.rs:141] load all aliases
TRACE 1 [src/config/mod.rs:144] load redactions
TRACE 1 [src/config/mod.rs:147] config: Config {
Config Files: [
"~/project/mise.toml",
"~/.config/mise/config.toml",
],
Aliases: {
"controller-gen": Alias {
backend: Some(
"go:sigs.k8s.io/controller-tools/cmd/controller-gen",
),
versions: {},
},
"ginkgo": Alias {
backend: Some(
"go:github.com/onsi/ginkgo/v2/ginkgo",
),
versions: {},
},
"osv-scanner": Alias {
backend: Some(
"go:github.com/google/osv-scanner/cmd/osv-scanner",
),
versions: {},
},
"protoc-gen-go-grpc": Alias {
backend: Some(
"go:google.golang.org/grpc/cmd/protoc-gen-go-grpc",
),
versions: {},
},
"protoc-gen-jsonschema": Alias {
backend: Some(
"github.com/chrusty/protoc-gen-jsonschema/cmd/protoc-gen-jsonschema",
),
versions: {},
},
"protoc-gen-validate": Alias {
backend: Some(
"go:github.com/envoyproxy/protoc-gen-validate",
),
versions: {},
},
},
}
TRACE 1 [src/config/mod.rs:154] load done
config_files:
~/.config/mise/config.toml
~/project/mise.toml
backends:
aqua
asdf
cargo
core
gem
go
npm
pipx
spm
ubi
vfox
TRACE 8 [src/git.rs:56] opening git repository via libgit2 at "/Users/bart/.local/share/mise/plugins/clang-format"
TRACE 13 [src/git.rs:56] opening git repository via libgit2 at "/Users/bart/.local/share/mise/plugins/oapi-codegen"
TRACE 13 [src/git.rs:243] remote url for "/Users/bart/.local/share/mise/plugins/oapi-codegen": git@github.com:dylanrayboss/asdf-oapi-codegen.git
TRACE 8 [src/git.rs:243] remote url for "/Users/bart/.local/share/mise/plugins/clang-format": git@github.com:higebu/asdf-llvm.git
DEBUG 13 [src/git.rs:214] current sha for "/Users/bart/.local/share/mise/plugins/oapi-codegen": a988840
DEBUG 8 [src/git.rs:214] current sha for "/Users/bart/.local/share/mise/plugins/clang-format": c527fd9
plugins:
clang-format git@github.com:higebu/asdf-llvm.git#c527fd9
oapi-codegen git@github.com:dylanrayboss/asdf-oapi-codegen.git#a988840
TRACE 1 [src/lockfile.rs:212] [usage@] reading all lockfiles
TRACE 1 [src/lockfile.rs:32] reading lockfile ~/.config/mise/config.lock
TRACE 1 [src/file.rs:176] cat ~/.config/mise/config.lock
TRACE 1 [src/lockfile.rs:32] reading lockfile ~/project/mise.lock
TRACE 1 [src/file.rs:176] cat ~/project/mise.lock
TRACE 1 [src/lockfile.rs:212] [container-structure-test@] reading all lockfiles
env_vars:
MISE_SHELL=fish
DEBUG 1 [src/cmd.rs:94] $ mise settings
settings:
experimental true ~/.config/mise/config.toml
experimental true ~/project/mise.toml
TRACE 1 [src/file.rs:176] cat ~/Library/Caches/mise/latest-version
1 problem found:
1. failed to load toolset: failed to parse template {{ env.VERSION_CONTROLLER_GEN }} in ~/project/mise.toml
DEBUG 1 [src/exit.rs:12] exiting with code: 1
Activity