chore: release 2026.7.3 #32357
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: test | |
| on: | |
| push: | |
| tags: ["v*"] | |
| branches: ["main", "mise", "release"] | |
| pull_request: | |
| branches: ["main"] | |
| workflow_dispatch: | |
| workflow_call: | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: ${{ github.event_name != 'push' }} | |
| env: | |
| CARGO_TERM_COLOR: always | |
| MISE_TRUSTED_CONFIG_PATHS: ${{ github.workspace }} | |
| MISE_EXPERIMENTAL: 1 | |
| MISE_LOCKFILE: 1 | |
| RUST_BACKTRACE: 1 | |
| MISE_GITHUB_TOKEN: ${{ secrets.MISE_GH_TOKEN || secrets.GITHUB_TOKEN }} | |
| GITHUB_TOKEN: ${{ secrets.MISE_GH_TOKEN || secrets.GITHUB_TOKEN }} | |
| FORGEJO_TOKEN: ${{ secrets.FORGEJO_TOKEN }} | |
| permissions: | |
| contents: read | |
| jobs: | |
| build-ubuntu: | |
| runs-on: namespace-profile-endev-linux-amd64;overrides.cache-tag=mise-pr-rust-linux | |
| timeout-minutes: 60 | |
| steps: | |
| - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7 | |
| - uses: namespacelabs/nscloud-cache-action@58bf6e08898e88803c098e2b522668541cd3b2e3 # v1 | |
| with: | |
| path: | | |
| ~/.cargo/registry | |
| ~/.cargo/git | |
| ~/.cargo/.global-cache | |
| ~/.cache/sccache | |
| - uses: taiki-e/install-action@51cd0b8c0499559d9a4d75c0f5c67bec3a894ec8 # v2 | |
| with: { tool: sccache } | |
| - name: Configure sccache | |
| run: | | |
| export RUSTC_WRAPPER=sccache | |
| export SCCACHE_DIR="$HOME/.cache/sccache" | |
| export SCCACHE_CACHE_SIZE=20G | |
| { | |
| echo "RUSTC_WRAPPER=$RUSTC_WRAPPER" | |
| echo "SCCACHE_DIR=$SCCACHE_DIR" | |
| echo "SCCACHE_CACHE_SIZE=$SCCACHE_CACHE_SIZE" | |
| } >> "$GITHUB_ENV" | |
| sccache --zero-stats | |
| - run: | | |
| cargo build --all-features | |
| echo "$PWD/target/debug" >> "$GITHUB_PATH" | |
| - run: mise -v | |
| - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 | |
| with: | |
| name: mise-ubuntu-latest | |
| path: target/debug/mise | |
| - uses: ./.github/actions/mise-tools | |
| - run: sccache --show-stats | |
| if: always() | |
| build-windows: | |
| runs-on: windows-latest | |
| timeout-minutes: 60 | |
| env: | |
| MISE_DATA_DIR: ~/.local/share/mise | |
| MISE_CACHE_DIR: ~/.cache/mise | |
| steps: | |
| - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7 | |
| - uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2 # zizmor: ignore[cache-poisoning] save-if already gates writes to main/release | |
| with: | |
| shared-key: build | |
| save-if: ${{ github.ref == 'refs/heads/main' || github.ref == 'refs/heads/release' }} | |
| - shell: pwsh | |
| run: | | |
| cargo build --no-default-features --features rustls-native-roots,vfox/vendored-lua,self_update | |
| cargo build -p mise-shim | |
| Add-Content $env:GITHUB_PATH "$env:GITHUB_WORKSPACE\target\debug" | |
| - run: mise -v | |
| - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 | |
| with: | |
| name: mise-windows-latest | |
| path: | | |
| target/debug/mise.exe | |
| target/debug/mise-shim.exe | |
| - uses: ./.github/actions/mise-tools | |
| unit: | |
| name: unit-macos | |
| runs-on: namespace-profile-endev-macos-arm64;overrides.cache-tag=mise-pr-rust-macos | |
| timeout-minutes: 30 | |
| steps: | |
| - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7 | |
| with: | |
| repository: ${{ github.event.pull_request.head.repo.full_name }} | |
| ref: ${{ github.head_ref }} | |
| - uses: namespacelabs/nscloud-cache-action@58bf6e08898e88803c098e2b522668541cd3b2e3 # v1 | |
| with: | |
| path: | | |
| ~/.cargo/registry | |
| ~/.cargo/git | |
| ~/.cargo/.global-cache | |
| ~/.cache/sccache | |
| - uses: taiki-e/install-action@51cd0b8c0499559d9a4d75c0f5c67bec3a894ec8 # v2 | |
| with: { tool: sccache } | |
| - name: Configure sccache | |
| run: | | |
| export RUSTC_WRAPPER=sccache | |
| export SCCACHE_DIR="$HOME/.cache/sccache" | |
| export SCCACHE_CACHE_SIZE=20G | |
| { | |
| echo "RUSTC_WRAPPER=$RUSTC_WRAPPER" | |
| echo "SCCACHE_DIR=$SCCACHE_DIR" | |
| echo "SCCACHE_CACHE_SIZE=$SCCACHE_CACHE_SIZE" | |
| } >> "$GITHUB_ENV" | |
| sccache --zero-stats | |
| - name: Install fd | |
| run: brew install fd | |
| - run: | | |
| cargo build --all-features | |
| echo "$PWD/target/debug" >> "$GITHUB_PATH" | |
| - uses: ./.github/actions/mise-tools | |
| - run: mise x -- cargo test --all-features | |
| - run: mise run test:e2e e2e/cli/test_system_install_brew_macos_slow | |
| - run: sccache --show-stats | |
| if: always() | |
| nightly: | |
| runs-on: namespace-profile-endev-linux-amd64;overrides.cache-tag=mise-pr-rust-linux-nightly | |
| timeout-minutes: 10 | |
| # Track rolling nightly for early rustc regressions without blocking PRs on upstream compiler ICEs. | |
| continue-on-error: true | |
| steps: | |
| - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7 | |
| with: | |
| repository: ${{ github.event.pull_request.head.repo.full_name }} | |
| ref: ${{ github.head_ref }} | |
| - run: rustup default nightly | |
| - uses: namespacelabs/nscloud-cache-action@58bf6e08898e88803c098e2b522668541cd3b2e3 # v1 | |
| with: | |
| path: | | |
| ~/.cargo/registry | |
| ~/.cargo/git | |
| ~/.cargo/.global-cache | |
| ~/.cache/sccache | |
| - uses: taiki-e/install-action@51cd0b8c0499559d9a4d75c0f5c67bec3a894ec8 # v2 | |
| with: { tool: sccache } | |
| - name: Configure sccache | |
| run: | | |
| export RUSTC_WRAPPER=sccache | |
| export SCCACHE_DIR="$HOME/.cache/sccache" | |
| export SCCACHE_CACHE_SIZE=20G | |
| { | |
| echo "RUSTC_WRAPPER=$RUSTC_WRAPPER" | |
| echo "SCCACHE_DIR=$SCCACHE_DIR" | |
| echo "SCCACHE_CACHE_SIZE=$SCCACHE_CACHE_SIZE" | |
| } >> "$GITHUB_ENV" | |
| sccache --zero-stats | |
| - run: | | |
| cargo build --all-features | |
| echo "$PWD/target/debug" >> "$GITHUB_PATH" | |
| - uses: ./.github/actions/mise-tools | |
| - run: mise run test | |
| - run: sccache --show-stats | |
| if: always() | |
| lint: | |
| runs-on: namespace-profile-endev-linux-amd64;overrides.cache-tag=mise-pr-rust-linux | |
| timeout-minutes: 20 | |
| needs: [build-ubuntu] | |
| steps: | |
| - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7 | |
| with: | |
| repository: ${{ github.event.pull_request.head.repo.full_name }} | |
| ref: ${{ github.head_ref }} | |
| - name: Install mold | |
| run: sudo apt-get update && sudo apt-get install -y mold | |
| - uses: taiki-e/install-action@51cd0b8c0499559d9a4d75c0f5c67bec3a894ec8 # v2 | |
| with: | |
| tool: cargo-deny,cargo-msrv,cargo-machete | |
| - uses: namespacelabs/nscloud-cache-action@58bf6e08898e88803c098e2b522668541cd3b2e3 # v1 | |
| with: | |
| path: | | |
| ~/.cargo/registry | |
| ~/.cargo/git | |
| ~/.cargo/.global-cache | |
| ~/.cache/sccache | |
| - uses: taiki-e/install-action@51cd0b8c0499559d9a4d75c0f5c67bec3a894ec8 # v2 | |
| with: { tool: sccache } | |
| - name: Configure sccache | |
| run: | | |
| export RUSTC_WRAPPER=sccache | |
| export SCCACHE_DIR="$HOME/.cache/sccache" | |
| export SCCACHE_CACHE_SIZE=20G | |
| { | |
| echo "RUSTC_WRAPPER=$RUSTC_WRAPPER" | |
| echo "SCCACHE_DIR=$SCCACHE_DIR" | |
| echo "SCCACHE_CACHE_SIZE=$SCCACHE_CACHE_SIZE" | |
| } >> "$GITHUB_ENV" | |
| sccache --zero-stats | |
| - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8 | |
| with: | |
| name: mise-ubuntu-latest | |
| path: target/debug | |
| - run: echo "$PWD/target/debug" >> "$GITHUB_PATH" && chmod +x target/debug/mise | |
| - uses: ./.github/actions/mise-tools | |
| - run: mise x -- bun i | |
| - run: mise run render | |
| - name: assert render produces no diff | |
| run: | | |
| if [ -n "$(git status --porcelain)" ]; then | |
| echo "::error::'mise run render' produced changes. Run it locally and commit." | |
| git status | |
| git diff HEAD | |
| exit 1 | |
| fi | |
| - run: rm -rf ~/.cargo/advisory-dbs && cargo deny check | |
| - run: cargo msrv verify | |
| - run: cargo machete --with-metadata | |
| - run: ./scripts/test-standalone.sh | |
| - run: mise run lint | |
| - run: cargo clippy -- -D warnings | |
| - run: cargo clippy --all-features --all-targets -- -D warnings | |
| - run: sccache --show-stats | |
| if: always() | |
| e2e: | |
| name: e2e-${{matrix.tranche}} | |
| runs-on: namespace-profile-endev-linux-amd64;overrides.cache-tag=mise-pr-rust-linux | |
| needs: [build-ubuntu] | |
| timeout-minutes: 30 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| tranche: [0, 1, 2, 3, 4, 5, 6, 7] | |
| steps: | |
| - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7 | |
| with: | |
| fetch-depth: 0 | |
| - name: Fetch token from pool | |
| id: token | |
| uses: ./.github/actions/fetch-token | |
| with: | |
| api-secret: ${{ secrets.MISE_VERSIONS_API_SECRET }} | |
| - name: Set GitHub token from pool | |
| if: steps.token.outputs.token | |
| run: | | |
| { | |
| echo "MISE_GITHUB_TOKEN=${{ steps.token.outputs.token }}" | |
| echo "GITHUB_TOKEN=${{ steps.token.outputs.token }}" | |
| } >> "$GITHUB_ENV" | |
| - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8 | |
| with: | |
| name: mise-ubuntu-latest | |
| path: target/debug | |
| - run: echo "$PWD/target/debug" >> "$GITHUB_PATH" && chmod +x target/debug/mise | |
| - uses: ./.github/actions/mise-tools | |
| - name: Pull e2e Docker image | |
| run: docker pull ghcr.io/jdx/mise:e2e | |
| - name: Test in Docker | |
| uses: nick-fields/retry@ad984534de44a9489a53aefd81eb77f87c70dc60 # v4 | |
| env: | |
| MISE_E2E_DOCKER: "1" | |
| TEST_TRANCHE: ${{matrix.tranche}} | |
| TEST_TRANCHE_COUNT: 8 | |
| TEST_ALL: ${{(github.head_ref == 'release' || github.ref == 'refs/heads/release') && '1' || '0'}} | |
| with: | |
| timeout_minutes: 30 | |
| retry_wait_seconds: 30 | |
| max_attempts: 2 | |
| command: ./e2e/run_all_tests | |
| windows-unit: | |
| runs-on: windows-latest | |
| timeout-minutes: 30 | |
| env: | |
| MISE_DATA_DIR: ~/.local/share/mise | |
| MISE_CACHE_DIR: ~/.cache/mise | |
| steps: | |
| - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7 | |
| - uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2 # zizmor: ignore[cache-poisoning] save-if already gates writes to main/release | |
| with: | |
| shared-key: build | |
| save-if: ${{ github.ref == 'refs/heads/main' || github.ref == 'refs/heads/release' }} | |
| - name: cargo test | |
| uses: nick-fields/retry@ad984534de44a9489a53aefd81eb77f87c70dc60 # v4 | |
| with: | |
| timeout_minutes: 30 | |
| retry_wait_seconds: 30 | |
| max_attempts: 2 | |
| command: cargo test | |
| windows-e2e: | |
| runs-on: windows-latest | |
| timeout-minutes: 40 | |
| needs: [build-windows] | |
| env: | |
| MISE_DATA_DIR: ~/.local/share/mise | |
| MISE_CACHE_DIR: ~/.cache/mise | |
| steps: | |
| - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7 | |
| - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8 | |
| with: | |
| name: mise-windows-latest | |
| path: target/debug | |
| - run: ls target\debug | |
| - run: Add-Content $env:GITHUB_PATH "$env:GITHUB_WORKSPACE\target\debug" | |
| - uses: ./.github/actions/mise-tools | |
| - name: e2e | |
| uses: nick-fields/retry@ad984534de44a9489a53aefd81eb77f87c70dc60 # v4 | |
| with: | |
| timeout_minutes: 30 | |
| retry_wait_seconds: 30 | |
| max_attempts: 2 | |
| command: pwsh e2e-win\run.ps1 | |
| test-ci: | |
| runs-on: namespace-profile-endev-linux-amd64;overrides.cache-tag=mise-pr-rust-linux | |
| timeout-minutes: 1 | |
| needs: | |
| - build-ubuntu | |
| - build-windows | |
| - unit | |
| - nightly | |
| - lint | |
| - e2e | |
| - windows-unit | |
| - windows-e2e | |
| # Run on success or upstream failure but skip when the workflow is cancelled | |
| # — `always()` would override `cancel-in-progress` and waste a runner. | |
| if: ${{ !cancelled() }} | |
| steps: | |
| - name: Check CI job results | |
| run: | | |
| if [ "${{ needs.build-ubuntu.result }}" != "success" ]; then | |
| echo "build-ubuntu failed or was skipped" | |
| exit 1 | |
| fi | |
| if [ "${{ needs.build-windows.result }}" != "success" ]; then | |
| echo "build-windows failed or was skipped" | |
| exit 1 | |
| fi | |
| if [ "${{ needs.unit.result }}" != "success" ]; then | |
| echo "unit failed or was skipped" | |
| exit 1 | |
| fi | |
| if [ "${{ needs.lint.result }}" != "success" ]; then | |
| echo "lint failed or was skipped" | |
| exit 1 | |
| fi | |
| if [ "${{ needs.e2e.result }}" != "success" ]; then | |
| echo "e2e failed or was skipped" | |
| exit 1 | |
| fi | |
| if [ "${{ needs.windows-unit.result }}" != "success" ]; then | |
| echo "windows-unit failed or was skipped" | |
| exit 1 | |
| fi | |
| if [ "${{ needs.windows-e2e.result }}" != "success" ]; then | |
| echo "windows-e2e failed or was skipped" | |
| exit 1 | |
| fi | |
| echo "All CI jobs completed successfully" |