Skip to content
This repository was archived by the owner on Jun 9, 2026. It is now read-only.

chore(deps): bump jdx/mise-action from 2.4.4 to 4.0.1 - #9

Open
dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/github_actions/jdx/mise-action-4.0.1
Open

chore(deps): bump jdx/mise-action from 2.4.4 to 4.0.1#9
dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/github_actions/jdx/mise-action-4.0.1

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Jun 4, 2026

Copy link
Copy Markdown

Bumps jdx/mise-action from 2.4.4 to 4.0.1.

Release notes

Sourced from jdx/mise-action's releases.

v4.0.1: Documentation and Internal Cleanup

A small maintenance release that updates the README documentation to reflect v4 and cleans up internal code. There are no functional changes to the action itself.

Changed

  • Updated all README examples to reference jdx/mise-action@v4, actions/checkout@v6, and current tool versions by @​deining in #407 and #408
  • Extracted getCwd() helper to deduplicate working directory resolution logic (internal refactor, no behavior change) by @​altendky in #403

New Contributors

Full Changelog: jdx/mise-action@v4.0.0...v4.0.1

v3.6.3

What's Changed

New Contributors

Full Changelog: jdx/mise-action@v3.6.2...v3.6.3

v3.6.2

What's Changed

New Contributors

Full Changelog: jdx/mise-action@v3.6.1...v3.6.2

v3.6.1

What's Changed

... (truncated)

Changelog

Sourced from jdx/mise-action's changelog.

Changelog


4.0.1 - 2026-03-22

🐛 Bug Fixes

  • run npm install in pre-commit hook before build (#410) by @​jdx in #410

🚜 Refactor

  • extract getCwd() helper to deduplicate working directory resolution (#403) by @​altendky in #403

📚 Documentation

⚙️ Miscellaneous Tasks

New Contributors


4.0.0 - 2026-03-13

🚀 Features

New Contributors


3.6.3 - 2026-03-06

🐛 Bug Fixes

New Contributors


3.6.2 - 2026-03-02

... (truncated)

Commits
  • 1648a78 chore: release v4.0.1 (#406)
  • e2d499c ci: add workflow to auto-close stale PRs (#409)
  • 0cc0f19 fix: run npm install in pre-commit hook before build (#410)
  • 89c67a3 docs: bump more versions listed in README.md (#408)
  • 0409dde docs: bump versions listed im README.md (#407)
  • abadabd refactor: extract getCwd() helper to deduplicate working directory resolution...
  • c5b2043 chore(deps): update github/codeql-action digest to 603b797 (#404)
  • 71c0f0a chore(deps): lock file maintenance (#400)
  • c1ecc8f chore: release v4.0.0 (#398)
  • 1cbe8c5 chore(deps): update github/codeql-action digest to 820e316 (#397)
  • Additional commits viewable in compare view

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

Summary by CodeRabbit

  • Chores
    • Updated CI/CD workflow tooling to latest versions for improved build and release processes.

Bumps [jdx/mise-action](https://github.com/jdx/mise-action) from 2.4.4 to 4.0.1.
- [Release notes](https://github.com/jdx/mise-action/releases)
- [Changelog](https://github.com/jdx/mise-action/blob/main/CHANGELOG.md)
- [Commits](jdx/mise-action@c37c932...1648a78)

---
updated-dependencies:
- dependency-name: jdx/mise-action
  dependency-version: 4.0.1
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot Bot added dependencies Pull requests that update a dependency file github_actions Pull requests that update GitHub Actions code labels Jun 4, 2026
@dependabot dependabot Bot added dependencies Pull requests that update a dependency file github_actions Pull requests that update GitHub Actions code labels Jun 4, 2026
@coderabbitai

coderabbitai Bot commented Jun 4, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

GitHub Actions workflows in CI and release pipelines were updated to use jdx/mise-action v4.0.1 instead of v2. Two workflow files received identical version updates.

Changes

mise-action Upgrade

Layer / File(s) Summary
mise-action v2 to v4.0.1 upgrade
.github/workflows/ci.yml, .github/workflows/release.yml
jdx/mise-action GitHub Action reference updated from v2 to v4.0.1 in both CI lint-test job and release job.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~2 minutes

Poem

A rabbit hops through workflows fine,
Updating mise from old to new,
V2 bows out, v4 takes the line,
CI and release now in crew,
⚡ Faster! Better! Newer too! 🐰

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and accurately describes the main change: a dependency bump of jdx/mise-action from version 2.4.4 to 4.0.1 across GitHub Actions workflows.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch dependabot/github_actions/jdx/mise-action-4.0.1

Comment @coderabbitai help to get the list of available commands and usage tips.

@kilo-code-bot

kilo-code-bot Bot commented Jun 4, 2026

Copy link
Copy Markdown

Code Review Summary

Status: No Issues Found | Recommendation: Merge

Overview

This Dependabot PR bumps jdx/mise-action from v2.4.4 to v4.0.1, a major version upgrade. The key breaking change is the Node.js runtime requirement upgrade from v20 to v24.

Compatibility Check

The project is already fully compatible with mise-action v4:

  • package.json (line 39): Requires Node.js >=24.0.0
  • .mise.toml (line 2): Specifies Node.js 24
  • CI workflow (line 17): Matrix includes node-version: ["24"]

The breaking change does not introduce any incompatibilities.

Files Reviewed (2 files)
  • .github/workflows/ci.yml - Dependency version update only
  • .github/workflows/release.yml - Dependency version update only

Reviewed by: Kilo Code Review Agent


Reviewed by claude-4.5-sonnet-20250929 · 315,067 tokens

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 Nitpick comments (1)
.github/workflows/ci.yml (1)

20-20: ⚡ Quick win

Confirm Node.js 24 + Windows runner compatibility for jdx/mise-action

  • jdx/mise-action@1648a7812b9aeae629881980618f079932869151 (# v4.0.1) runs on windows-latest, and the action’s Node runtime is already updated to Node.js 24 (so this matches the workflow’s node-version: ["24"] expectation).
  • The repo has a root .mise.toml that pins node = "24" and python = "3.13"; there is no .tool-versions file to reconcile.
  • Remaining Windows risk is functional/tooling setup (upstream reports shim/PATH/unzip-related issues on Windows), so treat any CI failures around tool installation as a Windows-mise-action integration concern rather than a Node 24 mismatch.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/ci.yml at line 20, The workflow uses
jdx/mise-action@1648a7812b9aeae629881980618f079932869151 which already runs on
windows-latest and the action’s Node runtime is updated to Node.js 24; update or
confirm the CI job that sets node-version: ["24"] (and the matrix includes
windows-latest) and add a brief comment near the jdx/mise-action reference to
note that root .mise.toml pins node = "24" and python = "3.13" (there is no
.tool-versions), then add/enable lightweight Windows diagnostic steps (echo
PATH, unzip/version checks) to capture shim/PATH/unzip installation failures so
any CI breakages are triaged as Windows-mise-action tooling issues rather than a
Node 24 mismatch.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/workflows/release.yml:
- Line 15: The mise-action (jdx/mise-action) runs with caching enabled by
default, which lets untrusted pull_request builds prime caches that your
privileged release.yml tag workflow may later restore; update the CI workflow
that uses mise-action (in .github/workflows/ci.yml) to disable or scope
mise-action caching for pull_request events by adding the mise-action
input/option to conditionally disable cache (e.g. set the action input named
"cache" to false when github.event_name == 'pull_request') or set a PR-specific
cache_key_prefix so caches from PR runs cannot be reused by release.yml; ensure
the change targets the job/step that invokes jdx/mise-action so release.yml can
continue using the action safely.

---

Nitpick comments:
In @.github/workflows/ci.yml:
- Line 20: The workflow uses
jdx/mise-action@1648a7812b9aeae629881980618f079932869151 which already runs on
windows-latest and the action’s Node runtime is updated to Node.js 24; update or
confirm the CI job that sets node-version: ["24"] (and the matrix includes
windows-latest) and add a brief comment near the jdx/mise-action reference to
note that root .mise.toml pins node = "24" and python = "3.13" (there is no
.tool-versions), then add/enable lightweight Windows diagnostic steps (echo
PATH, unzip/version checks) to capture shim/PATH/unzip installation failures so
any CI breakages are triaged as Windows-mise-action tooling issues rather than a
Node 24 mismatch.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: bf2625ec-d04c-4ab4-aa67-83a46c90ee72

📥 Commits

Reviewing files that changed from the base of the PR and between 9da5488 and c8d35d3.

📒 Files selected for processing (2)
  • .github/workflows/ci.yml
  • .github/workflows/release.yml

steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: jdx/mise-action@c37c93293d6b742fc901e1406b8f764f6fb19dac # v2
- uses: jdx/mise-action@1648a7812b9aeae629881980618f079932869151 # v4.0.1

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🌐 Web query:

jdx/mise-action v4 cache poisoning vulnerability and security best practices

💡 Result:

There is no specific CVE associated with jdx/mise-action for "cache poisoning," but the action is recognized by security tooling as "cache-aware," meaning its caching behavior is a known area for potential security misconfigurations [1]. GitHub Actions cache poisoning is a broader architectural risk inherent to the GitHub Actions platform itself, where untrusted workflows (e.g., in pull requests) can potentially influence cache entries used by privileged workflows [2][3][4]. Regarding jdx/mise-action specifically: 1. Cache Key Vulnerability: A recent issue identified that the default cache key template in mise-action could allow unintended prefix-matching [5]. Because the action used conditional segments, one workflow's cache key could act as a prefix for another, leading to unexpected cache restores [5]. The recommended fix, which users should ensure is implemented by using updated versions of the action, is to ensure cache keys are non-overlapping by placing unique identifiers (like file hashes) at the end of the template [5]. 2. General Cache Poisoning Risks: Like any action that caches data, mise-action is susceptible to standard GitHub Actions cache poisoning patterns if configured incorrectly [1][3]. Attackers can exploit workflows triggered by events like pull_request_target to overwrite shared cache keys [3][4]. If a privileged workflow subsequently restores that poisoned cache, it could lead to code execution [2][4]. Security Best Practices for mise-action and GitHub Actions: - Update Regularly: Always use the latest version of jdx/mise-action (currently v4+) to ensure you have the latest bug fixes, including those related to cache key generation [5][6]. - Avoid Privileged Caching: Do not enable caching in workflows that handle highly sensitive operations (e.g., secrets management, package publishing) if those workflows can be triggered by untrusted sources [2][7][3]. - Use Specific Cache Keys: When customizing cache_key in mise-action, use unique identifiers like {{file_hash}} and {{install_args_hash}} to ensure that keys are strictly scoped to the exact configuration and environment [8][9]. Avoid using broad or predictable prefixes [5]. - Implement Static Analysis: Use security scanning tools for GitHub Actions, such as zizmor, which specifically flags "cache-aware" actions and helps identify workflows that may be vulnerable to cache poisoning [1]. - Audit Workflow Permissions: Limit the permissions of your GITHUB_TOKEN using the permissions block in your workflow files to the minimum required level [10]. - Monitor Cache Writes: Be aware that if a job can write to the cache, it can overwrite existing entries; isolate jobs that run untrusted code from those that perform privileged builds [2][4].

Citations:


🌐 Web query:

jdx/mise-action v4.0.1 caching configuration options

💡 Result:

In jdx/mise-action v4.0.1, caching is enabled by default [1]. You can manage this behavior and customize cache keys using the following configuration options provided in the with block of your workflow step [1][2]: Core Caching Options cache: A boolean that toggles GitHub Actions caching [1]. Set this to false to disable caching [3]. cache_key: Allows you to override the default cache key [2]. You can provide a custom string or use template variables to build a dynamic key [2]. cache_key_prefix: Sets the prefix for the cache key (default: "mise-v1") [4][2]. Changing this effectively invalidates existing caches [3]. Template Variables When defining a custom cache_key, the action supports Handlebars template variables to create fine-grained cache control [3][2]: {{default}}: The automatically generated default cache key (useful for extending it with custom suffixes) [4][2]. {{version}}: The mise version specified in the version input [4][2]. {{cache_key_prefix}}: The value of the cache_key_prefix input [4][2]. {{platform}}: The target platform, including runner information (e.g., linux-x64-ubuntu24), which helps prevent collisions between different runner environments [2]. {{file_hash}}: A hash of your project's mise configuration files [4][2]. {{mise_env}}: The value of the MISE_ENV environment variable [4][2]. {{install_args_hash}}: A SHA256 hash of the tools specified in install_args [4][2]. {{env.VAR_NAME}}: Allows you to reference specific environment variables [3]. Examples Disable Caching - uses: jdx/mise-action@v4 with: cache: false Customize with Suffix - uses: jdx/mise-action@v4 with: cache_key: "{{default}}-my-custom-suffix" Custom Cache Key - uses: jdx/mise-action@v4 with: cache_key: "mise-{{platform}}-{{version}}-{{file_hash}}"

Citations:


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "=== release.yml ==="
ls -la .github/workflows || true
sed -n '1,200p' .github/workflows/release.yml

echo
echo "=== ci.yml (if exists) ==="
if [ -f .github/workflows/ci.yml ]; then
  sed -n '1,200p' .github/workflows/ci.yml
else
  echo "ci.yml not found"
fi

echo
echo "=== search for node-version usage in workflows ==="
rg -n --hidden "node-version|setup-node|actions/setup-node" .github/workflows || true

echo
echo "=== extract mise-action step(s) ==="
rg -n --hidden "jdx/mise-action@|jdx/mise-action" .github/workflows || true

Repository: seathatflowsinourveins/vein-launch

Length of output: 3295


🌐 Web query:

GitHub Actions windows-latest Node.js 24 availability

💡 Result:

Node.js 24 is available and pre-installed on GitHub Actions windows-latest runner images as of June 4, 2026 [1][2]. The GitHub Actions runner images maintain a toolcache that includes Node.js 24 [3][4]. Recent updates to the Windows runner images, including those labeled windows-latest, confirm that versions such as 24.15.0 and 24.16.0 have been included in the environment [1][3][2]. To ensure your workflows use a specific version of Node.js, it is recommended to use the actions/setup-node action [5][4]. This allows you to explicitly specify the version, ensuring consistency regardless of the pre-installed versions on the runner image [5][4]. For reference, Node.js 24 (codename "Krypton") reached Long-Term Support (LTS) status following its release in May 2025 [6][7][8]. While Node.js 24 is available in the runner images, workflows that rely on default environment settings should be aware that the default pre-installed Node.js version on many runner images was updated to Node.js 22 following the end-of-life of Node.js 20 in April 2026 [4].

Citations:


🌐 Web query:

jdx/mise-action v4.0.1 action.yml runtime node version

💡 Result:

The jdx/mise-action v4.0.1 action uses Node.js 24 as its runtime [1][2][3]. This was introduced in version 4.0.0, which updated the action's runtime from Node.js 20 to Node.js 24 to align with GitHub Actions' deprecation requirements [1][2]. Version 4.0.1 is a maintenance release that includes only documentation and internal code cleanups, maintaining the Node.js 24 runtime [2][3]. As specified in the action.yml configuration, the runner uses the node24 runtime [4].

Citations:


🌐 Web query:

GitHub Actions runner-toolcache Node.js versions windows-latest 24

💡 Result:

As of June 4, 2026, GitHub-hosted Windows runners (such as windows-latest) include Node.js 24 in their pre-installed toolcache [1][2][3]. The runner toolcache provides a set of pre-installed versions of software to minimize the time required to set up environments during workflow execution [4][5]. Recent updates to runner images have updated the available versions: 1. Version Availability: Node.js 24 is included in the toolcache for Windows images (e.g., Windows Server 2025 and 2022) [1][2][3]. 2. Default Changes: As of May 2026, the default Node.js version on several runner images was updated from 20 to 22 [6][7]. Node.js 20 has been removed from the pre-installed toolcache across GitHub-hosted runner images [6][7]. 3. Recommended Usage: While specific versions are cached on the image, the recommended way to use a specific version—including Node.js 24—is by using the actions/setup-node action [8][4][5]. This action will automatically check the local toolcache for the requested version and, if found, configure the environment without needing to download it, ensuring efficient and consistent behavior [4][5]. Example configuration for using Node.js 24: jobs: build: runs-on: windows-latest steps: - uses: actions/checkout@v6 - uses: actions/setup-node@v6 with: node-version: '24' You can verify the exact versions available on current images by checking the repository for runner-images on GitHub, specifically the toolset JSON files (e.g., images/windows/toolsets/) or the release notes for the specific image version being used [1][2][6].

Citations:


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "=== release.yml (full) ==="
cat .github/workflows/release.yml

echo
echo "=== ci.yml (full) ==="
cat .github/workflows/ci.yml

echo
echo "=== mise config files in repo root ==="
ls -ლა . | sed -n '1,200p'

echo
echo "=== search for mise config ==="
fd -a -t f --hidden --max-depth 4 ".mise.toml" . || true
fd -a -t f --hidden --max-depth 4 ".tool-versions" . || true
fd -a -t f --hidden --max-depth 4 "mise" . || true

Repository: seathatflowsinourveins/vein-launch

Length of output: 2180


🌐 Web query:

jdx/mise-action what does it cache default

💡 Result:

The jdx/mise-action caches the mise runtime installation and the tools managed by mise [1][2]. Specifically, it leverages the GitHub Actions Cache Service to persist these directories between workflow runs to avoid redundant downloads and installations [1]. While the action's configuration focuses on cache keys, the underlying mise tool itself typically stores its managed runtimes and metadata in ~/.cache/mise (or the location defined by MISE_CACHE_DIR) [3]. The action ensures that once mise is set up and tools are installed, the resulting state is stored in the cache [2]. Key details regarding the caching mechanism include: 1. Cache Key Strategy: The action uses a template to generate a unique cache key [4]. This key incorporates variables such as the mise version, platform (including runner OS), a hash of your configuration files (e.g.,.mise.toml,.tool-versions), and a hash of install arguments [4][5][6]. 2. Default Template: The default cache key template is defined as: {{cache_key_prefix}}-{{platform}}{{#if version}}-{{version}}{{/if}}{{#if mise_env}}-{{mise_env}}{{/if}}{{#if install_args_hash}}-{{install_args_hash}}{{/if}}-{{#if file_hash}}{{file_hash}}{{else}}no-config{{/if}} [4]. 3. Configuration: You can control this behavior via the cache_key_prefix input (defaulting to mise-v1) or override the entire key using the cache_key input [7][5][6]. This system is designed to trigger a cache hit only when your configuration environment—defined by the specific tools, their versions, and the platform—remains unchanged [2].

Citations:


🌐 Web query:

jdx/mise-action with cache_key_prefix cache_key cache: false examples

💡 Result:

In jdx/mise-action, you can control caching behavior using the cache, cache_key_prefix, and cache_key inputs [1]. To disable caching entirely, set the cache input to false [2][1]. This instructs the action to skip both reading from and writing to the GitHub Actions cache [1]. - uses: jdx/mise-action@v4 with: cache: false The cache_key_prefix is used as a component of the default cache key template [3][1]. By default, it is set to "mise-v1" [1]. Changing this value is an effective way to invalidate all existing caches for your workflow [2][1]. - uses: jdx/mise-action@v4 with: cache_key_prefix: "new-prefix-v2" The cache_key input allows you to override the entire cache key, bypassing the default template logic [1]. It supports template variables such as {{version}}, {{platform}}, {{file_hash}}, and {{default}} (which represents the processed default key) [2][3][4][1][5]. - uses: jdx/mise-action@v4 with: cache_key: "{{default}}-custom-suffix" Note that if you provide a custom cache_key, the cache_key_prefix input may be ignored unless you explicitly include the {{cache_key_prefix}} variable within your custom cache_key string [1].

Citations:


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "=== root ls ==="
ls -la . | head -n 200

echo
echo "=== mise config candidates ==="
find . -maxdepth 3 -name ".mise.toml" -o -name ".tool-versions" -o -name "mise.toml" -o -name "*.tool-versions" 2>/dev/null || true

echo
echo "=== also search for MISE_ env usage ==="
rg -n --hidden "MISE_|tool-versions|mise\.toml" .github . || true

echo
echo "=== check for jdx/mise-action with: cache configuration ==="
rg -n "jdx/mise-action@|jdx/mise-action" .github/workflows -S

Repository: seathatflowsinourveins/vein-launch

Length of output: 3236


🌐 Web query:

GitHub Actions cache permissions GITHUB_TOKEN actions: write required for actions/cache cache write

💡 Result:

The standard actions/cache action does not require explicit actions: write permissions for its basic functionality of restoring and saving caches [1][2]. The cache service is a built-in feature of GitHub Actions that handles authentication automatically when running workflows [3]. However, the actions: write permission is required if you are performing manual cache management, such as listing, deleting, or manipulating cache entries via the GitHub CLI (gh cache) or the GitHub REST API [4][5]. In summary: 1. Basic usage: You do not need to explicitly set permissions: actions: write to use actions/cache for restoring or saving dependencies [1][2]. 2. Advanced usage: If your workflow uses the gh cache command or makes direct API calls to manage caches, you must explicitly grant the GITHUB_TOKEN the actions: write permission in your workflow or job configuration [4][5]. Example for workflows requiring manual cache management: permissions: actions: write contents: read Always follow the principle of least privilege by only granting the specific permissions your workflow requires [6][7].

Citations:


🌐 Web query:

jdx/mise-action caching requires permissions/actions: write

💡 Result:

The jdx/mise-action does not explicitly require a permissions: write configuration for its basic operation, as it utilizes the standard GitHub Actions cache service [1][2]. However, to successfully use the cache, your workflow must have the necessary permissions granted to the GITHUB_TOKEN to perform cache operations [3][4]. By default, GitHub Actions workflows have read and write permissions for cache actions [3]. If you have restricted the default permissions in your workflow or job (e.g., by setting permissions: read-all), you must explicitly grant write access to the cache to allow mise-action to function correctly [3]. You can achieve this by adding the following to your workflow YAML file: permissions: actions: write contents: read If you encounter issues related to GitHub API rate limits (often occurring during tool installation), ensure your workflow token has sufficient scope [3][4]. While the action defaults to using ${{ github.token }}, you may need to ensure your permissions block allows for the necessary API interactions [3][4]. Note: The action also supports cache control through inputs like cache (default: true) and cache_save (default: true) [5]. If these are enabled, the action will attempt to interact with the cache service [5][1]. If your repository permissions restrict this, it will result in failures [3].

Citations:


🌐 Web query:

GitHub Actions cache poisoning mitigation untrusted PRs cache write permissions actions: write

💡 Result:

GitHub Actions cache poisoning occurs when an untrusted workflow—typically triggered by a pull request—writes malicious content to the repository's shared cache [1][2][3]. Because caches are repository-scoped rather than workflow-scoped, a poisoned entry written by a PR workflow can be restored by a privileged workflow (e.g., on the default branch), potentially leading to arbitrary code execution in that privileged context [2][4][5]. Key Mitigations: 1. Use pull_request instead of pull_request_target: The pull_request trigger is unprivileged and does not have access to repository secrets, making it significantly safer for processing untrusted code [6][7][8]. 2. Implement Read-Only Cache Access: Configure PR workflows to restore the cache without saving back to it [9]. For example, use the cache-write input (where supported by actions like setup-dotnet) to disable saving: - cache-write: ${{ github.event_name!= 'pull_request' }} [9] 3. Enforce Cache Scope Separation: Use unique cache key prefixes to isolate caches by trigger or context (e.g., release-cache-* vs. pr-cache-*) [1][2]. 4. Avoid Unsafe Checkouts in Privileged Contexts: Never check out untrusted PR head code in a pull_request_target workflow [7][10]. If a privileged operation is necessary, use a two-stage process: an unprivileged workflow to run tests and output results as artifacts, followed by a workflow_run trigger that executes only on the base branch to consume those artifacts [8][11]. 5. Manual Approval Gates: For public repositories, require a human-in-the-loop (e.g., requiring a specific label like safe-to-test) before running any workflow that uses pull_request_target and accesses caches or secrets [3][10]. 6. Static Analysis: Use tools like zizmor or sisakulint to detect dangerous workflow patterns, such as pull_request_target combined with cache usage or untrusted code execution [6][7][4]. Note that simply restricting GITHUB_TOKEN permissions is insufficient to prevent this attack because the cache service uses a separate, internal runner-token [6]. Prioritize architectural isolation over permission-based hardening for cache-related security [6][5].

Citations:


🏁 Script executed:

#!/bin/bash
set -euo pipefail
echo "=== .mise.toml ==="
cat .mise.toml

Repository: seathatflowsinourveins/vein-launch

Length of output: 557


🌐 Web query:

GitHub Actions workflow permissions: specifying permissions: contents: read - what are actions/cache permissions defaults? does it block cache save?

💡 Result:

Specifying permissions: contents: read in your GitHub Actions workflow does not block the actions/cache action from saving a cache [1]. The actions/cache and actions/cache/save actions operate independently of the workflow's GITHUB_TOKEN permissions [1]. When you use these actions, they utilize a separate, runner-internal authentication mechanism to interact with the cache service [1]. Therefore, restricting the GITHUB_TOKEN via the permissions block—including setting contents: read—does not restrict or block the ability of these actions to perform cache save or restore operations [1]. In summary: 1. Workflow permissions (like contents: read) only control the scope of the GITHUB_TOKEN, which is used for interacting with repository APIs and other GitHub features [2]. 2. Cache operations are handled by the GitHub Actions runner infrastructure via a different, internal service [1]. 3. You can safely implement a least-privilege permissions block (e.g., permissions: contents: read) without interfering with your dependency caching logic [3][1].

Citations:


🌐 Web query:

mise-action cache uses actions/cache; does saving require GITHUB_TOKEN actions: write permission when workflow permissions are restricted?

💡 Result:

No, saving a cache using actions/cache (which mise-action utilizes internally [1][2]) does not require explicit actions: write permission for the GITHUB_TOKEN [3]. The GitHub Actions cache service operates independently of the GITHUB_TOKEN permissions defined in your workflow's permissions block [3]. The cache service is a built-in feature of the GitHub Actions runner environment, and the ability to read from and write to the cache is implicitly granted to the job based on the repository's access rules, not by the token's scope [4][5]. When a workflow job runs, it automatically receives the necessary authorization to interact with the cache service for its own repository [4]. Therefore, as long as the workflow has general permission to execute, it can save caches [6][7]. You do not need to elevate the GITHUB_TOKEN permissions to actions: write to enable this functionality [3]. However, keep in mind: - Cache Access Restrictions: GitHub imposes security boundaries based on branch and pull request triggers [5]. A workflow can generally only restore caches created in the current branch, the default branch (e.g., main), or the base branch of a pull request [5]. - Repository Access: While explicit actions: write is not required for the cache itself, ensure your job has sufficient permissions to perform other tasks (like checking out code or uploading artifacts) if those steps are also failing. - Troubleshooting: If your cache is failing to save, it is typically due to issues such as exceeding the 10GB repository limit, incorrect path specifications, or authentication issues unrelated to the GITHUB_TOKEN permission scope [8][9][6].

Citations:


Node 24 support looks fine; fix mise-action cache-poisoning risk for pull_request builds.

  1. Breaking change: mise-action v4 runs on Node.js 24, and windows-latest includes Node 24; your repo also pins node = "24" in .mise.toml, so the upgrade shouldn’t break the workflow even without actions/setup-node.
  2. Security: mise-action caching is enabled by default, so your untrusted pull_request workflow can populate caches that your privileged release.yml (tag push) may later restore. Disable caching (or scope cache keys) for pull_request in .github/workflows/ci.yml, e.g. with: cache: ${{ github.event_name != 'pull_request' }} (and/or use a PR-specific cache_key_prefix).
🧰 Tools
🪛 zizmor (1.25.2)

[error] 15-15: runtime artifacts potentially vulnerable to a cache poisoning attack (cache-poisoning): enables caching by default

(cache-poisoning)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/release.yml at line 15, The mise-action (jdx/mise-action)
runs with caching enabled by default, which lets untrusted pull_request builds
prime caches that your privileged release.yml tag workflow may later restore;
update the CI workflow that uses mise-action (in .github/workflows/ci.yml) to
disable or scope mise-action caching for pull_request events by adding the
mise-action input/option to conditionally disable cache (e.g. set the action
input named "cache" to false when github.event_name == 'pull_request') or set a
PR-specific cache_key_prefix so caches from PR runs cannot be reused by
release.yml; ensure the change targets the job/step that invokes jdx/mise-action
so release.yml can continue using the action safely.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

dependencies Pull requests that update a dependency file github_actions Pull requests that update GitHub Actions code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants