Repository navigation
v5.2.0: Periodic cache rebuilds, signed packslip verification, and monorepo installs
·
4 commits
to main
since this release
Immutable
release. Only release title and notes can be modified.
The default cache key now rolls over every 30 days, so long-lived caches pick up newer mise releases. The action also checks the downloaded mise binary against the release's signed packslip, and it runs mise install --monorepo automatically in monorepos. Existing caches miss once after you upgrade, because the default cache key format has changed.
Added
- The cache is rebuilt every 30 days by default. GitHub never evicts a cache that keeps getting hits. Before this release, an active repo could keep the same mise binary and tools for months, until a config file changed. The default cache key now includes a period suffix (
-p<N>), so the cache is rebuilt from scratch at least once per period. All repos roll over on the same calendar boundary. Use the newcache_max_age_daysinput to change the period, or set it to0to keep the old key that never expires. Customcache_keytemplates can use the new{{cache_period}}variable, which{{default}}already includes. A custom key that doesn't use it behaves as before. On self-hosted runners that keep mise data between runs, you may also needauto_update: trueto pick up a newer mise. (#689 by @jdx, fixes #688)- uses: jdx/mise-action@v5 with: cache_max_age_days: 14 # default 30; 0 disables periodic rebuilds
- Throttled cache restores and saves can be retried. Before this release, when GitHub's cache service returned HTTP 429, the action gave up right away: a restore counted as a miss and a save was skipped. The new
cache_restore_retry_budgetandcache_save_retry_budgetinputs set how long the action may wait. Each retry waits for theRetry-Aftervalue plus some random jitter. Once the budget runs out, the action falls back to the old behavior. Retries apply to the main cache, the post-step save and the binary cache. Real cache misses and reservation conflicts are never retried. Both budgets default to0s(no retries).@actions/cachedoesn't report 429 errors directly, so the action detects throttling from its warning messages. If those messages change in a future@actions/cacherelease, throttling won't be detected and nothing will be retried. (#692 by @jdx, fixes #691)- uses: jdx/mise-action@v5 with: cache_restore_retry_budget: 60s cache_save_retry_budget: 120s
- The latest mise binary can fall back to a second download source. When the action downloads the latest mise version, it can fall back between GitHub and mise.jdx.dev if the first source fails. The
fetch_from_githubsetting decides which source it tries first. Pinned versions andminimum_release_ageinstalls are only downloaded from GitHub. The binary is still checked against the signed checksums for the resolved version, whichever source it came from. (#692 by @jdx) - The mise binary is checked against its signed packslip. If a mise release includes
packslip.sigstore.json, the action checks the downloaded binary against it. The bundle must be signed by mise's release workflow for that exact tag. After a successful check, the log showsVerified <asset> against the signed packslip. If the check fails, the install stops instead of falling back to a weaker check. Releases without a packslip use the existing minisign andSHASUMS256check. An explicitsha256input still takes precedence. (#693 by @jdx) - Monorepo-aware installs. If your mise config sets
[monorepo].config_roots, the action now adds--monorepotomise install, so tools configured anywhere in the monorepo get installed. Repos without that setting aren't affected. To opt out, setmonorepo: false. (#679 by @zeitlinger)
Fixed
- Tool directories that mise moves to the front of
PATHare now exported. The action used to find mise'sPATHchanges by comparing mise'sPATHwith the runner's. If a tool's bin directory was already on the runner'sPATH, such as~/.cargo/bin, mise only moved it to the front, so the action didn't export it. Later steps then found the mise shim first. For example,rustupresolved to the shim instead of~/.cargo/bin/rustup. The action now asks mise for its entries withmise env --pathsand exports them in the order mise reports. This fix needs a mise version that supports--paths. With older versions, the action uses the old comparison. (#685 by @jdx)
Documentation
- The new "Release workflows" section of the README says that jobs that publish releases shouldn't restore caches. A lower-trust workflow that can write to default-branch caches could otherwise slip files into a release. In those jobs, use
cache: falseor GitHub'scache-mode: none. (#682 by @jdx) - The README explains how to cache mise's downloads, keyed on
mise.lock, instead of installed tools. It includes a Windows example that setsMISE_CACHE_DIRfrom${{ runner.temp }}, becauseactions/cachedoesn't expand%TEMP%. (#686, #690 by @zeitlinger)
Breaking Changes
- The default cache key has a new format, so the first run after upgrading is a cache miss and saves a fresh cache. After that, the cache is rebuilt every 30 days by default. To keep the old cache key that never expires, set
cache_max_age_days: 0. Workflows that set a customcache_keywithout{{default}}or{{cache_period}}aren't affected.
Full Changelog: v5.1.2...v5.2.0