Conversation
26a5bf1 to
d197ebf
Compare
5724c77 to
c4d1829
Compare
6516bb7 to
bbc785f
Compare
There was a problem hiding this comment.
Pull request overview
Adds a new mise ecosystem to Dependabot Core so Dependabot can fetch, parse, check, and update tool versions declared in mise.toml, using the mise CLI inside a dedicated ecosystem container. This fits the existing ecosystem plugin architecture (FileFetcher/FileParser/UpdateChecker/FileUpdater + CI/image plumbing).
Changes:
- Introduces a new
dependabot-miseecosystem gem (fetcher/parser/checker/updater + fixtures/specs) and amiseDocker image. - Wires
miseinto local tooling and entrypoints (bin/dry-run.rb, docker dev shell, omnibus, config mapping). - Adds CI/image build and smoke-test matrix entries for the new ecosystem.
Reviewed changes
Copilot reviewed 37 out of 39 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| updater/lib/dependabot/setup.rb | Adds mise to Sentry app dir pattern (but missing ecosystem require). |
| script/dependabot | Mounts mise/ into the dev container wrapper script. |
| rakelib/support/helpers.rb | Registers the new mise gemspec in Rake helper lists. |
| omnibus/lib/dependabot/omnibus.rb | Requires dependabot/mise from the omnibus gem. |
| mise/spec/spec_helper.rb | Adds ecosystem-local spec helper to reuse common spec helpers. |
| mise/spec/fixtures/mise_toml/unsupported.toml | Adds fixture for unsupported/alias/scoped version formats. |
| mise/spec/fixtures/mise_toml/simple.toml | Adds fixture for simple tool pins. |
| mise/spec/fixtures/mise_toml/no_tools.toml | Adds fixture for config without a [tools] section. |
| mise/spec/fixtures/mise_toml/mixed.toml | Adds fixture mixing multiple tool declaration formats. |
| mise/spec/dependabot/mise/update_checker_spec.rb | Adds update checker specs (mocking mise outdated). |
| mise/spec/dependabot/mise/file_updater_spec.rb | Adds file updater specs for multiple TOML formats. |
| mise/spec/dependabot/mise/file_parser_spec.rb | Adds file parser specs for extracting dependencies. |
| mise/spec/dependabot/mise/file_fetcher_spec.rb | Adds file fetcher specs and required-files assertions. |
| mise/script/ci-test | Adds ecosystem CI test script. |
| mise/script/build | Adds ecosystem build script (no native helpers). |
| mise/lib/dependabot/mise/update_checker.rb | Implements update checking via mise outdated --bump --json. |
| mise/lib/dependabot/mise/requirement.rb | Adds requirement class registration for mise. |
| mise/lib/dependabot/mise/metadata_finder.rb | Adds placeholder metadata finder for mise. |
| mise/lib/dependabot/mise/helpers.rb | Adds helper to write fetched files before invoking mise CLI. |
| mise/lib/dependabot/mise/file_updater.rb | Implements updating mise.toml content via regex replacements. |
| mise/lib/dependabot/mise/file_parser.rb | Implements parsing dependencies via mise ls --current --json. |
| mise/lib/dependabot/mise/file_fetcher.rb | Fetches mise.toml and enforces beta-ecosystem gating. |
| mise/lib/dependabot/mise.rb | Registers mise ecosystem classes, labels, and version class. |
| mise/dependabot-mise.gemspec | Adds new ecosystem gemspec. |
| mise/README.md | Documents local dev workflow for the new ecosystem. |
| mise/Dockerfile | Adds mise ecosystem image (installs mise, sets up Node via mise). |
| mise/.rubocop.yml | Inherits repo RuboCop config for the mise gem. |
| mise/.gitignore | Adds gem-local ignores. |
| mise/.bundle/config | Points bundler to the updater Gemfile for local dev. |
| common/lib/dependabot/config/file.rb | Adds mise to package-manager mapping. |
| bin/dry-run.rb | Adds mise to dry-run supported ecosystems and load paths/requires. |
| bin/docker-dev-shell | Adds bind mounts for the mise ecosystem into the dev shell container. |
| .github/workflows/images-latest.yml | Adds mise image build to latest-image workflow. |
| .github/workflows/images-branch.yml | Adds mise image build to branch-image workflow. |
| .github/workflows/ci.yml | Adds mise to CI matrix. |
| .github/smoke-matrix.json | Adds mise to smoke-test matrix. |
| .github/smoke-filters.yml | Adds smoke filters for mise/** changes. |
| .github/issue-labeler.yml | Adds issue labeler rule for mise-related changes. |
| .github/ci-filters.yml | Adds CI filters for mise/** changes. |
c1f39c7 to
780d912
Compare
1484525 to
98b976e
Compare
4dd7e98 to
2eb937a
Compare
20c900e to
6789f59
Compare
6789f59 to
9f67b99
Compare
|
This pull request is now ready for a first review 😃 I believe the current implementation is a good foundation for the mise ecosystem and additional features such as support for lockfiles (still experimental), additional backends, etc. could be added in future iterations. What do you think? @kbukum1 - I am very curious to here what you think! Ignoring a small change I contributed to the I see there are a few jobs still failing, but I believe the failures aren't related to the changes introduced by this pull request and a simple re-try may get them green. |
077885b to
ffdf7f9
Compare
|
@kbukum1 - I tried following the instructions on how to contribute smoke tests for a new ecosystem and peeked at what was done recently for Nix, but I suspect I am at a dead end and won't be able to contribute these until this contribution gets some traction first, right? Is there anything else I should/could focus on in the meantime? 😊 UPDATE: Never mind 😊 I found my way around the |
|
unfortunately right now I don't have the bandwidth to own this, I will report back though if that changes since I very much would like to see dependabot support. |
|
Do this PR support Lockfiles? In case of give support to Lockfiles I would expect some stability on the definition of them. It has recently change the format between different Mise versions and overtime is introducing more metadata. cc @jdx |
ffdf7f9 to
76dddbb
Compare
|
@Maks3w it doesn't. I decided against it because @robaiken, @JamieMagee - I see you tend to be very active when it comes to new ecosystems. If you are interested and have the time, I would be very much interested in hearing your thoughts on this pull request and see if you have any ideas on how we could push this forward 😊 The result of the unit tests and the output from the dry-run seem to suggest that we may be ready for beta-testing. There is also a pull-request with the smoke tests and I believe the main thing we are missing is a first review from someone from the |
|
Thanks for this... I hope can be merged soon ❤️ |
76dddbb to
1835634
Compare
|
@efcasado @gperdomor Really appreciate the work that's gone into this, @efcasado. Our current approach for new ecosystems requires backing from the upstream maintainers to ensure long-term support, and since the Mise team isn't able to take that on right now, we can't proceed at this stage. If the Mise team are able to commit to maintaining it in the future, we'd be happy to pick this back up |
This is an unusual policy. Isn't this an open source project? Why not merge this and, if someone out there who cares about it has issues, let them contribute and maintain it? And if this goes unmaintained, simply drop support. Thoughts? |
|
Oh, shucks, I thought this was already a feature in Dependabot. Would love to see this ecosystem as a feature! Mise is great for managing tool versions, using it everywhere I can! |
What are you trying to accomplish?
Add support for mise to dependabot, so we can use it to automatically update the dependencies defined in
mise.tomlfiles.This feature is being discussed in #12320.
Anything you want to highlight for special attention from reviewers?
The current implementation supports the following manifest files:
mise.toml,.mise.toml,mise.<env>.tomland.mise.<env>.toml).MISE_YES=1is set when invoking the mise CLI so commands can run safely in non-interactive environments such as Dependabot jobs and test containers.FileParserrelies on mise ls --current --local --json to interpretmise.tomland determine which tools should be modeled as Dependabot dependencies. Using the mise CLI avoids reimplementing mise’s own resolution logic in Ruby. The--localflag is important because it limits the result set to tools defined by the target repository configuration, rather than inheriting tools from parentmise.tomlfiles that may exist in ancestor directories.UpdateCheckeruses mise ls-remote --json to retrieve available versions for a given tool. The response includescreated_at, which is mapped ontoDependabot::Package::PackageRelease#released_at. That allows mise to reuse Dependabot’s existing cooldown support throughPackageLatestVersionFinder, rather than implementing cooldown behavior separately in the ecosystem.The implementation distinguishes between:
version), which is used as the dependency’s current version for update comparisons, andmise.toml(i.e.requested_version), which is preserved as the dependency requirement and used when rewriting the manifest.For example, a partial pin such as
node = "20"may resolve to a concrete installed version like20.20.2. In that case, Dependabot compares against the resolved version while still tracking the original manifest requirement.mise also supports “external” backends such as
npm:(for example,"npm:@redocly/cli"). These backends may depend on additional tooling being present in the environment. In particular,npm:resolution requires Node.js and npm. The ecosystem Docker image installs Node.js via mise itself (mise use -g node@lts) so thatnpm:-backed tools can be resolved correctly during parsing and update checking. Support for additional external backends can be expanded in future iterations as needed.mise supports different types of manifest files. This first implementation supports
mise.toml,.mise.toml,mise.<env>.tomland.mise.<env>.tomlmanifest files. Support for more complex manifest files and/or locations (eg..mise/config.toml) could be added in a future pull request.Although mise supports lockfiles, they are disabled by default and are intentionally left out of scope for this initial implementation. The current ecosystem only manages versions declared in
mise.toml.Known limitations of the current implementation:
latestandltsare skipped during parsing for nownpm:is not included in this changeHow will you know you've accomplished your goal?
Running
bin/dry-run.rbon a GitHub repository like software-mansion/popcorn and confirming that the implementation can be used to keep dependencies updated.Checklist