Skip to content

fix: declare python install dependency#1

Open
risu729 wants to merge 1 commit intomise-plugins:mainfrom
risu729:chore/metadata-install-depends-python
Open

fix: declare python install dependency#1
risu729 wants to merge 1 commit intomise-plugins:mainfrom
risu729:chore/metadata-install-depends-python

Conversation

@risu729
Copy link
Copy Markdown

@risu729 risu729 commented May 3, 2026

Summary

  • Set PLUGIN.depends = { "python" } in metadata.lua so mise schedules a python install before vfox-pipenv when both are in the same batch.
  • Why: hooks/post_install.lua runs python -m venv and pip install pipenv==...; that is install-time, not just runtime.

This PR was generated with assistance from an AI coding assistant.

Made with Cursor

post_install.lua requires Python 3.7+ on PATH to create the venv and install pipenv.
Copy link
Copy Markdown

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request adds a dependency on 'python' to the pipenv plugin's metadata. Feedback suggests updating the Plugin class definition in types/mise-plugin.lua to include the depends field, which will prevent IDE warnings and type-checking failures for developers.

Comment thread metadata.lua
@risu729 risu729 marked this pull request as draft May 3, 2026 16:45
@risu729 risu729 marked this pull request as ready for review May 3, 2026 18:46
jdx pushed a commit to jdx/mise that referenced this pull request May 5, 2026
## Summary

- Rebased this branch onto current `main` after #9578 and #9576 landed,
then fast-forwarded over the latest `main` lockfile maintenance merge.
- Removed registry-level `depends` from generated `RegistryTool`, the
registry schema, and backend dependency expansion.
- Added `test.tools` support for registry tests. This is consumed only
by `mise test-tool`; it does not affect normal installs.
- Kept backend/tool optional dependency support outside the registry.

## Why registry `depends` is not needed

Registry `depends` mixed unrelated concerns: install ordering, runtime
companions, and tools needed only for registry tests. That made
shorthand registry entries apply dependencies too broadly across every
backend.

The remaining valid dependency paths are covered elsewhere:

- vfox plugins can declare install dependencies in plugin metadata with
`PLUGIN.depends`; mise already reads those through the vfox backend.
- asdf plugins require `depends`, but rebar was the only registry entry
still relying on that path, and #9576 moved it to
`github:erlang/rebar3`. New asdf plugins are not being added to the
registry.
- backend install hooks that need extra external tools are too fragile
for registry shorthand entries. Those tools should not be added to the
registry just to satisfy postinstall scripts.
- tools needed only to execute `test.cmd` belong in `test.tools`, which
is consumed only by `mise test-tool` and does not affect normal
installs.

## Registry file changes (`registry/*.toml`)

| Tool | Change |
|------|--------|
| **android-sdk** | Removed root `depends = ["java"]`; added `test.tools
= ["java"]` because the vendored vfox metadata notes Java 11+ and
`sdkmanager` shells out to `java`. |
| **elixir** | Removed root `depends = ["erlang"]`; `core:elixir`
handles Erlang as a backend dependency. |
| **google-java-format** | Removed root `depends = ["java"]`; its Linux
registry asset is a native executable, and the Docker probe passed
without adding Java. |
| **gradle** | Removed root `depends = ["java"]`; added `test.tools =
["java"]` because the Gradle launcher requires `java` for `gradle -V`. |
| **kscript** | Removed root `depends = ["kotlin"]`; added `test.tools =
["kotlin"]` after Docker/registry CI showed `kscript --version` fails
without Kotlin. |
| **ktlint** | Removed root `depends = ["java"]`; its registry test
remains disabled. |
| **kubecolor** | Removed root `depends = ["kubectl"]`; `mise x
kubecolor -- kubecolor --kubecolor-version` passed in the e2e Docker
image with no `kubectl` on PATH, so no `test.tools` entry is needed. |
| **pipenv** | Removed root `depends = ["python"]`; added `test.tools =
["python"]` because the vendored vfox post-install hook creates a venv
with `python3`/`python`, and the test should not rely on system Python.
|
| **pipx** | Removed root `depends = ["python"]`; added `test.tools =
["python"]` because the aqua `pipx.pyz` launcher uses `#!/usr/bin/env
python3`. |
| **rebar** | Removed root `depends = ["erlang"]`; #9576 moved this
registry entry to `github:erlang/rebar3`; added `test.tools =
["erlang"]` because `rebar3 --version` needs the Erlang runtime. |
| **sbt** | Removed root `depends = ["java"]`; the conda backend
installs OpenJDK in the package environment and the Docker probe passed
without registry `test.tools`. |
| **spark** | Removed root `depends = ["java"]`; no registry test
command is present. |
| **tridentctl** | Removed root `depends = ["kubectl"]`; `tridentctl
version --client` passed in Docker without `kubectl`. |

## vfox notes

- `vfox-android-sdk` is vendored in `crates/vfox/embedded-plugins/`; its
metadata says Java 11+ is required, and the installed `sdkmanager`
launcher checks `JAVA_HOME`/`java`. Its post-install hook only uses
common shell utilities (`mv`, `mkdir`, `rm`, `chmod`), which are not
registry tools.
- `vfox-pipenv` is vendored in `crates/vfox/embedded-plugins/`; its
post-install hook explicitly searches for `python3`/`python`, creates a
venv, then runs pip. Utility shell usage such as `pwd`, `mkdir`, and
`chmod` is intentionally ignored.
- `vfox-gradle` is not vendored under `crates/vfox/embedded-plugins/`;
the registry test still needs Java because the Gradle launcher itself
invokes `java`.

## Pipenv note

`mise-plugins/vfox-pipenv/pull/1` must be merged for `pipenv` to work
properly through the vfox backend. GitHub Actions and the e2e image
currently have Python available, but the registry should not rely on
system Python: `PLUGIN.depends` only declares plugin execution order, so
without a managed Python declaration pipenv falls back to whatever
system Python is available.

## Validation

- `taplo fmt --check registry/android-sdk.toml registry/gradle.toml
registry/pipenv.toml registry/pipx.toml registry/kscript.toml
registry/rebar.toml`
- `git diff --check`
- Docker image used by registry CI: `ghcr.io/jdx/mise:e2e`
- Direct Docker probes with `mise x <tool> -- <test.cmd>` for
`android-sdk`, `google-java-format`, `gradle`, `kscript`, `kubecolor`,
`pipenv`, `pipx`, `sbt`, and `tridentctl`
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant