GitHub Action that upgrades tools from your local mise config with mise upgrade --bump --local and optionally opens pull requests when config files change.
- Lists local tools with
mise ls --local --json - Resolves the upgrade set from
toolsandkeepinputs (both are validated against the local tool list) - Runs
mise upgrade --bump --localfor the selected tools - Opens one or more pull requests when mise config files change
- A repository with a local mise config (for example
.mise.tomlormise.toml) miseavailable in the workflow (usejdx/mise-action)- A GitHub App installed on the repository with
CLIENT_IDandAPP_PRIVATE_KEYsecrets contents: write,pull-requests: write, andworkflows: writegranted to the generated app token when you need follow-up workflows to run
GITHUB_TOKEN cannot trigger other workflows when it pushes commits or opens pull requests. Use a GitHub App token instead, following the same pattern as .github/workflows/release-please.yaml.
name: mise tool updates
on:
workflow_dispatch:
inputs:
tools:
description: Comma separated tools to upgrade. Leave empty to upgrade all local tools.
required: false
default: ''
keep:
description: Comma separated tools to exclude from the upgrade.
required: false
default: ''
permissions:
contents: read
jobs:
upgrade:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
persist-credentials: false
- name: Generate GitHub token
uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
id: generate-token
with:
client-id: ${{ secrets.CLIENT_ID }}
private-key: ${{ secrets.APP_PRIVATE_KEY }}
permission-contents: write
permission-pull-requests: write
permission-workflows: write
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Install mise
uses: jdx/mise-action@e6a8b3978addb5a52f2b4cd9d91eafa7f0ab959d # v4.2.0
- name: Upgrade local mise tools
uses: jylenhof/mise-update-tool@5b784b74bb3eca2a31a710fc37e07406258a115b # v1.0.0
with:
token: ${{ steps.generate-token.outputs.token }}
tools: ${{ inputs.tools }}
keep: ${{ inputs.keep }}| Input | Required | Default | Description |
|---|---|---|---|
token |
yes | — | GitHub token used to push commits and create pull requests |
tools |
no | '' |
Comma or newline separated tools to upgrade. Upgrades all local tools when empty |
keep |
no | '' |
Comma or newline separated tools to exclude from the upgrade |
working-directory |
no | ${{ github.workspace }} |
Directory containing the mise local config |
create-pull-request |
no | true |
Create a pull request when modified files are detected |
branch-prefix |
no | chore/mise-tool-updates |
Prefix for pull request branch names |
pull-request-strategy |
no | single |
single for one PR with all tools, or per-tool for one PR per tool |
pull-request-title |
no | '' |
Optional title override. Supports {tool}, {tools}, {previousVersion}, {nextVersion}, {previousRequested}, {nextRequested} |
commit-author-name |
no | — | Git commit author name for PR commits |
commit-author-email |
no | — | Git commit author email for PR commits |
commit-author-name and commit-author-email must both be set when overriding the commit author.
| Output | Description |
|---|---|
changes-made |
Whether any files were modified by the upgrade |
updated-tools |
Comma-separated list of tools selected for upgrade |
pull-request-urls |
Newline-separated URLs of created pull requests |
Upgrade all local tools except node:
- uses: jylenhof/mise-update-tool@v1.0.0
with:
token: ${{ steps.generate-token.outputs.token }}
keep: nodeUpgrade only python and uv:
- uses: jylenhof/mise-update-tool@v1.0.0
with:
token: ${{ steps.generate-token.outputs.token }}
tools: python, uvOpen one pull request per upgraded tool:
- uses: jylenhof/mise-update-tool@v1.0.0
with:
token: ${{ steps.generate-token.outputs.token }}
pull-request-strategy: per-tool