No description
Find a file
Jorge Rodriguez aa29dc037d
fix: clear MISE_ENV between tests to prevent persistence
MISE_ENV exported to GITHUB_ENV in the first test was persisting to
subsequent tests. Added explicit clearing step before Test 2 to ensure
the precedence test works correctly.
2026-04-21 10:09:30 +02:00
.github fix: clear MISE_ENV between tests to prevent persistence 2026-04-21 10:09:30 +02:00
.husky fix: run npm install in pre-commit hook before build (#410) 2026-03-22 10:54:05 -05:00
dist feat: add environment input to automatically set and export MISE_ENV 2026-04-21 10:00:28 +02:00
scripts chore: remove duplicate release-plz logic 2025-08-18 11:57:51 -05:00
src feat: add environment input to automatically set and export MISE_ENV 2026-04-21 10:00:28 +02:00
.eslintrc.yml feat: support windows (#122) 2024-09-25 21:27:52 +00:00
.gitattributes updated action template base from actions/typescript-action (#170) 2023-10-16 19:18:57 -05:00
.gitignore updated action template base from actions/typescript-action (#170) 2023-10-16 19:18:57 -05:00
.prettierignore updated action template base from actions/typescript-action (#170) 2023-10-16 19:18:57 -05:00
.prettierrc.json updated action template base from actions/typescript-action (#170) 2023-10-16 19:18:57 -05:00
action.yml feat: add environment input to automatically set and export MISE_ENV 2026-04-21 10:00:28 +02:00
CHANGELOG.md feat: add environment input to automatically set and export MISE_ENV 2026-04-21 10:00:28 +02:00
CLAUDE.md docs: add CLAUDE.md 2025-08-18 11:42:46 -05:00
cliff.toml docs: hide release entries in CHANGELOG 2025-08-18 11:50:35 -05:00
CODEOWNERS jdxcode -> jdx 2023-08-27 12:12:44 -05:00
eslint.config.mjs chore: updated deps 2024-11-27 18:10:51 -06:00
LICENSE Initial commit 2023-01-14 08:11:40 -06:00
mise.toml ci: add communique to enhance release notes (#411) 2026-03-22 11:24:46 -05:00
package-lock.json chore(deps): update dependency eslint to v10.2.1 (#445) 2026-04-17 22:38:05 +00:00
package.json fix(deps): update dependency @actions/cache to v6 (#432) 2026-04-11 18:38:18 +00:00
README.md feat: add environment input to automatically set and export MISE_ENV 2026-04-21 10:00:28 +02:00
rollup.config.ts chore: migrate from ncc (CJS) to rollup (ESM) (#436) 2026-04-11 12:55:09 -05:00
tsconfig.json chore: migrate from ncc (CJS) to rollup (ESM) (#436) 2026-04-11 12:55:09 -05:00

Example Workflow

name: test
on:
  pull_request:
    branches:
      - main
  push:
    branches:
      - main
jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - uses: jdx/mise-action@v4
        with:
          version: 2026.3.10 # [default: latest] mise version to install
          install: true # [default: true] run `mise install`
          install_args: "bun" # [default: ""] additional arguments to `mise install`
          cache: true # [default: true] cache mise using GitHub's cache
          experimental: true # [default: false] enable experimental features
          log_level: debug # [default: info] log level
          # automatically write this .tool-versions file
          tool_versions: |
            shellcheck 0.11.0
          # or, if you prefer .mise.toml format:
          mise_toml: |
            [tools]
            shellcheck = "0.11.0"
          working_directory: app # [default: .] directory to run mise in
          reshim: false # [default: false] run `mise reshim -f`
          github_token: ${{ secrets.GITHUB_TOKEN }} # [default: ${{ github.token }}] GitHub token for API authentication
      - run: shellcheck scripts/*.sh
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - uses: jdx/mise-action@v4
      # .tool-versions will be read from repo root
      - run: node ./my_app.js

Cache Configuration

You can customize the cache key used by the action:

- uses: jdx/mise-action@v4
  with:
    cache_key: "my-custom-cache-key"  # Override the entire cache key
    cache_key_prefix: "mise-v1"       # Or just change the prefix (default: "mise-v0")

Template Variables in Cache Keys

When using cache_key, you can use template variables to reference internal values:

- uses: jdx/mise-action@v4
  with:
    cache_key: "mise-{{platform}}-{{version}}-{{file_hash}}"
    version: "2026.3.10"
    install_args: "node python"

Available template variables:

  • {{version}} - The mise version (from the version input)
  • {{cache_key_prefix}} - The cache key prefix (from cache_key_prefix input or default)
  • {{platform}} - The target platform (e.g., "linux-x64", "macos-arm64")
  • {{file_hash}} - Hash of all mise configuration files
  • {{mise_env}} - The MISE_ENV environment variable value
  • {{install_args_hash}} - SHA256 hash of the sorted tools from install args
  • {{default}} - The processed default cache key (useful for extending)

Conditional logic is also supported using Handlebars syntax like {{#if version}}...{{/if}}.

Example using multiple variables:

- uses: jdx/mise-action@v4
  with:
    cache_key: "mise-v1-{{platform}}-{{install_args_hash}}-{{file_hash}}"
    install_args: "node@24 python@3.14"

You can also extend the default cache key:

- uses: jdx/mise-action@v4
  with:
    cache_key: "{{default}}-custom-suffix"
    install_args: "node@24 python@3.14"

This gives you full control over cache invalidation based on the specific aspects that matter to your workflow.

Multi-Environment Workflows

Mise supports multiple environments through the MISE_ENV variable. The action provides an environment input to simplify multi-environment workflows:

- name: Setup mise for preview environment
  uses: jdx/mise-action@v4
  with:
    environment: preview  # Automatically sets and exports MISE_ENV
    mise_toml: |
      [tools]
      node = "24"
      
      [env.preview]
      API_URL = "https://preview.example.com"
      
      [env.production]
      API_URL = "https://api.example.com"

- name: Deploy (MISE_ENV is available)
  run: mise run deploy
  # The preview environment is active, API_URL is set to preview URL

Before (manual approach):

- name: Export MISE_ENV
  run: echo "MISE_ENV=preview" >> $GITHUB_ENV

- name: Setup mise
  uses: jdx/mise-action@v4
  env:
    MISE_ENV: preview

After (with environment input):

- name: Setup mise
  uses: jdx/mise-action@v4
  with:
    environment: preview

Environment Variable Precedence

If MISE_ENV is already set (e.g., at the job level), it takes precedence over the environment input:

jobs:
  deploy:
    env:
      MISE_ENV: production  # This takes precedence
    steps:
      - uses: jdx/mise-action@v4
        with:
          environment: staging  # This will be ignored

Cache Keys and Environments

The cache key automatically includes the environment when using the default cache key template. You can also reference it explicitly:

- uses: jdx/mise-action@v4
  with:
    environment: preview
    cache_key: "mise-{{platform}}-{{mise_env}}-{{file_hash}}"

This ensures different environments maintain separate caches.

GitHub API Rate Limits

When installing tools hosted on GitHub (like gh, node, bun, etc.), mise needs to make API calls to GitHub's releases API. Without authentication, these calls are subject to GitHub's rate limit of 60 requests per hour, which can cause installation failures.

- uses: jdx/mise-action@v4
  with:
    github_token: ${{ secrets.GITHUB_TOKEN }}
    # your other configuration

Note: The action automatically uses ${{ github.token }} as the default, so in most cases you don't need to explicitly provide it. However, if you encounter rate limit errors, make sure the token is being passed correctly.

Alternative Installation

Alternatively, mise is easy to use in GitHub Actions even without this:

jobs:
  build:
    steps:
    - run: |
        curl https://mise.run | sh
        echo "$HOME/.local/share/mise/bin" >> $GITHUB_PATH
        echo "$HOME/.local/share/mise/shims" >> $GITHUB_PATH