diff --git a/.cargo/config.toml b/.cargo/config.toml new file mode 100644 index 000000000..73f82bb72 --- /dev/null +++ b/.cargo/config.toml @@ -0,0 +1,2 @@ +[env] +RUST_TEST_THREADS = '1' diff --git a/.config/insta.yaml b/.config/insta.yaml new file mode 100644 index 000000000..e3d6a23b5 --- /dev/null +++ b/.config/insta.yaml @@ -0,0 +1,2 @@ +test: + auto_review: true diff --git a/.config/nextest.toml b/.config/nextest.toml new file mode 100644 index 000000000..884eacf64 --- /dev/null +++ b/.config/nextest.toml @@ -0,0 +1,5 @@ +[profile.default] +test-threads = 1 +slow-timeout = { period = "250ms", terminate-after = 4 } +status-level = "all" +retries = { backoff = "exponential", count = 4, delay = "1s", max-delay = "10s" } diff --git a/.cspell.json b/.cspell.json new file mode 100644 index 000000000..b798d2932 --- /dev/null +++ b/.cspell.json @@ -0,0 +1,16 @@ +{ + "ignorePaths": [ + "**/node_modules/**", + "**/vscode-extension/**", + "**/.git/**", + "**/.pnpm-lock.json", + ".vscode", + "megalinter", + "package-lock.json", + "report" + ], + "language": "en", + "noConfigSearch": true, + "words": ["megalinter", "oxsecurity"], + "version": "0.2" +} diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 000000000..fd7f21bcc --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,36 @@ +// For format details, see https://aka.ms/devcontainer.json. For config options, see the +// README at: https://github.com/devcontainers/templates/tree/main/src/rust +{ + "name": "Rust", + + "image": "ghcr.io/jdx/mise:dev", + + // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile + // "build": { + // "dockerfile": "Dockerfile", + // }, + + // Use 'mounts' to make the cargo cache persistent in a Docker Volume. + // "mounts": [ + // { + // "source": "devcontainer-cargo-cache-${devcontainerId}", + // "target": "/usr/local/cargo", + // "type": "volume" + // } + // ] + + // Features to add to the dev container. More info: https://containers.dev/features. + // "features": {}, + + // Use 'forwardPorts' to make a list of ports inside the container available locally. + // "forwardPorts": [], + + // Use 'postCreateCommand' to run commands after the container is created. + // "postCreateCommand": "rustc --version", + + // Configure tool-specific properties. + // "customizations": {}, + + // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root. + "remoteUser": "root", +} diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 000000000..2f7896d1d --- /dev/null +++ b/.dockerignore @@ -0,0 +1 @@ +target/ diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 000000000..ac106646c --- /dev/null +++ b/.editorconfig @@ -0,0 +1,11 @@ +[*.toml] +indent_style = space +indent_size = 2 + +[*.sh] +indent_style = space +indent_size = 2 + +# shfmt +switch_case_indent = true +simplify = true diff --git a/.env b/.env new file mode 100644 index 000000000..36973ef1f --- /dev/null +++ b/.env @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +export FOO_FROM_FILE="foo_from_file" diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 000000000..f7872486b --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +zipsign.pub binary diff --git a/.github/ISSUE_TEMPLATE/blank.md b/.github/ISSUE_TEMPLATE/blank.md new file mode 100644 index 000000000..612a93fb0 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/blank.md @@ -0,0 +1,7 @@ +--- +name: Blank +about: Blank issue template +title: "" +labels: "" +assignees: "" +--- diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 000000000..2d7275627 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,25 @@ +--- +name: Bug report +about: Something not working right? +title: "" +labels: bug +assignees: "" +--- + +**Describe the bug** +A clear and concise description of what the bug is. + +**To Reproduce** +Steps to reproduce the behavior. + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**`mise doctor` output** + +```text +REPLACE WITH OUTPUT OF `mise doctor` +``` + +**Additional context** +Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 000000000..60f49e9f5 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,7 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: "" +labels: enhancement +assignees: "" +--- diff --git a/.github/actionlint.yaml b/.github/actionlint.yaml new file mode 100644 index 000000000..cc3efb4a1 --- /dev/null +++ b/.github/actionlint.yaml @@ -0,0 +1,19 @@ +self-hosted-runner: + # Labels of self-hosted runner in array of strings. + labels: + - macos-14 + - buildjet-32vcpu-ubuntu-2204-arm + - buildjet-16vcpu-ubuntu-2204-arm + - buildjet-8vcpu-ubuntu-2204-arm + - buildjet-4vcpu-ubuntu-2204-arm + - buildjet-2vcpu-ubuntu-2204-arm + - buildjet-32vcpu-ubuntu-2204 + - buildjet-16vcpu-ubuntu-2204 + - buildjet-8vcpu-ubuntu-2204 + - buildjet-4vcpu-ubuntu-2204 + - buildjet-2vcpu-ubuntu-2204 + +# Configuration variables in array of strings defined in your repository or +# organization. `null` means disabling configuration variables check. +# Empty array means no configuration variable is allowed. +config-variables: null diff --git a/.github/renovate.json b/.github/renovate.json new file mode 100644 index 000000000..d7443b3aa --- /dev/null +++ b/.github/renovate.json @@ -0,0 +1,11 @@ +{ + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "extends": ["github>jdx/renovate-config"], + "automerge": false, + "asdf": { + "enabled": false + }, + "nodenv": { + "enabled": false + } +} diff --git a/.github/restyled.yml b/.github/restyled.yml new file mode 100644 index 000000000..ca41f213f --- /dev/null +++ b/.github/restyled.yml @@ -0,0 +1,5 @@ +enabled: true +restylers: + - "!shellharden" + - "!prettier-markdown" + - "*" diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml new file mode 100644 index 000000000..35161dd5d --- /dev/null +++ b/.github/workflows/docker.yml @@ -0,0 +1,119 @@ +name: docker + +on: + push: + tags: ["v*"] + branches: ["docker-release"] + workflow_dispatch: + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository }} + +jobs: + docker: + name: docker-${{ matrix.flavor }} + strategy: + fail-fast: false + matrix: + flavor: + - alpine + - deb + - mise + - rpm + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + steps: + - name: Checkout repository + uses: actions/checkout@v4 + - name: Log in to the Container registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + - name: Build and push Docker image + uses: docker/build-push-action@v5 + with: + context: . + push: true + tags: ghcr.io/jdx/mise:${{ matrix.flavor }} + labels: ${{ steps.meta.outputs.labels }} + file: packaging/${{ matrix.flavor }}/Dockerfile + dev: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + steps: + - name: Checkout repository + uses: actions/checkout@v4 + - uses: docker/setup-qemu-action@v3 + - uses: docker/setup-buildx-action@v3 + - name: Log in to the Container registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + - name: Build and push Docker image + uses: docker/build-push-action@v5 + with: + context: . + push: true + tags: ghcr.io/jdx/mise:dev + labels: ${{ steps.meta.outputs.labels }} + file: packaging/dev/Dockerfile + platforms: linux/amd64,linux/arm64 + dev-test: + runs-on: ubuntu-latest + container: + image: ghcr.io/jdx/mise:dev + needs: [dev] + steps: + - uses: actions/checkout@v4 + - run: cargo install --path . --debug + - run: mise trust --all + - run: mise install -y + - run: mise run test + dockerhub: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + - name: Log in to Docker Hub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@v5 + with: + images: jdxcode/mise + - name: Build and push Docker image + uses: docker/build-push-action@v5 + with: + file: ./Dockerfile + platforms: linux/amd64,linux/arm64 + push: true + tags: jdxcode/mise:latest,jdxcode/mise:${{ github.ref_name }} + labels: ${{ steps.meta.outputs.labels }} diff --git a/.github/workflows/mega-linter.yml b/.github/workflows/mega-linter.yml new file mode 100644 index 000000000..35f70d29d --- /dev/null +++ b/.github/workflows/mega-linter.yml @@ -0,0 +1,187 @@ +# MegaLinter GitHub Action configuration file +# More info at https://megalinter.io +--- +name: MegaLinter + +# Trigger mega-linter at every push. Action will also be visible from +# Pull Requests to main +on: + # Comment this line to trigger action only on pull-requests + # (not recommended if you don't pay for GH Actions) + # push: + + pull_request: + branches: + - main + push: + branches: + - main + - mise + +# Comment env block if you do not want to apply fixes +env: + # Apply linter fixes configuration + # + # When active, APPLY_FIXES must also be defined as environment variable + # (in github/workflows/mega-linter.yml or other CI tool) + APPLY_FIXES: all + + # Decide which event triggers application of fixes in a commit or a PR + # (pull_request, push, all) + APPLY_FIXES_EVENT: pull_request + + # If APPLY_FIXES is used, defines if the fixes are directly committed (commit) + # or posted in a PR (pull_request) + APPLY_FIXES_MODE: commit + +concurrency: + group: ${{ github.ref }}-${{ github.workflow }} + cancel-in-progress: true + +jobs: + megalinter: + name: MegaLinter + runs-on: ubuntu-latest + + # Give the default GITHUB_TOKEN write permission to commit and push, comment + # issues, and post new Pull Requests; remove the ones you do not need + permissions: + contents: write + issues: write + pull-requests: write + + steps: + # Git Checkout + - name: Checkout Code + uses: actions/checkout@v4 + with: + token: ${{ secrets.PAT || secrets.GITHUB_TOKEN }} + + # If you use VALIDATE_ALL_CODEBASE = true, you can remove this line to + # improve performance + fetch-depth: 0 + + # MegaLinter + - name: MegaLinter + + # You can override MegaLinter flavor used to have faster performances + # More info at https://megalinter.io/latest/flavors/ + uses: oxsecurity/megalinter@v7 + + id: ml + + # All available variables are described in documentation + # https://megalinter.io/latest/config-file/ + env: + # Validates all source when push on main, else just the git diff with + # main. Override with true if you always want to lint all sources + # + # To validate the entire codebase, set to: + # VALIDATE_ALL_CODEBASE: true + # + # To validate only diff with main, set to: + # VALIDATE_ALL_CODEBASE: >- + # ${{ + # github.event_name == 'push' && + # github.ref == 'refs/heads/main' + # }} + VALIDATE_ALL_CODEBASE: true + + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + # ADD YOUR CUSTOM ENV VARIABLES HERE TO OVERRIDE VALUES OF + # .mega-linter.yml AT THE ROOT OF YOUR REPOSITORY + + # Upload MegaLinter artifacts + - name: Archive production artifacts + uses: actions/upload-artifact@v4 + if: success() || failure() + with: + name: MegaLinter reports + path: | + megalinter-reports + mega-linter.log + + # Create pull request if applicable + # (for now works only on PR from same repository, not from forks) + - name: Create Pull Request with applied fixes + uses: peter-evans/create-pull-request@v6 + id: cpr + if: >- + steps.ml.outputs.has_updated_sources == 1 && + ( + env.APPLY_FIXES_EVENT == 'all' || + env.APPLY_FIXES_EVENT == github.event_name + ) && + env.APPLY_FIXES_MODE == 'pull_request' && + ( + github.event_name == 'push' || + github.event.pull_request.head.repo.full_name == github.repository + ) && + !contains(github.event.head_commit.message, 'skip fix') + with: + token: ${{ secrets.PAT || secrets.GITHUB_TOKEN }} + commit-message: "[MegaLinter] Apply linters automatic fixes" + title: "[MegaLinter] Apply linters automatic fixes" + labels: bot + + - name: Create PR output + if: >- + steps.ml.outputs.has_updated_sources == 1 && + ( + env.APPLY_FIXES_EVENT == 'all' || + env.APPLY_FIXES_EVENT == github.event_name + ) && + env.APPLY_FIXES_MODE == 'pull_request' && + ( + github.event_name == 'push' || + github.event.pull_request.head.repo.full_name == github.repository + ) && + !contains(github.event.head_commit.message, 'skip fix') + run: | + echo "PR Number - ${{ steps.cpr.outputs.pull-request-number }}" + echo "PR URL - ${{ steps.cpr.outputs.pull-request-url }}" + + # Push new commit if applicable + # (for now works only on PR from same repository, not from forks) + - name: Prepare commit + if: >- + steps.ml.outputs.has_updated_sources == 1 && + ( + env.APPLY_FIXES_EVENT == 'all' || + env.APPLY_FIXES_EVENT == github.event_name + ) && + env.APPLY_FIXES_MODE == 'commit' && + github.ref != 'refs/heads/main' && + ( + github.event_name == 'push' || + github.event.pull_request.head.repo.full_name == github.repository + ) && + !contains(github.event.head_commit.message, 'skip fix') + run: sudo chown -Rc $UID .git/ + + - name: Commit and push applied linter fixes + uses: stefanzweifel/git-auto-commit-action@v5 + if: >- + steps.ml.outputs.has_updated_sources == 1 && + ( + env.APPLY_FIXES_EVENT == 'all' || + env.APPLY_FIXES_EVENT == github.event_name + ) && + env.APPLY_FIXES_MODE == 'commit' && + github.ref != 'refs/heads/main' && + ( + github.event_name == 'push' || + github.event.pull_request.head.repo.full_name == github.repository + ) && + !contains(github.event.head_commit.message, 'skip fix') + with: + branch: >- + ${{ + github.event.pull_request.head.ref || + github.head_ref || + github.ref + }} + commit_message: "[MegaLinter] Apply linters fixes" + commit_user_name: megalinter-bot + commit_user_email: nicolas.vuillamy@ox.security diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 000000000..1c6ff8e17 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,292 @@ +name: release + +on: + push: + tags: ["v*"] + branches: ["main", "mise", "release/*"] + workflow_dispatch: + +concurrency: + group: release-${{ github.ref_name }} + +env: + CARGO_TERM_COLOR: always + CARGO_INCREMENTAL: 0 + DRY_RUN: ${{ startsWith(github.event.ref, 'refs/tags/v') && '0' || '1' }} + +jobs: + build-tarball: + name: build-tarball-${{matrix.name}} + runs-on: ${{matrix.runs-on}} + timeout-minutes: 45 + strategy: + fail-fast: false + matrix: + include: + - os: ubuntu + name: linux-x64 + target: x86_64-unknown-linux-gnu + runs-on: ubuntu-latest + - os: ubuntu + name: linux-x64-musl + target: x86_64-unknown-linux-musl + runs-on: ubuntu-latest + - os: ubuntu + name: linux-arm64 + target: aarch64-unknown-linux-gnu + runs-on: ubuntu-latest + - os: ubuntu + name: linux-arm64-musl + target: aarch64-unknown-linux-musl + runs-on: ubuntu-latest + - os: ubuntu + name: linux-armv7 + target: armv7-unknown-linux-gnueabi + runs-on: ubuntu-latest + - os: ubuntu + name: linux-armv7-musl + target: armv7-unknown-linux-musleabi + runs-on: ubuntu-latest + - os: ubuntu + name: linux-armv6 + target: arm-unknown-linux-gnueabi + runs-on: ubuntu-latest + - os: ubuntu + name: linux-armv6-musl + target: arm-unknown-linux-musleabi + runs-on: ubuntu-latest + - os: macos + name: macos-x64 + target: x86_64-apple-darwin + runs-on: macos-14 + - os: macos + name: macos-arm64 + target: aarch64-apple-darwin + runs-on: macos-14 + # - os: macos + # name: macos + # target: universal2-apple-darwin + # runs-on: macos-12 + steps: + - uses: actions/checkout@v4 + - uses: actions/cache@v4 + with: + path: ~/.cargo/bin/zipsign + key: ${{ runner.os }}-cargo-zipsign + - run: rustup target add ${{matrix.target}} + - run: rustup toolchain install stable --profile minimal + - uses: Swatinem/rust-cache@v2 + with: + shared-key: build-tarball-${{matrix.name}} + - if: matrix.os == 'ubuntu' + uses: taiki-e/install-action@cross + - run: scripts/setup-zipsign.sh + env: + ZIPSIGN: ${{ secrets.ZIPSIGN }} + - run: scripts/build-tarball.sh mise --release --features openssl/vendored --target ${{matrix.target}} + - uses: actions/upload-artifact@v4 + with: + name: tarball-${{matrix.target}} + path: | + dist/mise-*.tar.xz + dist/mise-*.tar.gz + if-no-files-found: error + e2e-linux: + name: e2e-linux-${{matrix.tranche}} + runs-on: ubuntu-latest + #container: ghcr.io/jdx/mise:github-actions + needs: [build-tarball] + timeout-minutes: 30 + strategy: + fail-fast: false + matrix: + tranche: [0, 1, 2, 3] + steps: + - uses: actions/checkout@v4 + - name: Install zsh/fish/direnv + run: sudo apt-get update; sudo apt-get install zsh fish direnv + - uses: actions/download-artifact@v4 + with: + name: tarball-x86_64-unknown-linux-gnu + path: dist + - uses: taiki-e/install-action@v2 + with: + tool: usage-cli + - run: tar -C "$HOME" -xvJf "dist/mise-$(./scripts/get-version.sh)-linux-x64.tar.xz" + - run: echo "$HOME/mise/bin" >> "$GITHUB_PATH" + - run: mise -v + - name: Run e2e tests + uses: nick-fields/retry@v3 + env: + GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }} + RUST_BACKTRACE: "1" + TEST_TRANCHE: ${{matrix.tranche}} + TEST_TRANCHE_COUNT: 4 + TEST_ALL: 1 + with: + timeout_minutes: 20 + max_attempts: 3 + command: ./e2e/run_all_tests + rpm: + runs-on: ubuntu-22.04 + needs: [build-tarball] + timeout-minutes: 10 + container: ghcr.io/jdx/mise:rpm + steps: + - uses: actions/checkout@v4 + - uses: crazy-max/ghaction-import-gpg@v6 + with: + gpg_private_key: ${{ secrets.MISE_GPG_KEY }} + - uses: actions/download-artifact@v4 + with: + name: tarball-x86_64-unknown-linux-gnu + path: dist + - uses: actions/download-artifact@v4 + with: + name: tarball-aarch64-unknown-linux-gnu + path: dist + - run: scripts/build-rpm.sh + - uses: actions/upload-artifact@v4 + with: + name: rpm + path: dist/rpmrepo + if-no-files-found: error + deb: + runs-on: ubuntu-22.04 + container: ghcr.io/jdx/mise:deb + timeout-minutes: 10 + needs: [build-tarball] + steps: + - uses: actions/checkout@v4 + - uses: crazy-max/ghaction-import-gpg@v6 + with: + gpg_private_key: ${{ secrets.MISE_GPG_KEY }} + - uses: actions/download-artifact@v4 + with: + name: tarball-x86_64-unknown-linux-gnu + path: dist + - uses: actions/download-artifact@v4 + with: + name: tarball-aarch64-unknown-linux-gnu + path: dist + - run: scripts/build-deb.sh + - uses: actions/upload-artifact@v4 + with: + name: deb + path: dist/deb + if-no-files-found: error + release: + runs-on: ubuntu-latest + #container: ghcr.io/jdx/mise:github-actions + timeout-minutes: 10 + permissions: + contents: write + needs: + - e2e-linux + - build-tarball + - rpm + - deb + steps: + - uses: actions/checkout@v4 + with: + path: mise + - uses: actions/checkout@v4 + with: + repository: jdx/mise-docs + path: mise-docs + token: ${{ secrets.RTX_GITHUB_BOT_TOKEN }} + - name: Install fd-find + run: | + sudo apt-get update + sudo apt-get install fd-find + mkdir -p "$HOME/.local/bin" + ln -s "$(which fdfind)" "$HOME/.local/bin/fd" + echo "$HOME/.local/bin" >> "$GITHUB_PATH" + - uses: actions/setup-node@v4 + with: + node-version: "20.x" + registry-url: "https://registry.npmjs.org" + - uses: shimataro/ssh-key-action@v2 + with: + key: ${{ secrets.RTX_SSH_KEY }} + known_hosts: ${{ secrets.RTX_KNOWN_HOSTS_AUR }} + - uses: crazy-max/ghaction-import-gpg@v6 + with: + gpg_private_key: ${{ secrets.MISE_GPG_KEY }} + git_user_signingkey: true + git_commit_gpgsign: true + workdir: mise-docs + - uses: actions/download-artifact@v4 + with: { path: artifacts } + - run: mise/scripts/release.sh + env: + CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_TOKEN }} + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + CLOUDFLARE_ACCESS_KEY_ID: ${{ secrets.CLOUDFLARE_ACCESS_KEY_ID }} + CLOUDFLARE_SECRET_ACCESS_KEY: ${{ secrets.CLOUDFLARE_SECRET_ACCESS_KEY }} + - name: mise-docs push + if: startsWith(github.event.ref, 'refs/tags/v') + run: git push + working-directory: mise-docs + - name: GitHub Release Assets + uses: softprops/action-gh-release@v1 + if: startsWith(github.event.ref, 'refs/tags/v') + with: + fail_on_unmatched_files: true + draft: false + files: releases/${{github.ref_name}}/* + generate_release_notes: true + token: ${{ secrets.RTX_GITHUB_BOT_TOKEN }} + bump-homebrew-formula: + runs-on: macos-14 + timeout-minutes: 10 + needs: [release] + continue-on-error: true + if: startsWith(github.event.ref, 'refs/tags/v') + steps: + - name: Bump Homebrew formula + uses: dawidd6/action-homebrew-bump-formula@v3 + with: + token: ${{ secrets.RTX_GITHUB_BOT_TOKEN }} + formula: mise + bump-aur: + runs-on: ubuntu-22.04 + timeout-minutes: 30 + needs: [e2e-linux] + steps: + - name: Checkout repository + uses: actions/checkout@v4 + - uses: shimataro/ssh-key-action@v2 + with: + key: ${{ secrets.RTX_SSH_KEY }} + known_hosts: ${{ secrets.RTX_KNOWN_HOSTS_AUR }} + - name: Bump aur + run: ./scripts/release-aur.sh + bump-aur-bin: + runs-on: ubuntu-22.04 + timeout-minutes: 30 + needs: [release] + steps: + - name: Checkout repository + uses: actions/checkout@v4 + - uses: shimataro/ssh-key-action@v2 + with: + key: ${{ secrets.RTX_SSH_KEY }} + known_hosts: ${{ secrets.RTX_KNOWN_HOSTS_AUR }} + - name: Bump aur-bin + run: ./scripts/release-aur-bin.sh + bump-alpine: + runs-on: ubuntu-22.04 + container: ghcr.io/jdx/rtx:alpine + timeout-minutes: 30 + needs: [e2e-linux] + if: startsWith(github.event.ref, 'refs/tags/v') + steps: + - name: Checkout repository + uses: actions/checkout@v4 + - name: Bump APKBUILD + run: sudo -Eu packager ./scripts/release-alpine.sh + env: + ALPINE_PUB_KEY: ${{ secrets.ALPINE_PUB_KEY }} + ALPINE_PRIV_KEY: ${{ secrets.ALPINE_PRIV_KEY }} + GITLAB_TOKEN: ${{ secrets.GITLAB_TOKEN }} diff --git a/.github/workflows/test-plugins.yml b/.github/workflows/test-plugins.yml new file mode 100644 index 000000000..8d91646ed --- /dev/null +++ b/.github/workflows/test-plugins.yml @@ -0,0 +1,190 @@ +name: test-plugins + +# Test Top 50 asdf plugins install correctly and the most common can print their +# current version + +on: + push: + tags: ["v*"] + branches: ["test-plugins"] + schedule: + # run at midnight on sunday (utc?) + - cron: 0 0 * * 0 + # pull_request: + # branches: ["main"] + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +env: + CARGO_TERM_COLOR: always + +jobs: + build-linux: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v4 + - name: Rust Cache + uses: Swatinem/rust-cache@v2 + with: + shared-key: "build-linux-x86_64-unknown-linux-gnu" + save-if: false + - run: scripts/build-tarball.sh mise --release --target x86_64-unknown-linux-gnu + - uses: actions/upload-artifact@v4 + with: + name: tarball-x86_64-unknown-linux-gnu + path: | + dist/*.tar.xz + dist/*.tar.gz + if-no-files-found: error + test-install-and-run: + runs-on: ubuntu-22.04 + needs: [build-linux] + env: + GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }} + strategy: + fail-fast: false + matrix: + include: + - plugin: node + command: mise exec node@latest -- node -v + - plugin: ruby + command: mise exec ruby@latest -- ruby --version + - plugin: python + command: mise exec python@latest -- python -V + - plugin: direnv + command: mise exec direnv@latest -- direnv --version + - plugin: erlang + command: mise exec erlang@24.3.4.9 -- erl -eval 'erlang:display(erlang:system_info(otp_release)), halt().' -noshell + - plugin: elixir + command: | + mise use --global erlang@24.3.4.9 + eval "$(mise env bash)" + mise use --global elixir@main-otp-24 + eval "$(mise env bash)" + mise exec -- elixir --version + - plugin: golang + command: mise exec golang@latest -- go version + - plugin: java + command: mise exec java@openjdk -- java -version + - plugin: terraform + command: mise exec terraform@latest -- terraform -v + # - plugin: yarn + # command: mise exec yarn@latest -- yarn --version + - plugin: deno + command: mise exec deno@latest -- deno --version + - plugin: bun + command: mise exec bun@latest -- bun --version + - plugin: kubectl + command: mise exec kubectl@latest -- kubectl version --client + - plugin: dotnet + command: mise exec dotnet@latest -- dotnet --list-sdks + - plugin: flutter + command: mise exec flutter@latest -- flutter --version + - plugin: crystal + command: mise exec crystal@latest -- crystal -v + - plugin: neovim + command: mise exec neovim@latest -- nvim --version + - plugin: php + command: mise exec php@latest -- php -v php + - plugin: rust + command: mise exec rust@nightly -- rustc -V + - plugin: postgres + command: mise exec postgres@latest -- psql -V + steps: + - name: apt-get + run: sudo apt-get update; sudo apt-get install zsh fish direnv re2c libcurl4-openssl-dev libgd-dev libonig-dev autoconf bison build-essential curl gettext git libgd-dev libcurl4-openssl-dev libedit-dev libicu-dev libjpeg-dev libmysqlclient-dev libonig-dev libpng-dev libpq-dev libreadline-dev libsqlite3-dev libssl-dev libxml2-dev libzip-dev openssl pkg-config re2c zlib1g-dev libwxgtk-webview3.0-gtk3-dev + - uses: actions/download-artifact@v4 + with: + name: tarball-x86_64-unknown-linux-gnu + path: dist + # dist/mise-v1.16.0-linux-x64.tar.xz + # x86_64-unknown-linux-gnu-v1.16.0-linux-x64.tar.xz + - run: tar -C "$HOME" -xvJf dist/mise-*-linux-x64.tar.xz + - run: echo "$HOME/mise/bin" >> "$GITHUB_PATH" + - run: mise -v + - name: ${{matrix.command}} + uses: nick-fields/retry@v3 + with: + timeout_minutes: 20 + max_attempts: 3 + retry_wait_seconds: 30 + command: ${{matrix.command}} + env: + MISE_EXPERIMENTAL: "1" + test-install: + # Tests installing the top 50 plugins not already tested in `test-install-and-run`. + # installing is a better-than-nothing smoke test that the plugin is correctly implemented + # and behaves as expected with mise. + runs-on: ubuntu-22.04 + needs: [build-linux] + env: + GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }} + strategy: + fail-fast: false + matrix: + plugins: + - waypoint + - vault + - tfc-agent + - terraform-ls + - serf + - sentinel + - packer + - nomad + - levant + - consul + - boundary + - postgres + - rust + - action-validator + - dotnet-core + - neovim + - poetry + # TODO: - haskell not working due to already existing on image + - link + - lua + - redis + - gcloud + - helm + - gleam + - awscli + - dart + - conan + # TODO: - awsebcli fails in asdf and mise the same way + - aws-sam-cli + - ansible-base + - kotlin + - pnpm + - ocaml + # TODO: - rebar install erlang first + # TODO: - julia seems to have quit working, likely an issue with the plugin + - elm + # TODO: - R install libcurl + - nim + - alias + - mysql + - minikube + - gradle + - zig + - shellcheck + - scala + - maven + - kustomize + - graalvm + - sbcl + steps: + - name: Install zsh/fish/direnv + run: sudo apt-get update; sudo apt-get install zsh fish direnv + - uses: actions/download-artifact@v4 + with: + name: tarball-x86_64-unknown-linux-gnu + path: dist + - run: tar -C "$HOME" -xvJf dist/mise-*-linux-x64.tar.xz + - run: echo "$HOME/mise/bin" >> "$GITHUB_PATH" + - name: mise install ${{matrix.plugins}}@latest + uses: nick-fields/retry@v3 + with: + timeout_minutes: 20 + max_attempts: 3 + retry_wait_seconds: 30 + command: mise install ${{matrix.plugins}}@latest diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 000000000..99c49879b --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,104 @@ +name: test +on: + push: + tags: ["v*"] + branches: ["main", "mise"] + pull_request: + branches: ["main"] + workflow_dispatch: + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +env: + CARGO_TERM_COLOR: always + CARGO_INCREMENTAL: 0 + MISE_TRUSTED_CONFIG_PATHS: ${{ github.workspace }} + +jobs: + unit: + runs-on: ubuntu-latest + #container: ghcr.io/jdx/mise:github-actions + timeout-minutes: 10 + steps: + - uses: actions/checkout@v4 + with: + repository: ${{ github.event.pull_request.head.repo.full_name }} + ref: ${{ github.event.pull_request.head.ref }} + - uses: Swatinem/rust-cache@v2 + with: + shared-key: unit + save-if: ${{ github.ref_name == 'main' }} + - uses: taiki-e/install-action@v2 + with: + tool: nextest,just,cargo-deny,cargo-msrv,cargo-machete,usage-cli + - name: Install direnv + run: sudo apt-get update; sudo apt-get install direnv + - run: cargo binstall usage-cli + - run: cargo nextest run --all-features + env: + RUST_BACKTRACE: "1" + - run: cargo deny check + - run: cargo msrv verify + - run: cargo machete --with-metadata + - run: ./scripts/test-standalone.sh + - run: cargo build --all-features + - run: ./target/debug/mise settings set experimental true + - run: ./target/debug/mise run render + - run: ./target/debug/mise run lint:fix + - run: git diff HEAD + - if: github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == 'jdx/mise' + uses: EndBug/add-and-commit@v9 + with: + push: true + author_name: mise[bot] + author_email: 123107610+mise-en-dev@users.noreply.github.com + - run: ./target/debug/mise run lint + + coverage: + name: coverage-${{matrix.tranche}} + #container: ghcr.io/jdx/mise:github-actions + runs-on: ubuntu-latest + timeout-minutes: 30 + strategy: + fail-fast: false + matrix: + tranche: [0, 1, 2, 3] + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + #- run: rustup toolchain install nightly --component llvm-tools-preview --profile minimal + - uses: Swatinem/rust-cache@v2 + with: + shared-key: coverage + save-if: ${{ github.ref_name == 'main' }} + - run: sudo apt-get update; sudo apt-get install zsh fish direnv + - uses: taiki-e/install-action@v2 + with: + tool: cargo-llvm-cov,just,usage-cli + - name: Test w/ coverage + uses: nick-fields/retry@v3 + env: + GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }} + RUST_BACKTRACE: "1" + MISE_GITHUB_BOT_TOKEN: ${{ secrets.RTX_GITHUB_BOT_TOKEN }} + TEST_TRANCHE: ${{matrix.tranche}} + TEST_TRANCHE_COUNT: 4 + TEST_FULL: ${{github.ref_name == 'main' && '1' || '0'}} + with: + timeout_minutes: 30 + max_attempts: 2 + command: just test-coverage + - name: Run codacy-coverage-reporter + uses: codacy/codacy-coverage-reporter-action@v1 + continue-on-error: true + with: + project-token: ${{ secrets.CODACY_PROJECT_TOKEN }} + coverage-reports: lcov.info + # - name: Upload to codecov.io + # uses: codecov/codecov-action@v3 + # with: + # fail_ci_if_error: false + # files: lcov.info diff --git a/.gitignore b/.gitignore index 7ec8c9bd2..e814f45ea 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,25 @@ -.rtxcache* +.DS_Store +/dist/ +/node_modules/ +package-lock.json + +*.log +*.profraw +lcov.info + +**/snapshots/*.snap.new + +# Generated by Cargo +# will have compiled files and executables +/target/ +# These are backup files generated by rustfmt +**/*.rs.bk + +# alpine +.ash_history +.abuild +/aports +/aur + +megalinter-reports/ +.dev/ diff --git a/.hadolint.yaml b/.hadolint.yaml new file mode 100644 index 000000000..246210584 --- /dev/null +++ b/.hadolint.yaml @@ -0,0 +1,7 @@ +ignored: + - DL3006 + - DL3008 + - DL3015 + - DL3018 + - DL3028 + - DL3041 diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 000000000..13566b81b --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 000000000..a55e7a179 --- /dev/null +++ b/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 000000000..c6df57561 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,47 @@ + + + + \ No newline at end of file diff --git a/.idea/mise.iml b/.idea/mise.iml new file mode 100644 index 000000000..47c629d52 --- /dev/null +++ b/.idea/mise.iml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 000000000..491999a63 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/.idea/modules/fixtures.iml b/.idea/modules/fixtures.iml new file mode 100644 index 000000000..0d39050a2 --- /dev/null +++ b/.idea/modules/fixtures.iml @@ -0,0 +1,11 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/prettier.xml b/.idea/prettier.xml new file mode 100644 index 000000000..f6ac06c75 --- /dev/null +++ b/.idea/prettier.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 000000000..617d4b9cd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + diff --git a/.jscpd.json b/.jscpd.json new file mode 100644 index 000000000..2cee5f5d5 --- /dev/null +++ b/.jscpd.json @@ -0,0 +1,15 @@ +{ + "threshold": 0, + "reporters": ["html", "markdown"], + "ignore": [ + "**/node_modules/**", + "**/.git/**", + "**/.rbenv/**", + "**/.venv/**", + "**/*cache*/**", + "**/.github/**", + "**/.idea/**", + "**/report/**", + "**/*.svg" + ] +} diff --git a/.markdown-link-check.json b/.markdown-link-check.json new file mode 100644 index 000000000..2fc2c67da --- /dev/null +++ b/.markdown-link-check.json @@ -0,0 +1,3 @@ +{ + "ignorePatterns": [{ "pattern": "^https://crates.io" }] +} diff --git a/.markdownlint.json b/.markdownlint.json new file mode 100644 index 000000000..a36edfc88 --- /dev/null +++ b/.markdownlint.json @@ -0,0 +1,7 @@ +{ + "MD004": false, + "MD013": false, + "MD033": false, + "MD040": false, + "MD041": false +} diff --git a/.markdownlintignore b/.markdownlintignore new file mode 100644 index 000000000..2f7896d1d --- /dev/null +++ b/.markdownlintignore @@ -0,0 +1 @@ +target/ diff --git a/.mega-linter.yml b/.mega-linter.yml new file mode 100644 index 000000000..1404fe113 --- /dev/null +++ b/.mega-linter.yml @@ -0,0 +1,35 @@ +# Configuration file for MegaLinter +# +# See all available variables at https://megalinter.io/latest/config-file/ and in +# linters documentation + +# all, none, or list of linter keys +APPLY_FIXES: all + +GITHUB_COMMENT_REPORTER: false + +# If you use ENABLE variable, all other languages/formats/tooling-formats will +# be disabled by default +# ENABLE: +# - RUST + +DISABLE: + - SPELL + +DISABLE_LINTERS: + - COPYPASTE_JSCPD + - REPOSITORY_GRYPE + - REPOSITORY_CHECKOV + - REPOSITORY_DEVSKIM + - REPOSITORY_KICS + - REPOSITORY_TRIVY + +PRE_COMMANDS: + - command: apk add --no-cache zlib-dev zlib-static openssl-dev libffi-dev + +SHOW_ELAPSED_TIME: true + +#FILEIO_REPORTER: false + +FILTER_REGEX_EXCLUDE: "(completions/|target/)" +JSON_JSONLINT_FILTER_REGEX_EXCLUDE: '(\.devcontainer/)' diff --git a/.mise.dev.toml b/.mise.dev.toml new file mode 100644 index 000000000..4dae1552f --- /dev/null +++ b/.mise.dev.toml @@ -0,0 +1,2 @@ +[env] +FOO=".mise.dev.toml" diff --git a/.mise.local.toml b/.mise.local.toml new file mode 100644 index 000000000..6e50f8286 --- /dev/null +++ b/.mise.local.toml @@ -0,0 +1,10 @@ +#:schema ./schema/mise.json + +tasks.a1 = ["echo a1 1>&2 && sleep 1.5"] +tasks.a2 = "echo a2 && sleep 1.0" +tasks.b1 = { run = "echo b1 && sleep 1.0", depends = ["a1", "a2"], hide = true } +tasks.c1 = { run = "echo c1 && sleep 0.5 && echo", depends = ["b1"], hide = true } +#tasks.filetask = "echo local" + +[env] +FOO=".mise.local.toml" diff --git a/.mise.toml b/.mise.toml new file mode 100644 index 000000000..68962cff4 --- /dev/null +++ b/.mise.toml @@ -0,0 +1,135 @@ +#:schema ./schema/mise.json + +min_version = "2024.1.1" +[env] +_.file = [".env"] +_.path = ["./target/debug"] +FOO = "bar" +FOO_NUM = 1 +THIS_PROJECT = "{{config_root}}-{{cwd}}" + +[tools] +#node = 'lts' +"cargo:eza" = "0.17.0" +tiny = { version = "1", foo = "bar" } +golang = { version = "prefix:1.21", foo = "bar" } +python = { version = "latest", virtualenv = "{{env.HOME}}/.cache/venv" } +ruby = "3.1" + +[plugins] +nnnn = 'https://github.com/mise-plugins/rtx-nodejs#main' + +[alias.tiny] +abc = '1' + +[tasks.format] +run = "cargo fmt -- --emit=files" + +[tasks.clean] +run = "cargo clean" + +[tasks.build] +alias = "b" +run = "cargo build --color always --all-features" +#sources = ["Cargo.*", "src/**/*.rs"] +#outputs = ["target/debug/mise"] + +[tasks.ci] +depends = [ + "format", + "build", + "test" +] + +[tasks."render:usage"] +depends = ["build"] +env = { CLICOLOR_FORCE = "0" } +run = "mise usage > mise.usage.kdl" + +[tasks."render:completions"] +depends = ["build", "render:usage"] +env = { NO_COLOR = "1" } +run = ''' +#!/usr/bin/env bash +set -xeuo pipefail +mise completion bash > completions/mise.bash +mise completion zsh > completions/_mise +mise completion fish > completions/mise.fish +''' + +[tasks."render:mangen"] +depends = ["build"] +env = { NO_COLOR = "1" } +run = "mise render-mangen" + +[tasks."render:help"] +depends = ["build"] +env = { NO_COLOR = "1" } +run = [ + "mise render-help", + "mise x node@latest -- npx markdown-magic", +] +sources = ["mise"] +outputs = ["README.md"] + +[tasks.render] +alias = "render" +depends = ["render:*"] + +[tasks.pre-commit] +depends = ["render", "lint"] + +[tasks.snapshots] +description = "Update test snapshots" +run = "cargo insta test --accept --unreferenced delete" + +[tasks.release] +run = "cargo release" + +[tasks."lint:fix"] +alias = "lint-fix" +run = "just lint-fix" + +[tasks.signal-test] +run = "node ./test/fixtures/signal-test.js" + +[tasks.test] +alias = 't' +run = [ + "mise run test:unit", + "mise run test:e2e", +] + +[tasks."test:unit"] +run = "cargo test" +env = { CARGO_TERM_COLOR = "always" } + +[tasks."test:e2e"] +run = "just test-e2e" +# TODO: make this work when we have task args +#run = ''' +#set -euo pipefail +#TEST="$1" +#if [ "TEST" = all ]; then +# echo ./e2e/run_all_tests +#else +# FILES="$(fd TEST e2e/)" +# echo ./e2e/run_test "$FILES" +#fi +#''' + +[tasks."docker:image"] +description = "build docker image from Dockerfile" +run = 'docker build $root -f $root/packaging/dev/Dockerfile -t ghcr.io/jdx/mise:dev' + +[tasks."docker:cargo"] +description = "run cargo inside of development docker container" +run = 'docker run -ti --rm -v $root:/mise -w /mise ghcr.io/jdx/mise:dev cargo' + +[tasks."docker:mise"] +description = "run mise inside of development docker container" +run = "mise run -- docker:cargo run --" + +[tasks."docker:e2e"] +description = "run e2e tests inside of development docker container" +run = "mise run docker:mise run test:e2e" diff --git a/.mise/config.toml b/.mise/config.toml new file mode 100644 index 000000000..64482f290 --- /dev/null +++ b/.mise/config.toml @@ -0,0 +1 @@ +tasks.lint = "just lint" diff --git a/.mise/tasks/filetask b/.mise/tasks/filetask new file mode 100755 index 000000000..1c25bb9b8 --- /dev/null +++ b/.mise/tasks/filetask @@ -0,0 +1,13 @@ +#!/usr/bin/env bash +# mise description="This is a test build script" +# mise depends=["lint", "build"] +# mise sources=[".test-tool-versions"] +# mise outputs=["$MISE_PROJECT_ROOT/test/test-build-output.txt"] +# mise env={TEST_BUILDSCRIPT_ENV_VAR = "VALID"} +# mise dir="{{config_root}}" + +set -euxo pipefail +cd "$MISE_PROJECT_ROOT" || exit 1 +echo "running test-build script" +echo "TEST_BUILDSCRIPT_ENV_VAR: $TEST_BUILDSCRIPT_ENV_VAR" > test/test-build-output.txt +echo "ARGS:" "$@" diff --git a/.node-version b/.node-version new file mode 100644 index 000000000..a77793ecc --- /dev/null +++ b/.node-version @@ -0,0 +1 @@ +lts/hydrogen diff --git a/.shellcheckrc b/.shellcheckrc new file mode 100644 index 000000000..8cc152d0a --- /dev/null +++ b/.shellcheckrc @@ -0,0 +1,3 @@ +disable=SC1008 +disable=SC2088 +disable=SC2317 diff --git a/.tool-versions b/.tool-versions new file mode 100644 index 000000000..bf5cbb8a3 --- /dev/null +++ b/.tool-versions @@ -0,0 +1,4 @@ +shellcheck 0.9.0 +shfmt sub-1:4 +jq latest +tiny 2 1 3 diff --git a/.yamllint.yml b/.yamllint.yml new file mode 100644 index 000000000..cd310bfaf --- /dev/null +++ b/.yamllint.yml @@ -0,0 +1 @@ +document-start: disable diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 000000000..38c6ee7fb --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1 @@ + diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 000000000..eca3bdff5 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,3258 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "addr2line" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "aho-corasick" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" +dependencies = [ + "memchr", +] + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "ansi-str" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cf4578926a981ab0ca955dc023541d19de37112bc24c1a197bd806d3d86ad1d" +dependencies = [ + "ansitok", +] + +[[package]] +name = "ansitok" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "220044e6a1bb31ddee4e3db724d29767f352de47445a6cd75e1a173142136c83" +dependencies = [ + "nom", + "vte", +] + +[[package]] +name = "anstream" +version = "0.6.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e2e1ebcb11de5c03c67de28a7df593d32191b44939c482e97702baaaa6ab6a5" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8901269c6307e8d93993578286ac0edf7f195079ffff5ebdeea6a59ffb7e36bc" + +[[package]] +name = "anstyle-parse" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7" +dependencies = [ + "anstyle", + "windows-sys 0.52.0", +] + +[[package]] +name = "arrayvec" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" + +[[package]] +name = "async-compression" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a116f46a969224200a0a97f29cfd4c50e7534e4b4826bd23ea2c3c533039c82c" +dependencies = [ + "flate2", + "futures-core", + "memchr", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "backtrace" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "base64ct" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "bstr" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c48f0051a4b4c5e0b6d365cd04af53aeaa209e3cc15ec2cdb69e73cc87fbd0dc" +dependencies = [ + "memchr", + "serde", +] + +[[package]] +name = "built" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38d17f4d6e4dc36d1a02fbedc2753a096848e7c1b0772f7654eab8e2c927dd53" +dependencies = [ + "chrono", + "git2", +] + +[[package]] +name = "bumpalo" +version = "3.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" + +[[package]] +name = "bytecount" +version = "0.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1e5f035d16fc623ae5f74981db80a439803888314e3a555fd6f04acd51a3205" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" + +[[package]] +name = "calm_io" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ea0608700fe42d90ec17ad0f86335cf229b67df2e34e7f463e8241ce7b8fa5f" +dependencies = [ + "calmio_filters", +] + +[[package]] +name = "calmio_filters" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "846501f4575cd66766a40bb7ab6d8e960adc7eb49f753c8232bd8e0e09cf6ca2" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "cc" +version = "1.0.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +dependencies = [ + "jobserver", + "libc", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chrono" +version = "0.4.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5bc015644b92d5890fab7489e49d21f879d5c990186827d42ec511919404f38b" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "num-traits", + "windows-targets 0.52.0", +] + +[[package]] +name = "clap" +version = "4.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80c21025abd42669a92efc996ef13cfb2c5c627858421ea58d5c3b331a6c134f" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "458bf1f341769dfcf849846f65dffdf9146daa56bcd2a47cb4e1de9915567c99" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_derive" +version = "4.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "307bc0538d5f0f83b8248db3087aa92fe504e4691294d0c96c0eabc33f47ba47" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "clap_lex" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" + +[[package]] +name = "clap_mangen" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1dd95b5ebb5c1c54581dd6346f3ed6a79a3eef95dd372fc2ac13d535535300e" +dependencies = [ + "clap", + "roff", +] + +[[package]] +name = "color-eyre" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a667583cca8c4f8436db8de46ea8233c42a7d9ae424a82d338f2e4675229204" +dependencies = [ + "backtrace", + "color-spantrace", + "eyre", + "indenter", + "once_cell", + "owo-colors", + "tracing-error", +] + +[[package]] +name = "color-print" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a858372ff14bab9b1b30ea504f2a4bc534582aee3e42ba2d41d2a7baba63d5d" +dependencies = [ + "color-print-proc-macro", +] + +[[package]] +name = "color-print-proc-macro" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57e37866456a721d0a404439a1adae37a31be4e0055590d053dfe6981e05003f" +dependencies = [ + "nom", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "color-spantrace" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd6be1b2a7e382e2b98b43b2adcca6bb0e465af0bdd38123873ae61eb17a72c2" +dependencies = [ + "once_cell", + "owo-colors", + "tracing-core", + "tracing-error", +] + +[[package]] +name = "colorchoice" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" + +[[package]] +name = "confique" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c37945ed2efccb10339a12eea282a5af9ebac77720d088723b2bbbdc44eca964" +dependencies = [ + "confique-macro", + "serde", +] + +[[package]] +name = "confique-macro" +version = "0.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3821efdaaab3c5297054a90201cc3afa2061fc6ba2bc5d2fa558b850a7dabefe" +dependencies = [ + "heck 0.3.3", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "console" +version = "0.15.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb" +dependencies = [ + "encode_unicode", + "lazy_static", + "libc", + "unicode-width", + "windows-sys 0.52.0", +] + +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + +[[package]] +name = "contracts" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1d1429e3bd78171c65aa010eabcdf8f863ba3254728dbfb0ad4b1545beac15c" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" + +[[package]] +name = "cpufeatures" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "ctor" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30d2b3721e861707777e3195b0158f950ae6dc4a27e4d02ff9f67e3eb3de199e" +dependencies = [ + "quote", + "syn 2.0.48", +] + +[[package]] +name = "curve25519-dalek" +version = "4.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a677b8922c94e01bdbb12126b0bc852f00447528dee1782229af9c720c3f348" +dependencies = [ + "cfg-if", + "cpufeatures", + "curve25519-dalek-derive", + "digest", + "fiat-crypto", + "platforms", + "rustc_version", + "subtle", + "zeroize", +] + +[[package]] +name = "curve25519-dalek-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "demand" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11b1d1a3335f59757d77c86d2ede00d6955747da2dbc70e581eb74e4774f0a54" +dependencies = [ + "console", + "once_cell", + "termcolor", +] + +[[package]] +name = "der" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fffa369a668c8af7dbf8b5e56c9f744fbd399949ed171606040001947de40b1c" +dependencies = [ + "const-oid", + "zeroize", +] + +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", +] + +[[package]] +name = "diff" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "dotenvy" +version = "0.15.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" + +[[package]] +name = "duct" +version = "0.13.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4ab5718d1224b63252cd0c6f74f6480f9ffeb117438a2e0f5cf6d9a4798929c" +dependencies = [ + "libc", + "once_cell", + "os_pipe", + "shared_child", +] + +[[package]] +name = "ed25519" +version = "2.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" +dependencies = [ + "pkcs8", + "signature", +] + +[[package]] +name = "ed25519-dalek" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a3daa8e81a3963a60642bcc1f90a670680bd4a77535faa384e9d1c79d620871" +dependencies = [ + "curve25519-dalek", + "ed25519", + "serde", + "sha2", + "signature", + "subtle", + "zeroize", +] + +[[package]] +name = "either" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11157ac094ffbdde99aa67b23417ebdd801842852b500e395a45a9c0aac03e4a" +dependencies = [ + "serde", +] + +[[package]] +name = "encode_unicode" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" + +[[package]] +name = "encoding_rs" +version = "0.8.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "errno" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1" +dependencies = [ + "errno-dragonfly", + "libc", + "winapi", +] + +[[package]] +name = "errno" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "errno-dragonfly" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "exec" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "886b70328cba8871bfc025858e1de4be16b1d5088f2ba50b57816f4210672615" +dependencies = [ + "errno 0.2.8", + "libc", +] + +[[package]] +name = "eyre" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" +dependencies = [ + "indenter", + "once_cell", +] + +[[package]] +name = "fastrand" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" +dependencies = [ + "instant", +] + +[[package]] +name = "fastrand" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" + +[[package]] +name = "fiat-crypto" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1676f435fc1dadde4d03e43f5d62b259e1ce5f40bd4ffb21db2b42ebe59c1382" + +[[package]] +name = "filetime" +version = "0.2.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ee447700ac8aa0b2f2bd7bc4462ad686ba06baa6727ac149a2d6277f0d240fd" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "windows-sys 0.52.0", +] + +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + +[[package]] +name = "flate2" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "fslock" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04412b8935272e3a9bae6f48c7bfff74c2911f60525404edfdd28e49884c3bfb" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "futures-channel" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +dependencies = [ + "futures-core", +] + +[[package]] +name = "futures-core" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" + +[[package]] +name = "futures-io" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" + +[[package]] +name = "futures-sink" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" + +[[package]] +name = "futures-task" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" + +[[package]] +name = "futures-util" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +dependencies = [ + "futures-core", + "futures-io", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "gimli" +version = "0.28.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" + +[[package]] +name = "git2" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b3ba52851e73b46a4c3df1d89343741112003f0f6f13beb0dfac9e457c3fdcd" +dependencies = [ + "bitflags 2.4.2", + "libc", + "libgit2-sys", + "log", + "url", +] + +[[package]] +name = "globset" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1" +dependencies = [ + "aho-corasick", + "bstr", + "log", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "globwalk" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93e3af942408868f6934a7b85134a3230832b9977cf66125df2f9edcfce4ddcc" +dependencies = [ + "bitflags 1.3.2", + "ignore", + "walkdir", +] + +[[package]] +name = "globwalk" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf760ebf69878d9fd8f110c89703d90ce35095324d1f1edcb595c63945ee757" +dependencies = [ + "bitflags 2.4.2", + "ignore", + "walkdir", +] + +[[package]] +name = "h2" +version = "0.3.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb2c4422095b67ee78da96fbb51a4cc413b3b25883c7717ff7ca1ab31022c9c9" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "hashbrown" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" + +[[package]] +name = "heck" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "hermit-abi" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0c62115964e08cb8039170eb33c1d0e2388a256930279edca206fff675f82c3" + +[[package]] +name = "home" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "http" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +dependencies = [ + "bytes", + "http", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + +[[package]] +name = "hyper" +version = "0.14.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" +dependencies = [ + "futures-util", + "http", + "hyper", + "rustls", + "tokio", + "tokio-rustls", +] + +[[package]] +name = "hyper-tls" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +dependencies = [ + "bytes", + "hyper", + "native-tls", + "tokio", + "tokio-native-tls", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "idna" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "ignore" +version = "0.4.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b46810df39e66e925525d6e38ce1e7f6e1d208f72dc39757880fcb66e2c58af1" +dependencies = [ + "crossbeam-deque", + "globset", + "log", + "memchr", + "regex-automata", + "same-file", + "walkdir", + "winapi-util", +] + +[[package]] +name = "indenter" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" + +[[package]] +name = "indexmap" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "824b2ae422412366ba479e8111fd301f7b5faece8149317bb81925979a53f520" +dependencies = [ + "equivalent", + "hashbrown", + "serde", +] + +[[package]] +name = "indicatif" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "763a5a8f45087d6bcea4222e7b72c291a054edf80e4ef6efd2a4979878c7bea3" +dependencies = [ + "console", + "instant", + "number_prefix", + "portable-atomic", + "unicode-segmentation", + "unicode-width", +] + +[[package]] +name = "indoc" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e186cfbae8084e513daff4240b4797e342f988cecda4fb6c939150f96315fd8" + +[[package]] +name = "insta" +version = "1.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d64600be34b2fcfc267740a243fa7744441bb4947a619ac4e5bb6507f35fbfc" +dependencies = [ + "console", + "lazy_static", + "linked-hash-map", + "regex", + "serde", + "similar", + "yaml-rust", +] + +[[package]] +name = "instant" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "ipnet" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" + +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" + +[[package]] +name = "jobserver" +version = "0.1.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab46a6e9526ddef3ae7f787c06f0f2600639ba80ea3eade3d8e670a2230f51d6" +dependencies = [ + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.68" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "406cda4b368d531c842222cf9d2600a9a4acce8d29423695379c6868a143a9ee" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "kdl" +version = "4.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "062c875482ccb676fd40c804a40e3824d4464c18c364547456d1c8e8e951ae47" +dependencies = [ + "miette", + "nom", + "thiserror", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "libc" +version = "0.2.153" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" + +[[package]] +name = "libgit2-sys" +version = "0.16.2+1.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee4126d8b4ee5c9d9ea891dd875cfdc1e9d0950437179104b183d7d8a74d24e8" +dependencies = [ + "cc", + "libc", + "libz-sys", + "pkg-config", +] + +[[package]] +name = "libz-sys" +version = "1.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "037731f5d3aaa87a5675e895b63ddff1a87624bc29f77004ea829809654e48f6" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "linked-hash-map" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" + +[[package]] +name = "linux-raw-sys" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" + +[[package]] +name = "log" +version = "0.4.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" + +[[package]] +name = "memchr" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" + +[[package]] +name = "miette" +version = "5.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59bb584eaeeab6bd0226ccf3509a69d7936d148cf3d036ad350abe35e8c6856e" +dependencies = [ + "miette-derive", + "once_cell", + "thiserror", + "unicode-width", +] + +[[package]] +name = "miette-derive" +version = "5.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49e7bc1560b95a3c4a25d03de42fe76ca718ab92d1a22a55b9b4cf67b3ae635c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" +dependencies = [ + "adler", +] + +[[package]] +name = "mio" +version = "0.8.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" +dependencies = [ + "libc", + "wasi", + "windows-sys 0.48.0", +] + +[[package]] +name = "mise" +version = "2024.2.13" +dependencies = [ + "base64", + "built", + "calm_io", + "chrono", + "clap", + "clap_mangen", + "color-eyre", + "color-print", + "confique", + "console", + "contracts", + "ctor", + "demand", + "dotenvy", + "duct", + "either", + "exec", + "eyre", + "filetime", + "flate2", + "fslock", + "globset", + "globwalk 0.9.1", + "home", + "humantime", + "indenter", + "indexmap", + "indicatif", + "indoc", + "insta", + "itertools", + "log", + "num_cpus", + "once_cell", + "openssl", + "path-absolutize", + "petgraph", + "pretty_assertions", + "rand", + "rayon", + "regex", + "reqwest", + "rmp-serde", + "self_update", + "serde", + "serde_derive", + "serde_json", + "sha2", + "shell-escape", + "shell-words", + "signal-hook", + "simplelog", + "strum", + "sys-info", + "tabled", + "tar", + "tempfile", + "tera", + "terminal_size", + "thiserror", + "toml", + "toml_edit", + "url", + "usage-lib", + "versions", + "walkdir", + "which", + "zip", +] + +[[package]] +name = "native-tls" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" +dependencies = [ + "lazy_static", + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "num-traits" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "num_threads" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44" +dependencies = [ + "libc", +] + +[[package]] +name = "number_prefix" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" + +[[package]] +name = "object" +version = "0.32.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "openssl" +version = "0.10.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15c9d69dd87a29568d4d017cfe8ec518706046a05184e5aea92d0af890b803c8" +dependencies = [ + "bitflags 2.4.2", + "cfg-if", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "openssl-sys" +version = "0.9.99" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22e1bf214306098e4832460f797824c05d25aacdf896f64a985fb0fd992454ae" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "os_pipe" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57119c3b893986491ec9aa85056780d3a0f3cf4da7cc09dd3650dbd6c6738fb9" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "owo-colors" +version = "3.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f" + +[[package]] +name = "papergrid" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ad43c07024ef767f9160710b3a6773976194758c7919b17e63b863db0bdf7fb" +dependencies = [ + "ansi-str", + "ansitok", + "bytecount", + "fnv", + "unicode-width", +] + +[[package]] +name = "paste" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" + +[[package]] +name = "path-absolutize" +version = "3.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4af381fe79fa195b4909485d99f73a80792331df0625188e707854f0b3383f5" +dependencies = [ + "path-dedot", +] + +[[package]] +name = "path-dedot" +version = "3.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07ba0ad7e047712414213ff67533e6dd477af0a4e1d14fb52343e53d30ea9397" +dependencies = [ + "once_cell", +] + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "pest" +version = "2.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "219c0dcc30b6a27553f9cc242972b67f75b60eb0db71f0b5462f38b058c41546" +dependencies = [ + "memchr", + "thiserror", + "ucd-trie", +] + +[[package]] +name = "pest_derive" +version = "2.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22e1288dbd7786462961e69bfd4df7848c1e37e8b74303dbdab82c3a9cdd2809" +dependencies = [ + "pest", + "pest_generator", +] + +[[package]] +name = "pest_generator" +version = "2.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1381c29a877c6d34b8c176e734f35d7f7f5b3adaefe940cb4d1bb7af94678e2e" +dependencies = [ + "pest", + "pest_meta", + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "pest_meta" +version = "2.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0934d6907f148c22a3acbda520c7eed243ad7487a30f51f6ce52b58b7077a8a" +dependencies = [ + "once_cell", + "pest", + "sha2", +] + +[[package]] +name = "petgraph" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" +dependencies = [ + "fixedbitset", + "indexmap", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + +[[package]] +name = "pkg-config" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2900ede94e305130c13ddd391e0ab7cbaeb783945ae07a279c268cb05109c6cb" + +[[package]] +name = "platforms" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "626dec3cac7cc0e1577a2ec3fc496277ec2baa084bebad95bb6fdbfae235f84c" + +[[package]] +name = "portable-atomic" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7170ef9988bc169ba16dd36a7fa041e5c4cbeb6a35b76d4c03daded371eae7c0" + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "pretty_assertions" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af7cee1a6c8a5b9208b3cb1061f10c0cb689087b3d8ce85fb9d2dd7a29b6ba66" +dependencies = [ + "diff", + "yansi", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro2" +version = "1.0.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quick-xml" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11bafc859c6815fbaffbbbf4229ecb767ac913fecb27f9ad4343662e9ef099ea" +dependencies = [ + "memchr", +] + +[[package]] +name = "quote" +version = "1.0.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "rayon" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa7237101a77a10773db45d62004a272517633fbcc3df19d96455ede1122e051" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "redox_syscall" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "regex" +version = "1.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5bb987efffd3c6d0d8f5f89510bb458559eab11e4f869acb20bf845e016259cd" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" + +[[package]] +name = "reqwest" +version = "0.11.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6920094eb85afde5e4a138be3f2de8bbdf28000f0029e72c45025a56b042251" +dependencies = [ + "async-compression", + "base64", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "hyper", + "hyper-rustls", + "hyper-tls", + "ipnet", + "js-sys", + "log", + "mime", + "native-tls", + "once_cell", + "percent-encoding", + "pin-project-lite", + "rustls", + "rustls-native-certs", + "rustls-pemfile", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "system-configuration", + "tokio", + "tokio-native-tls", + "tokio-rustls", + "tokio-util", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "webpki-roots", + "winreg", +] + +[[package]] +name = "ring" +version = "0.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "688c63d65483050968b2a8937f7995f443e27041a0f7700aa59b0822aedebb74" +dependencies = [ + "cc", + "getrandom", + "libc", + "spin", + "untrusted", + "windows-sys 0.48.0", +] + +[[package]] +name = "rmp" +version = "0.8.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f9860a6cc38ed1da53456442089b4dfa35e7cedaa326df63017af88385e6b20" +dependencies = [ + "byteorder", + "num-traits", + "paste", +] + +[[package]] +name = "rmp-serde" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bffea85eea980d8a74453e5d02a8d93028f3c34725de143085a844ebe953258a" +dependencies = [ + "byteorder", + "rmp", + "serde", +] + +[[package]] +name = "roff" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b833d8d034ea094b1ea68aa6d5c740e0d04bad9d16568d08ba6f76823a114316" + +[[package]] +name = "rustc-demangle" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + +[[package]] +name = "rustix" +version = "0.38.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ea3e1a662af26cd7a3ba09c0297a31af215563ecf42817c98df621387f4e949" +dependencies = [ + "bitflags 2.4.2", + "errno 0.3.8", + "libc", + "linux-raw-sys", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustls" +version = "0.21.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9d5a6813c0759e4609cd494e8e725babae6a2ca7b62a5536a13daaec6fcb7ba" +dependencies = [ + "log", + "ring", + "rustls-webpki", + "sct", +] + +[[package]] +name = "rustls-native-certs" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" +dependencies = [ + "openssl-probe", + "rustls-pemfile", + "schannel", + "security-framework", +] + +[[package]] +name = "rustls-pemfile" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +dependencies = [ + "base64", +] + +[[package]] +name = "rustls-webpki" +version = "0.101.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "rustversion" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" + +[[package]] +name = "ryu" +version = "1.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "schannel" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "sct" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "security-framework" +version = "2.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "self-replace" +version = "1.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "525db198616b2bcd0f245daf7bfd8130222f7ee6af9ff9984c19a61bf1160c55" +dependencies = [ + "fastrand 1.9.0", + "tempfile", + "windows-sys 0.48.0", +] + +[[package]] +name = "self_update" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a34ad8e4a86884ab42e9b8690e9343abdcfe5fa38a0318cfe1565ba9ad437b4" +dependencies = [ + "either", + "flate2", + "hyper", + "indicatif", + "log", + "quick-xml", + "regex", + "reqwest", + "self-replace", + "semver", + "serde_json", + "tar", + "tempfile", + "urlencoding", + "zipsign-api", +] + +[[package]] +name = "semver" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b97ed7a9823b74f99c7742f5336af7be5ecd3eeafcb1507d1fa93347b1d589b0" + +[[package]] +name = "serde" +version = "1.0.196" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "870026e60fa08c69f064aa766c10f10b1d62db9ccd4d0abb206472bee0ce3b32" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.196" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33c85360c95e7d137454dc81d9a4ed2b8efd8fbe19cee57357b32b9771fccb67" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "serde_json" +version = "1.0.113" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69801b70b1c3dac963ecb03a364ba0ceda9cf60c71cfe475e99864759c8b8a79" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_spanned" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shared_child" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0d94659ad3c2137fef23ae75b03d5241d633f8acded53d672decfa0e6e0caef" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "shell-escape" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45bb67a18fa91266cc7807181f62f9178a6873bfad7dc788c42e6430db40184f" + +[[package]] +name = "shell-words" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde" + +[[package]] +name = "signal-hook" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801" +dependencies = [ + "libc", + "signal-hook-registry", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" +dependencies = [ + "libc", +] + +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest", + "rand_core", +] + +[[package]] +name = "similar" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32fea41aca09ee824cc9724996433064c89f7777e60762749a4170a14abbfa21" + +[[package]] +name = "simplelog" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acee08041c5de3d5048c8b3f6f13fafb3026b24ba43c6a695a0c76179b844369" +dependencies = [ + "log", + "termcolor", + "time", +] + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "socket2" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" +dependencies = [ + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", +] + +[[package]] +name = "strsim" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ee073c9e4cd00e28217186dbe12796d692868f432bf2e97ee73bed0c56dfa01" + +[[package]] +name = "strum" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "723b93e8addf9aa965ebe2d11da6d7540fa2283fcea14b3371ff055f7ba13f5f" +dependencies = [ + "strum_macros", +] + +[[package]] +name = "strum_macros" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a3417fc93d76740d974a01654a09777cb500428cc874ca9f45edfe0c4d4cd18" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.48", +] + +[[package]] +name = "subtle" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.48" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + +[[package]] +name = "sys-info" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b3a0d0aba8bf96a0e1ddfdc352fc53b3df7f39318c71854910c3c4b024ae52c" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "tabled" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c998b0c8b921495196a48aabaf1901ff28be0760136e31604f7967b0792050e" +dependencies = [ + "ansi-str", + "ansitok", + "papergrid", + "tabled_derive", + "unicode-width", +] + +[[package]] +name = "tabled_derive" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c138f99377e5d653a371cdad263615634cfc8467685dfe8e73e2b8e98f44b17" +dependencies = [ + "heck 0.4.1", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "tar" +version = "0.4.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b16afcea1f22891c49a00c751c7b63b2233284064f11a200fc624137c51e2ddb" +dependencies = [ + "filetime", + "libc", + "xattr", +] + +[[package]] +name = "tempfile" +version = "3.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a365e8cd18e44762ef95d87f284f4b5cd04107fec2ff3052bd6a3e6069669e67" +dependencies = [ + "cfg-if", + "fastrand 2.0.1", + "rustix", + "windows-sys 0.52.0", +] + +[[package]] +name = "tera" +version = "1.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "970dff17c11e884a4a09bc76e3a17ef71e01bb13447a11e85226e254fe6d10b8" +dependencies = [ + "globwalk 0.8.1", + "lazy_static", + "pest", + "pest_derive", + "regex", + "serde", + "serde_json", + "unic-segment", +] + +[[package]] +name = "termcolor" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "terminal_size" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21bebf2b7c9e0a515f6e0f8c51dc0f8e4696391e6f1ff30379559f8365fb0df7" +dependencies = [ + "rustix", + "windows-sys 0.48.0", +] + +[[package]] +name = "thiserror" +version = "1.0.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "thread_local" +version = "1.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" +dependencies = [ + "cfg-if", + "once_cell", +] + +[[package]] +name = "time" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8248b6521bb14bc45b4067159b9b6ad792e2d6d754d6c41fb50e29fefe38749" +dependencies = [ + "deranged", + "itoa", + "libc", + "num-conv", + "num_threads", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ba3a3ef41e6672a2f0f001392bb5dcd3ff0a9992d618ca761a11c3121547774" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tinyvec" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.36.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61285f6515fa018fb2d1e46eb21223fff441ee8db5d0f1435e8ab4f5cdb80931" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "num_cpus", + "pin-project-lite", + "socket2", + "windows-sys 0.48.0", +] + +[[package]] +name = "tokio-native-tls" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +dependencies = [ + "native-tls", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +dependencies = [ + "rustls", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", + "tracing", +] + +[[package]] +name = "toml" +version = "0.8.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a9aad4a3066010876e8dcf5a8a06e70a558751117a145c6ce2b82c2e2054290" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit", +] + +[[package]] +name = "toml_datetime" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.22.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c9ffdf896f8daaabf9b66ba8e77ea1ed5ed0f72821b398aba62352e95062951" +dependencies = [ + "indexmap", + "serde", + "serde_spanned", + "toml_datetime", + "winnow", +] + +[[package]] +name = "tower-service" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "pin-project-lite", + "tracing-core", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-error" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d686ec1c0f384b1277f097b2f279a2ecc11afe8c133c1aabf036a27cb4cd206e" +dependencies = [ + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +dependencies = [ + "sharded-slab", + "thread_local", + "tracing-core", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "ucd-trie" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9" + +[[package]] +name = "unic-char-property" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221" +dependencies = [ + "unic-char-range", +] + +[[package]] +name = "unic-char-range" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc" + +[[package]] +name = "unic-common" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc" + +[[package]] +name = "unic-segment" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4ed5d26be57f84f176157270c112ef57b86debac9cd21daaabbe56db0f88f23" +dependencies = [ + "unic-ucd-segment", +] + +[[package]] +name = "unic-ucd-segment" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2079c122a62205b421f499da10f3ee0f7697f012f55b675e002483c73ea34700" +dependencies = [ + "unic-char-property", + "unic-char-range", + "unic-ucd-version", +] + +[[package]] +name = "unic-ucd-version" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4" +dependencies = [ + "unic-common", +] + +[[package]] +name = "unicode-bidi" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unicode-normalization" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-segmentation" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" + +[[package]] +name = "unicode-width" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "url" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", +] + +[[package]] +name = "urlencoding" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" + +[[package]] +name = "usage-lib" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a1a69612024745164416708bf3ee8c3c8ed131cdaa698fd7b8855052d27640f" +dependencies = [ + "clap", + "heck 0.4.1", + "indexmap", + "itertools", + "kdl", + "log", + "miette", + "once_cell", + "serde", + "shell-escape", + "strum", + "thiserror", + "xx", +] + +[[package]] +name = "utf8parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "versions" +version = "6.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f37ff4899935ba747849dd9eeb27c0bdd0da0210236704b7e4681a6c7bd6f9c6" +dependencies = [ + "itertools", + "nom", + "serde", +] + +[[package]] +name = "vte" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6cbce692ab4ca2f1f3047fcf732430249c0e971bfdd2b234cf2c47ad93af5983" +dependencies = [ + "arrayvec", + "utf8parse", + "vte_generate_state_changes", +] + +[[package]] +name = "vte_generate_state_changes" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d257817081c7dffcdbab24b9e62d2def62e2ff7d00b1c20062551e6cccc145ff" +dependencies = [ + "proc-macro2", + "quote", +] + +[[package]] +name = "walkdir" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1e124130aee3fb58c5bdd6b639a0509486b0338acaaae0c84a5124b0f588b7f" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9e7e1900c352b609c8488ad12639a311045f40a35491fb69ba8c12f758af70b" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.48", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877b9c3f61ceea0e56331985743b13f3d25c406a7098d45180fb5f09bc19ed97" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b30af9e2d358182b5c7449424f017eba305ed32a7010509ede96cdc4696c46ed" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "642f325be6301eb8107a83d12a8ac6c1e1c54345a7ef1a9261962dfefda09e66" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f186bd2dcf04330886ce82d6f33dd75a7bfcf69ecf5763b89fcde53b6ac9838" + +[[package]] +name = "web-sys" +version = "0.3.68" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96565907687f7aceb35bc5fc03770a8a0471d82e479f25832f54a0e3f4b28446" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webpki-roots" +version = "0.25.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" + +[[package]] +name = "which" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fa5e0c10bf77f44aac573e498d1a82d5fbd5e91f6fc0a99e7be4b38e85e101c" +dependencies = [ + "either", + "home", + "once_cell", + "rustix", + "windows-sys 0.52.0", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" +dependencies = [ + "winapi", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.0", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.0", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" +dependencies = [ + "windows_aarch64_gnullvm 0.52.0", + "windows_aarch64_msvc 0.52.0", + "windows_i686_gnu 0.52.0", + "windows_i686_msvc 0.52.0", + "windows_x86_64_gnu 0.52.0", + "windows_x86_64_gnullvm 0.52.0", + "windows_x86_64_msvc 0.52.0", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" + +[[package]] +name = "winnow" +version = "0.5.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5389a154b01683d28c77f8f68f49dea75f0a4da32557a58f68ee51ebba472d29" +dependencies = [ + "memchr", +] + +[[package]] +name = "winreg" +version = "0.50.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + +[[package]] +name = "xattr" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8da84f1a25939b27f6820d92aed108f83ff920fdf11a7b19366c27c4cda81d4f" +dependencies = [ + "libc", + "linux-raw-sys", + "rustix", +] + +[[package]] +name = "xx" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6c82f8a59dddf27110090af5ef62f75f44d20d15d15b46113e5aee214ae5fd9" +dependencies = [ + "log", + "miette", + "regex", + "thiserror", +] + +[[package]] +name = "yaml-rust" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85" +dependencies = [ + "linked-hash-map", +] + +[[package]] +name = "yansi" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" + +[[package]] +name = "zeroize" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" + +[[package]] +name = "zip" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261" +dependencies = [ + "byteorder", + "crc32fast", + "crossbeam-utils", + "flate2", +] + +[[package]] +name = "zipsign-api" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ba5aa1827d6b1a35a29b3413ec69ce5f796e4d897e3e5b38f461bef41d225ea" +dependencies = [ + "base64", + "ed25519-dalek", + "thiserror", +] diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 000000000..8a2a88c7a --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,154 @@ +[package] +name = "mise" +version = "2024.2.13" +edition = "2021" +description = "The front-end to your dev env" +authors = ["Jeff Dickey (@jdx)"] +homepage = "https://mise.jdx.dev" +documentation = "https://mise.jdx.dev" +repository = "https://github.com/jdx/mise" +readme = "README.md" +license = "MIT" +keywords = ["mise"] +categories = ["command-line-utilities"] +include = [ + "src/**/*.rs", + "src/plugins/core/assets/**", + "src/assets/**", + "/completions/*", + "/Cargo.lock", + "/LICENSE", + "/README.md", + "/build.rs", + "/zipsign.pub", +] +rust-version = "1.74.0" +build = "build.rs" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[[bin]] +name = "mise" +path = "src/main.rs" + +#[[bench]] +#name = "config_bench" +#harness = false + +[profile.release] +lto = true + +[dependencies] +base64 = "0.21.7" +calm_io = "0.1.1" +chrono = { version = "0.4.34", default-features = false, features = ["std", "clock"] } +clap = { version = "4.5.0", features = ["env", "derive", "string"] } +clap_mangen = { version = "0.2.20", optional = true } +color-eyre = "0.6.2" +color-print = "0.3.5" +confique = { version = "0.2.5", default-features = false } +console = "0.15.8" +contracts = "0.6.3" +demand = "1.0.1" +dotenvy = "0.15.7" +duct = "0.13.7" +either = { version = "1.10.0", features = ["serde"] } +eyre = "0.6.12" +filetime = "0.2.23" +flate2 = "1.0.28" +fslock = "0.2.1" +globset = "0.4.14" +globwalk = "0.9.1" +home = "0.5.9" +humantime = "2.1.0" +indenter = "0.3.3" +indexmap = { version = "2.2.2", features = ["serde"] } +indicatif = { version = "0.17.8", features = ["default", "improved_unicode"] } +indoc = "2.0.4" +itertools = "0.12.1" +log = "0.4.20" +num_cpus = "1.16.0" +once_cell = "1.19.0" +openssl = { version = "0.10.63", optional = true } +path-absolutize = "3.1.1" +petgraph = "0.6.4" +rand = "0.8.5" +rayon = "1.8.1" +regex = "1.10.3" +reqwest = { version = "0.11.24", default-features = false, features = ["blocking", "json", "gzip"] } +rmp-serde = "1.1.2" +self_update = { version = "0.39.0", default-features = false, features = [ + "archive-tar", + "compression-flate2", + "signatures", +] } +serde = "1.0.196" +serde_derive = "1.0.196" +serde_json = { version = "1.0.113", features = [] } +sha2 = "0.10.8" +shell-escape = "0.1.5" +shell-words = "1.1.0" +signal-hook = "0.3.17" +simplelog = { version = "0.12.1" } +strum = { version = "0.26.1", features = ["derive"] } +sys-info = "0.9.1" +tabled = { version = "0.15.0", features = ["ansi"] } +tar = "0.4.40" +tempfile = "3.10.0" +tera = { version = "1.19.1", default-features = false } +terminal_size = "0.3.0" +thiserror = "1.0.56" +toml = { version = "0.8.10", features = ["parse"] } +toml_edit = { version = "0.22.4", features = ["parse"] } +url = "2.5.0" +usage-lib = { version="0.1.8", features = ["clap"] } +versions = { version = "6.1.0" , features=["serde"]} +walkdir = "2.4.0" +which = "6.0.0" +zip = { version = "0.6.6", default-features = false, features = ["deflate"] } + +[target.'cfg(unix)'.dependencies] +exec = "0.3.1" + +[build-dependencies] +built = { version = "0.7.1", features = ["chrono", "git2"] } + +[dev-dependencies] +ctor = "0.2.6" +insta = { version = "1.34.0", features = ["filters", "json"] } +pretty_assertions = "1.4.0" + +[features] +default = ["native-tls"] +native-tls = ["reqwest/native-tls"] +rustls = ["reqwest/rustls-tls", "self_update/rustls"] +rustls-native-roots = ["reqwest/rustls-tls-native-roots", "self_update/rustls"] + +[package.metadata.release] +allow-branch = ["main"] +sign-tag = true +sign-commit = true +pre-release-hook = "./scripts/pre-release-hook.sh" +pre-release-replacements = [ + { file = "README.md", search = "^mise [0-9]+.[0-9]+.[0-9]+(-rc.[0-9]+)?$", replace = "mise {{version}}", exactly = 1 }, + { file = "packaging/rpm/mise.spec", search = "^Version: [0-9]+.[0-9]+.[0-9]+(-rc.[0-9]+)?$", replace = "Version: {{version}}", exactly = 1 }, + { file = "default.nix", search = "version = \"[0-9]+.[0-9]+.[0-9]+(-rc.[0-9]+)?\";$", replace = "version = \"{{version}}\";", exactly = 1 }, +] + +[package.metadata.binstall] +bin-dir = "mise/bin/mise" +[package.metadata.binstall.overrides.aarch64-apple-darwin] +pkg-url = "{ repo }/releases/download/v{ version }/mise-v{version}-macos-arm64{ archive-suffix }" +[package.metadata.binstall.overrides.x86_64-apple-darwin] +pkg-url = "{ repo }/releases/download/v{ version }/mise-v{version}-macos-x64{ archive-suffix }" +[package.metadata.binstall.overrides.aarch64-unknown-linux-gnu] +pkg-url = "{ repo }/releases/download/v{ version }/mise-v{version}-linux-arm64{ archive-suffix }" +[package.metadata.binstall.overrides.x86_64-unknown-linux-gnu] +pkg-url = "{ repo }/releases/download/v{ version }/mise-v{version}-linux-x64{ archive-suffix }" +[package.metadata.binstall.overrides.armv7-unknown-linux-gnueabihf] +pkg-url = "{ repo }/releases/download/v{ version }/mise-v{version}-linux-armv7{ archive-suffix }" +[package.metadata.binstall.overrides.armv6-unknown-linux-gnueabihf] +pkg-url = "{ repo }/releases/download/v{ version }/mise-v{version}-linux-armv6{ archive-suffix }" + +[package.metadata.cargo-machete] +ignored = ["built", "openssl"] diff --git a/Dockerfile b/Dockerfile new file mode 120000 index 000000000..42899face --- /dev/null +++ b/Dockerfile @@ -0,0 +1 @@ +./packaging/mise/Dockerfile \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 000000000..f5997f2a5 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Jeff Dickey + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 000000000..b25609fd7 --- /dev/null +++ b/README.md @@ -0,0 +1,63 @@ +
+

mise-en-place

+ + + + +Crates.io +GitHub +GitHub Workflow Status +Codacy coverage (branch) +Discord +

The front-end to your dev env. (formerly called "rtx")

+
+ +## What is it? + +* Like [asdf](https://asdf-vm.com) (or [nvm](https://github.com/nvm-sh/nvm) or [pyenv](https://github.com/pyenv/pyenv) but for any language) it manages [dev tools](https://mise.jdx.dev/dev-tools/) like node, python, cmake, terraform, and [hundreds more](https://mise.jdx.dev/plugins.html). +* Like [direnv](https://github.com/direnv/direnv) it manages [environment variables](https://mise.jdx.dev/environments.html) for different project directories. +* Like [make](https://www.gnu.org/software/make/manual/make.html) it manages [tasks](https://mise.jdx.dev/tasks/) used to build and test projects. + +## Migrating from rtx + +mise will attempt to migrate most of its internal files making the transition as easy as possible. That said, it's worth reading the [migration guide](https://mise.jdx.dev/rtx.html) because there are a few things to watch out for. + +## 30 Second Demo + +The following shows using mise to install different versions +of [node](https://nodejs.org). +Note that calling `which node` gives us a real path to node, not a shim. + +[![demo](./docs/demo.gif)](./docs/demo.gif) + +## Quickstart + +Install mise (other methods [here](https://mise.jdx.dev/getting-started.html)): + +```sh-session +$ curl https://mise.run | sh +$ ~/.local/bin/mise --version +mise 2024.2.13 +``` + +Hook mise into your shell (pick the right one for your shell): + +```sh-session +# note this assumes mise is located at ~/.local/bin/mise +# which is what https://mise.run does by default +echo 'eval "$(~/.local/bin/mise activate bash)"' >> ~/.bashrc +echo 'eval "$(~/.local/bin/mise activate zsh)"' >> ~/.zshrc +echo '~/.local/bin/mise activate fish | source' >> ~/.config/fish/config.fish +``` + +Install a runtime and set it as the global default: + +```sh-session +$ mise use --global node@20 +$ node -v +v20.0.0 +``` + +## Full Documentation + +See [mise.jdx.dev](https://mise.jdx.dev) diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 000000000..ef0505e7c --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,128 @@ +# Security Policy + +mise is a convenient tool to manage developer tools, however its model is also open to potential risks. The following +are major areas of mise and the security considerations currently being made and what needs to be made in the future. + +Please open a ticket or send me an email if you have thoughts on how mise can be made more secure. + +## Core CLI Security + +Development of the "core CLI" is done on jdx/mise which only a single developer (me, @jdx) has access to. +Other contributors may only submit contributions via public Pull Requests. Reducing the number +of developers with access down to 1 minimizes the chance of keys being leaked. + +This does create a [bus factor](https://en.wikipedia.org/wiki/Bus_factor) problem. If I suddenly died one day +or otherwise wasn't able to continue development at all there are some successors listed in my GitHub account +that can take over my account if need be. + +The dependencies in the core CLI are a security vector. I've tried to be judicious about what dependencies make it into +the project. I only select dependencies with broad usage across the Rust community where possible. +I'm open to PRs or suggestions on reducing dependency count even at the cost of functionality because it will make +mise more secure. + +## mise.jdx.dev + +mise.jdx.dev is the asset host for mise. It's used to host precompiled mise CLI binaries, and hosts a "[VERSION](https://mise.jdx.dev/VERSION)" +which mise uses to occasionally check for a new version being released. Everything hosted there uses a single +vendor to reduce surface area. + +## mise plugins + +Plugins are by far the biggest source of potential problems and where the most work still needs to be made. + +There are 3 types of plugins: + +- [core](https://github.com/jdx/mise/issues/236) - plugins that are hardcoded into the CLI. + These are official plugins for the most common languages written in Rust. +- community - plugins in the [mise-plugins](https://github.com/mise-plugins) GitHub Org. [See below](#mise-plugins-github-org) for details. +- external - plugins owned by other parties, these include plugins in the shorthand registry. These are no more + secure than installing any random tool from the internet. These receive a warning dialog when installed in mise. + +Just because a plugin is inside of the shorthand registry (so you can run `mise install foo@`, does not mean +I vouch for it. I have no idea who almost anyone that builds those plugins are. If it's coming from the mise-plugins +GitHub org, you can have more trust in it. (See the owners with `mise plugins ls-remote --urls`). + +Over time we should be able to move more plugins into being fully maintained by mise. I plan to add an +`MISE_PARANOID=1` env var that, when set, will make changes to make mise behave as securely as possible +(e.g.: only using core/mise-plugins plugins, only allowing plugins that use GPG verification of assets). + +## [mise-plugins](https://github.com/mise-plugins) GitHub org + +This is similar to but with the advantage of being more secure by keeping the +contributor count minimal—currently only @jdx will be allowed to merge PRs. For this reason, plugins using this +organization will not receive a confirmation warning dialog when installed with mise as they've been vetted by a +trusted source. + +If you're a plugin maintainer that would like to move your repo to this org [please let me know](https://github.com/orgs/mise-plugins/discussions). +Plugins can either retain compatibility with asdf or use mise specific functionality—that's up to you. asdf-compatible plugins should use "asdf-" as the prefix and "mise-" prefixed-plugins denote mise-only compatibility. + +## Supported Versions + +The only supported version is the most recent one. + +## Reporting a Vulnerability + +Send an email to security@ + +If you want, you may encrypt the message with GPG: + +
+ @jdx's public key + +``` +-----BEGIN PGP PUBLIC KEY BLOCK----- + +mQINBGQfPjUBEADAtjLxcoJlHYNwvN8xYEai/waWZpnKvNWP86kYuX5xqb/GR1wZ +TQ4usQPcpTj60XQaF3jUwtW8/1PH/gQv0516qAIlqHVvvMyGD/u2iwr+U8JtIGWf +B87mL2aMvg6GqXoR3dgCtYkHd839Z0wVFOvgkzWdx3jOWE73KQpN0PeunBNsCw/K +4wR/gEBNfiAbi0i3RIbpSKHTtRZ1e/1+1o2jxz48a/IdCzFzN9zOplfhASo0C/AB +PSjlFnvlB5jjWqyGln6ycunEn0dhdzi7f1MdfNmj19tqqQYKYIy3AOFiRNqKLlWo +dOPTJMYdCD8CkLh5GTOWq0xZZ/s5bHiw2KuQxyZsm2eo4MH7pOEHuH1yFjyrbli7 +/8/iLfaGx89aK7Krt+dd60XMPQh8rGjClVdC8GQS8XMjerjdk5g22dd7s5n7shGm +gZalidw3CFppO2po1YR8yNc5UJz7gzGCZsQfyC1Ao376BFM/cXlnje6RG2Unsy8O +uKE2O5vFOmppoWmaM5KcCFLa7NP2Wu8Y8CaoDZaBZeGFHffvxSKh/J69ECVvTM91 +Xn8B0COiiqkYKpqNf+KgGXzQvj3ABKG0Q27T5VUHW3F1jdPKjbMmdbqorRDr7v0a +PZSwqrlTenZVCVdEsRHsHevIZ6+neZ3hHEk66EtaG45Qkna2EahhS+IPGQARAQAB +tCBKZWZmcmV5IERpY2tleSA8Z3BnQGpkeGNvZGUuY29tPokCVAQTAQgAPhYhBDFB +ttCiFJlyWolR/FCs4PPr5+BHBQJkHz41AhsDBQkHhh9cBQsJCAcCBhUKCQgLAgQW +AgMBAh4BAheAAAoJEFCs4PPr5+BHUsIP/0AL/lTNZ22yynIE7EXwWsLTolrNHiaz +79s/MH04i1IazkElvY7MVL0iTqozYnSaEJ7BhtNPUkoCX79cLHKv/nD9CJF8qwcK +GgYCirXGEol30P1s2K2c1Rr4wcul+SamQ2vHrBes+/0ksuvK9yAZV6y8nWCukO4Z +5B4DVHuvQ0UmJ6tWf53sFpRnLWB+8VB1n931uZXeHjxo2s5/x3E2FknH6/l8/+Ey +d9T44RzlOwkZYTrw08O1PLLNGkOxdD3sGi7Q/JSPHmlhBBqpnqxT4wOFJQnluJji +ed4qlB4oXa2CM2VkbSdmQ6ls67Qju0/LKsYwd7QNpo/fODXR3MLIQDUo9ZzKmvgB +r9L2BQDz4vOKdYSm2MLyGsB6W9GsVHVjnGnZWhiKOOH1jxnI2y6btJZNQYemMtLo +Y7DlTogRaq1h62WHkm3cbPqXYpfEBH9AJRAZgyUbc703BJfr5i8epoRajP/jxTVi +PtIak2/kJu6adxJ+nutz+1ycc8XBlfAnSTj87wKXM0nsboK3Kyd5cZ2m7CFF7tIY +y/Ti7jVbVNMH6OugoCLYXnINIW3QFBKhM7/uouukN3ww5zJ58w0mqkySzxiY4jr8 +OOLW9oARmq4gvevRmnd97hmmu1h0A3TPOzbr97zF8xCjKkf04IpdfMPEccNg1jWK +QEqn+1m3XNdDuQINBGQfPjUBEACu7zv4/gNxUDCwbnkkK7wQL3sX7yZKkhGZgpXR +H9h+mAf/DlhKo8yqJiR0C6z+QcsSM1a3RvHHBdRnsun/jEzScP2o5ShQKLCq68qb +JlSh/FSQQTYTEjC/t4ccMLIYbsccJd+Xg9cRuqGN/jE/SWNwUGrf2FuKQQkTTcrN +tiHwXHLxUlIHYckyKq4UggL8icaONSpwAWLEwi0u2muMMZHzFnHT33W8+iFHmjCd +osHZaArWXiQlYQFeoxvnT2hkUK/uQC7ZANup4ebuQr4ZLgo7kWUOKlwpucNFscFy +oIVuNeVYq0ijz1urNMnzGF6Pz0SVjr91lyHGmAdODpYz6vZZ5ipDDrXXDHTyET5c +j8zUYkbbtxEaE0+MpAN8wrtxmtXt3QMV4MfncJzvKmhFcaRFjvgG+PtC4cxVsmLK +BD9WKxni0e1jcWPtoRw5LvAinqgTzCF4iw9rUwITWBVg+T2d6kTokTW7J2mrGNSp +WiE/Gq2+3kzs0BOIPc9h2tzTkhHbsZz9ZTFXLzutxKzfamBVGr0B7MR9wnOyVgQW +cohmCEhcEIgKiPnmcobXiWE/NpvbtyE7KBVXVFEDvIdpWUf9OaUZNau5gwg6MJRF +zdWLj2Y7LYK1NbmJWrzg8V3KeBCMxKlVS463DPWMQzfmpMYYravpW1gkekXqxMP6 +gBvRfwARAQABiQI8BBgBCAAmFiEEMUG20KIUmXJaiVH8UKzg8+vn4EcFAmQfPjUC +GwwFCQeGH1wACgkQUKzg8+vn4EdAbxAAr4SMo8VvAhFlJd/WQlifgREj0On6UFee +YCKNA8/1cJnXCxb+kQJXLCcYBHGq07NV9OkzCZBLiGM13f0DF/YfcDbUq1ISivoo +JwTUII48Q1aQseWc3JxkgLPi9CjxE48ynEeFi582Bsz0auzUGk1dbVfJbbpDKd83 +/vZImxN+sfa9no/7l5wsNVIOhPSQrv3BDjMAuqkUIZHNYsp6i3Fo4cj7e6qy4HpG +XaUnyTsivI2ifr3AYgbg6sgcXmgi0WRipnrX9D99usXfNxi5PNEI3mJF8Tq8bOjy +JDZd5duJ2Or4yH/LrAOmrCQxC5nNmsHm2uGHRcab4lUDMoPWkDFOzbtY/iAJtQGZ +Vg9o7cVhAXFSgHzSwC8bjGwPwNdmL719wzAvpOB0qmeHo5oqrKcCyz7qgryYvOhH +ZjHmfc++FDuQGhYv8yNAMpPkg2ZfZSD7AM0KigNp0bsOYPhM6n0EqCzoX5SjzSp3 +v+asbUPbVC5G7/YbkNhyohf9iNXqyMrWnYL86LnXIMTi6Sto01BLfRs0QiqztahQ +JuSHoeBpoXY/yMoHYQCd/O7D12Ha5XDdYfXP0Yf9glS+r+YaVYXxcJ6O/DfV6QEk +MFPobhR7zlCShd7TdY1a41uxTGB+Wmn4DO0s/wzSgdgxIzG+TM1X47owe7l5RiI1 +1wxfuzN2+ao= +=/CHf +-----END PGP PUBLIC KEY BLOCK----- + +``` + +
diff --git a/build.rs b/build.rs new file mode 100644 index 000000000..d8f91cb91 --- /dev/null +++ b/build.rs @@ -0,0 +1,3 @@ +fn main() { + built::write_built_file().expect("Failed to acquire build-time information"); +} diff --git a/completions/_mise b/completions/_mise new file mode 100644 index 000000000..d60c4a14f --- /dev/null +++ b/completions/_mise @@ -0,0 +1,1100 @@ +#compdef mise +_mise() { + typeset -A opt_args + local context state line curcontext=$curcontext + local ret=1 + + _arguments -s -S \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' \ + '1: :__mise_cmds' \ + '*::arg:->args' && ret=0 + + case "$state" in + (args) + curcontext="${curcontext%:*:*}:mise-cmd-$words[1]:" + case $words[1] in + (activate) __mise_activate_cmd && ret=0 ;; + (a|aliases|alias) __mise_alias_cmd && ret=0 ;; + (asdf) __mise_asdf_cmd && ret=0 ;; + (bin-paths) __mise_bin_paths_cmd && ret=0 ;; + (cache) __mise_cache_cmd && ret=0 ;; + (complete|completions|completion) __mise_completion_cmd && ret=0 ;; + (cfg|config) __mise_config_cmd && ret=0 ;; + (current) __mise_current_cmd && ret=0 ;; + (deactivate) __mise_deactivate_cmd && ret=0 ;; + (direnv) __mise_direnv_cmd && ret=0 ;; + (dr|doctor) __mise_doctor_cmd && ret=0 ;; + (e|env) __mise_env_cmd && ret=0 ;; + (x|exec) __mise_exec_cmd && ret=0 ;; + (g|global) __mise_global_cmd && ret=0 ;; + (hook-env) __mise_hook_env_cmd && ret=0 ;; + (hook-not-found) __mise_hook_not_found_cmd && ret=0 ;; + (implode) __mise_implode_cmd && ret=0 ;; + (i|install) __mise_install_cmd && ret=0 ;; + (latest) __mise_latest_cmd && ret=0 ;; + (ln|link) __mise_link_cmd && ret=0 ;; + (l|local) __mise_local_cmd && ret=0 ;; + (list|ls) __mise_ls_cmd && ret=0 ;; + (list-all|list-remote|ls-remote) __mise_ls_remote_cmd && ret=0 ;; + (outdated) __mise_outdated_cmd && ret=0 ;; + (p|plugin|plugin-list|plugins) __mise_plugins_cmd && ret=0 ;; + (prune) __mise_prune_cmd && ret=0 ;; + (reshim) __mise_reshim_cmd && ret=0 ;; + (r|run) __mise_run_cmd && ret=0 ;; + (self-update) __mise_self_update_cmd && ret=0 ;; + (env-vars|ev|set) __mise_set_cmd && ret=0 ;; + (settings) __mise_settings_cmd && ret=0 ;; + (sh|shell) __mise_shell_cmd && ret=0 ;; + (sync) __mise_sync_cmd && ret=0 ;; + (t|task|tasks) __mise_tasks_cmd && ret=0 ;; + (trust) __mise_trust_cmd && ret=0 ;; + (remove|rm|uninstall) __mise_uninstall_cmd && ret=0 ;; + (unset) __mise_unset_cmd && ret=0 ;; + (up|upgrade) __mise_upgrade_cmd && ret=0 ;; + (usage) __mise_usage_cmd && ret=0 ;; + (u|use) __mise_use_cmd && ret=0 ;; + (v|version) __mise_version_cmd && ret=0 ;; + (w|watch) __mise_watch_cmd && ret=0 ;; + (where) __mise_where_cmd && ret=0 ;; + (which) __mise_which_cmd && ret=0 ;; + esac + ;; + esac + +return ret +} +(( $+functions[__mise_activate_cmd] )) || +__mise_activate_cmd() { + _arguments -s -S \ + '::shell_type:(bash fish nu xonsh zsh)' \ + '--shims[Use shims instead of modifying PATH]' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' +} +(( $+functions[__mise_alias_cmd] )) || +__mise_alias_cmd() { + _arguments -s -S \ + '(-p --plugin)'{-p,--plugin}'=[filter aliases by plugin]:plugin:__mise_plugins' \ + '--no-header[Don'\''t show table header]' \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' \ + '1: :__mise_alias_cmds' \ + '*::arg:->args' && ret=0 + + case "$state" in + (args) + curcontext="${curcontext%:*:*}:mise-cmd-$words[1]:" + case $words[1] in + (get) __mise_alias_get_cmd && ret=0 ;; + (list|ls) __mise_alias_ls_cmd && ret=0 ;; + (add|create|set) __mise_alias_set_cmd && ret=0 ;; + (del|delete|remove|rm|unset) __mise_alias_unset_cmd && ret=0 ;; + esac + ;; + esac + +return ret +} +(( $+functions[__mise_alias_get_cmd] )) || +__mise_alias_get_cmd() { + _arguments -s -S \ + ':plugin:__mise_plugins' \ + ':alias:__mise_aliases' \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' +} +(( $+functions[__mise_alias_ls_cmd] )) || +__mise_alias_ls_cmd() { + _arguments -s -S \ + '::plugin:__mise_plugins' \ + '--no-header[Don'\''t show table header]' \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' +} +(( $+functions[__mise_alias_set_cmd] )) || +__mise_alias_set_cmd() { + _arguments -s -S \ + ':plugin:__mise_plugins' \ + ':alias:__mise_aliases' \ + ':value:' \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' +} +(( $+functions[__mise_alias_unset_cmd] )) || +__mise_alias_unset_cmd() { + _arguments -s -S \ + ':plugin:__mise_plugins' \ + ':alias:__mise_aliases' \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' +} +(( $+functions[__mise_asdf_cmd] )) || +__mise_asdf_cmd() { + _arguments -s -S \ + '*::args:_cmdambivalent' \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' +} +(( $+functions[__mise_bin_paths_cmd] )) || +__mise_bin_paths_cmd() { + _arguments -s -S \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' +} +(( $+functions[__mise_cache_cmd] )) || +__mise_cache_cmd() { + _arguments -s -S \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' \ + '1: :__mise_cache_cmds' \ + '*::arg:->args' && ret=0 + + case "$state" in + (args) + curcontext="${curcontext%:*:*}:mise-cmd-$words[1]:" + case $words[1] in + (c|clean|clear) __mise_cache_clear_cmd && ret=0 ;; + esac + ;; + esac + +return ret +} +(( $+functions[__mise_cache_clear_cmd] )) || +__mise_cache_clear_cmd() { + _arguments -s -S \ + '*::plugin:__mise_plugins' \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' +} +(( $+functions[__mise_completion_cmd] )) || +__mise_completion_cmd() { + _arguments -s -S \ + '::shell:(bash fish zsh)' \ + '--usage[Always use usage for completions.]' \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' +} +(( $+functions[__mise_config_cmd] )) || +__mise_config_cmd() { + _arguments -s -S \ + '--no-header[Do not print table header]' \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' \ + '1: :__mise_config_cmds' \ + '*::arg:->args' && ret=0 + + case "$state" in + (args) + curcontext="${curcontext%:*:*}:mise-cmd-$words[1]:" + case $words[1] in + (g|generate) __mise_config_generate_cmd && ret=0 ;; + (ls) __mise_config_ls_cmd && ret=0 ;; + esac + ;; + esac + +return ret +} +(( $+functions[__mise_config_generate_cmd] )) || +__mise_config_generate_cmd() { + _arguments -s -S \ + '(-o --output)'{-o,--output}'=[Output to file instead of stdout]:output:_files' \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' +} +(( $+functions[__mise_config_ls_cmd] )) || +__mise_config_ls_cmd() { + _arguments -s -S \ + '--no-header[Do not print table header]' \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' +} +(( $+functions[__mise_current_cmd] )) || +__mise_current_cmd() { + _arguments -s -S \ + '::plugin:__mise_plugins' \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' +} +(( $+functions[__mise_deactivate_cmd] )) || +__mise_deactivate_cmd() { + _arguments -s -S \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' +} +(( $+functions[__mise_direnv_cmd] )) || +__mise_direnv_cmd() { + _arguments -s -S \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' \ + '1: :__mise_direnv_cmds' \ + '*::arg:->args' && ret=0 + + case "$state" in + (args) + curcontext="${curcontext%:*:*}:mise-cmd-$words[1]:" + case $words[1] in + (activate) __mise_direnv_activate_cmd && ret=0 ;; + (envrc) __mise_direnv_envrc_cmd && ret=0 ;; + (exec) __mise_direnv_exec_cmd && ret=0 ;; + esac + ;; + esac + +return ret +} +(( $+functions[__mise_direnv_activate_cmd] )) || +__mise_direnv_activate_cmd() { + _arguments -s -S \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' +} +(( $+functions[__mise_direnv_envrc_cmd] )) || +__mise_direnv_envrc_cmd() { + _arguments -s -S \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' +} +(( $+functions[__mise_direnv_exec_cmd] )) || +__mise_direnv_exec_cmd() { + _arguments -s -S \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' +} +(( $+functions[__mise_doctor_cmd] )) || +__mise_doctor_cmd() { + _arguments -s -S \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' +} +(( $+functions[__mise_env_cmd] )) || +__mise_env_cmd() { + _arguments -s -S \ + '*::tool:__mise_tool_versions' \ + '(-J --json)'{-J,--json}'[Output in JSON format]' \ + '(-s --shell)'{-s,--shell}'=[Shell type to generate environment variables for]:shell:(bash fish nu xonsh zsh)' \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' +} +(( $+functions[__mise_exec_cmd] )) || +__mise_exec_cmd() { + _arguments -s -S \ + '*::tool:__mise_tool_versions' \ + '(-c --command)'{-c,--command}'=[Command string to execute]:c:_cmdstring' \ + '(-j --jobs)'{-j,--jobs}'=[Number of jobs to run in parallel]:jobs:' \ + '--raw[Directly pipe stdin/stdout/stderr from plugin to user Sets --jobs=1]' \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' +} +(( $+functions[__mise_global_cmd] )) || +__mise_global_cmd() { + _arguments -s -S \ + '*::tool:__mise_tool_versions' \ + '--pin[Save exact version to \`~/.tool-versions\`]' \ + '--fuzzy[Save fuzzy version to \`~/.tool-versions\`]' \ + '*--remove=[Remove the plugin(s) from ~/.tool-versions]:remove:' \ + '--path[Get the path of the global config file]' \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' +} +(( $+functions[__mise_hook_env_cmd] )) || +__mise_hook_env_cmd() { + _arguments -s -S \ + '(-s --shell)'{-s,--shell}'=[Shell type to generate script for]:shell:(bash fish nu xonsh zsh)' \ + '(-q --quiet)'{-q,--quiet}'[Hide warnings such as when a tool is not installed]' \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' +} +(( $+functions[__mise_hook_not_found_cmd] )) || +__mise_hook_not_found_cmd() { + _arguments -s -S \ + '(-s --shell)'{-s,--shell}'=[Shell type to generate script for]:shell:(bash fish nu xonsh zsh)' \ + ':bin:' \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' +} +(( $+functions[__mise_implode_cmd] )) || +__mise_implode_cmd() { + _arguments -s -S \ + '--config[Also remove config directory]' \ + '(-n --dry-run)'{-n,--dry-run}'[List directories that would be removed without actually removing them]' \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' +} +(( $+functions[__mise_install_cmd] )) || +__mise_install_cmd() { + _arguments -s -S \ + '*::tool:__mise_tool_versions' \ + '(-f --force)'{-f,--force}'[Force reinstall even if already installed]' \ + '(-j --jobs)'{-j,--jobs}'=[Number of jobs to run in parallel]:jobs:' \ + '--raw[Directly pipe stdin/stdout/stderr from plugin to user Sets --jobs=1]' \ + '*'{-v,--verbose}'[Show installation output]' \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' +} +(( $+functions[__mise_latest_cmd] )) || +__mise_latest_cmd() { + _arguments -s -S \ + ':tool:__mise_tool_versions' \ + '(-i --installed)'{-i,--installed}'[Show latest installed instead of available version]' \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' +} +(( $+functions[__mise_link_cmd] )) || +__mise_link_cmd() { + _arguments -s -S \ + ':tool:__mise_tool_versions' \ + ':path:_directories' \ + '(-f --force)'{-f,--force}'[Overwrite an existing tool version if it exists]' \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' +} +(( $+functions[__mise_local_cmd] )) || +__mise_local_cmd() { + _arguments -s -S \ + '*::tool:__mise_tool_versions' \ + '(-p --parent)'{-p,--parent}'[Recurse up to find a .tool-versions file rather than using the current directory only]' \ + '--pin[Save exact version to \`.tool-versions\`]' \ + '--fuzzy[Save fuzzy version to \`.tool-versions\` e.g.\: \`mise local --fuzzy node@20\` will save \`node 20\` to .tool-versions This is the default behavior unless MISE_ASDF_COMPAT=1]' \ + '*--remove=[Remove the plugin(s) from .tool-versions]:remove:' \ + '--path[Get the path of the config file]' \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' +} +(( $+functions[__mise_ls_cmd] )) || +__mise_ls_cmd() { + _arguments -s -S \ + '*::plugin:__mise_plugins' \ + '(-c --current)'{-c,--current}'[Only show tool versions currently specified in a .tool-versions/.mise.toml]' \ + '(-g --global)'{-g,--global}'[Only show tool versions currently specified in a the global .tool-versions/.mise.toml]' \ + '(-i --installed)'{-i,--installed}'[Only show tool versions that are installed (Hides tools defined in .tool-versions/.mise.toml but not installed)]' \ + '(-J --json)'{-J,--json}'[Output in json format]' \ + '(-m --missing)'{-m,--missing}'[Display missing tool versions]' \ + '--prefix=[Display versions matching this prefix]:prefix:__mise_prefixes' \ + '--no-header[Don'\''t display headers]' \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' +} +(( $+functions[__mise_ls_remote_cmd] )) || +__mise_ls_remote_cmd() { + _arguments -s -S \ + '::plugin:__mise_plugins' \ + '--all[Show all installed plugins and versions]' \ + '::prefix:__mise_prefixes' \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' +} +(( $+functions[__mise_outdated_cmd] )) || +__mise_outdated_cmd() { + _arguments -s -S \ + '*::tool:__mise_tool_versions' \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' +} +(( $+functions[__mise_plugins_cmd] )) || +__mise_plugins_cmd() { + _arguments -s -S \ + '(-c --core)'{-c,--core}'[The built-in plugins only]' \ + '--user[List installed plugins]' \ + '(-u --urls)'{-u,--urls}'[Show the git url for each plugin]' \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' \ + '1: :__mise_plugins_cmds' \ + '*::arg:->args' && ret=0 + + case "$state" in + (args) + curcontext="${curcontext%:*:*}:mise-cmd-$words[1]:" + case $words[1] in + (a|add|i|install) __mise_plugins_install_cmd && ret=0 ;; + (ln|link) __mise_plugins_link_cmd && ret=0 ;; + (list|ls) __mise_plugins_ls_cmd && ret=0 ;; + (list-all|list-remote|ls-remote) __mise_plugins_ls_remote_cmd && ret=0 ;; + (remove|rm|uninstall) __mise_plugins_uninstall_cmd && ret=0 ;; + (up|upgrade|update) __mise_plugins_update_cmd && ret=0 ;; + esac + ;; + esac + +return ret +} +(( $+functions[__mise_plugins_install_cmd] )) || +__mise_plugins_install_cmd() { + _arguments -s -S \ + ':new_plugin:__mise_all_plugins' \ + '::git_url:_urls' \ + '(-f --force)'{-f,--force}'[Reinstall even if plugin exists]' \ + '(-a --all)'{-a,--all}'[Install all missing plugins]' \ + '*'{-v,--verbose}'[Show installation output]' \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' +} +(( $+functions[__mise_plugins_link_cmd] )) || +__mise_plugins_link_cmd() { + _arguments -s -S \ + ':name:' \ + '::path:_directories' \ + '(-f --force)'{-f,--force}'[Overwrite existing plugin]' \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' +} +(( $+functions[__mise_plugins_ls_cmd] )) || +__mise_plugins_ls_cmd() { + _arguments -s -S \ + '(-c --core)'{-c,--core}'[The built-in plugins only]' \ + '--user[List installed plugins]' \ + '(-u --urls)'{-u,--urls}'[Show the git url for each plugin]' \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' +} +(( $+functions[__mise_plugins_ls_remote_cmd] )) || +__mise_plugins_ls_remote_cmd() { + _arguments -s -S \ + '(-u --urls)'{-u,--urls}'[Show the git url for each plugin e.g.\: https\://github.com/mise-plugins/rtx-nodejs.git]' \ + '--only-names[Only show the name of each plugin by default it will show a "*" next to installed plugins]' \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' +} +(( $+functions[__mise_plugins_uninstall_cmd] )) || +__mise_plugins_uninstall_cmd() { + _arguments -s -S \ + '*::plugin:__mise_plugins' \ + '(-p --purge)'{-p,--purge}'[Also remove the plugin'\''s installs, downloads, and cache]' \ + '(-a --all)'{-a,--all}'[Remove all plugins]' \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' +} +(( $+functions[__mise_plugins_update_cmd] )) || +__mise_plugins_update_cmd() { + _arguments -s -S \ + '*::plugin:__mise_plugins' \ + '(-j --jobs)'{-j,--jobs}'=[Number of jobs to run in parallel]:jobs:' \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' +} +(( $+functions[__mise_prune_cmd] )) || +__mise_prune_cmd() { + _arguments -s -S \ + '*::plugin:__mise_plugins' \ + '(-n --dry-run)'{-n,--dry-run}'[Do not actually delete anything]' \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' +} +(( $+functions[__mise_reshim_cmd] )) || +__mise_reshim_cmd() { + _arguments -s -S \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' +} +(( $+functions[__mise_run_cmd] )) || +__mise_run_cmd() { + _arguments -s -S \ + '::task:__mise_tasks' \ + '*::args:' \ + '(-C --cd)'{-C,--cd}'=[Change to this directory before executing the command]:cd:_directories' \ + '(-n --dry-run)'{-n,--dry-run}'[Don'\''t actually run the tasks(s), just print them in order of execution]' \ + '(-f --force)'{-f,--force}'[Force the tasks to run even if outputs are up to date]' \ + '(-p --prefix)'{-p,--prefix}'[Print stdout/stderr by line, prefixed with the tasks'\''s label]' \ + '(-i --interleave)'{-i,--interleave}'[Print directly to stdout/stderr instead of by line]' \ + '*'{-t,--tool}'=[Tool(s) to also add e.g.\: node@20 python@3.10]:tool:__mise_tool_versions' \ + '(-j --jobs)'{-j,--jobs}'=[Number of tasks to run in parallel]:jobs:' \ + '(-r --raw)'{-r,--raw}'[Read/write directly to stdin/stdout/stderr instead of by line]' \ + '--timings[Shows elapsed time after each tasks]' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' +} +(( $+functions[__mise_self_update_cmd] )) || +__mise_self_update_cmd() { + _arguments -s -S \ + '(-f --force)'{-f,--force}'[Update even if already up to date]' \ + '--no-plugins[Disable auto-updating plugins]' \ + '(-y --yes)'{-y,--yes}'[Skip confirmation prompt]' \ + '::version:' \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' +} +(( $+functions[__mise_set_cmd] )) || +__mise_set_cmd() { + _arguments -s -S \ + '--file=[The TOML file to update]:file:_files' \ + '(-g --global)'{-g,--global}'[Set the environment variable in the global config file]' \ + '*::env_vars:' \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' +} +(( $+functions[__mise_settings_cmd] )) || +__mise_settings_cmd() { + _arguments -s -S \ + '--keys[Only display key names for each setting]' \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' \ + '1: :__mise_settings_cmds' \ + '*::arg:->args' && ret=0 + + case "$state" in + (args) + curcontext="${curcontext%:*:*}:mise-cmd-$words[1]:" + case $words[1] in + (get) __mise_settings_get_cmd && ret=0 ;; + (list|ls) __mise_settings_ls_cmd && ret=0 ;; + (add|create|set) __mise_settings_set_cmd && ret=0 ;; + (del|delete|remove|rm|unset) __mise_settings_unset_cmd && ret=0 ;; + esac + ;; + esac + +return ret +} +(( $+functions[__mise_settings_get_cmd] )) || +__mise_settings_get_cmd() { + _arguments -s -S \ + ':setting:__mise_settings' \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' +} +(( $+functions[__mise_settings_ls_cmd] )) || +__mise_settings_ls_cmd() { + _arguments -s -S \ + '--keys[Only display key names for each setting]' \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' +} +(( $+functions[__mise_settings_set_cmd] )) || +__mise_settings_set_cmd() { + _arguments -s -S \ + ':setting:__mise_settings' \ + ':value:' \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' +} +(( $+functions[__mise_settings_unset_cmd] )) || +__mise_settings_unset_cmd() { + _arguments -s -S \ + ':setting:__mise_settings' \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' +} +(( $+functions[__mise_shell_cmd] )) || +__mise_shell_cmd() { + _arguments -s -S \ + '*::tool:__mise_tool_versions' \ + '(-j --jobs)'{-j,--jobs}'=[Number of jobs to run in parallel]:jobs:' \ + '--raw[Directly pipe stdin/stdout/stderr from plugin to user Sets --jobs=1]' \ + '(-u --unset)'{-u,--unset}'[Removes a previously set version]' \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' +} +(( $+functions[__mise_sync_cmd] )) || +__mise_sync_cmd() { + _arguments -s -S \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' \ + '1: :__mise_sync_cmds' \ + '*::arg:->args' && ret=0 + + case "$state" in + (args) + curcontext="${curcontext%:*:*}:mise-cmd-$words[1]:" + case $words[1] in + (node) __mise_sync_node_cmd && ret=0 ;; + (python) __mise_sync_python_cmd && ret=0 ;; + esac + ;; + esac + +return ret +} +(( $+functions[__mise_sync_node_cmd] )) || +__mise_sync_node_cmd() { + _arguments -s -S \ + '--brew[Get tool versions from Homebrew]' \ + '--nvm[Get tool versions from nvm]' \ + '--nodenv[Get tool versions from nodenv]' \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' +} +(( $+functions[__mise_sync_python_cmd] )) || +__mise_sync_python_cmd() { + _arguments -s -S \ + '--pyenv[Get tool versions from pyenv]' \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' +} +(( $+functions[__mise_tasks_cmd] )) || +__mise_tasks_cmd() { + _arguments -s -S \ + '--no-header[Do not print table header]' \ + '--hidden[Show hidden tasks]' \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' \ + '1: :__mise_tasks_cmds' \ + '*::arg:->args' && ret=0 + + case "$state" in + (args) + curcontext="${curcontext%:*:*}:mise-cmd-$words[1]:" + case $words[1] in + (deps) __mise_tasks_deps_cmd && ret=0 ;; + (edit) __mise_tasks_edit_cmd && ret=0 ;; + (ls) __mise_tasks_ls_cmd && ret=0 ;; + (r|run) __mise_tasks_run_cmd && ret=0 ;; + esac + ;; + esac + +return ret +} +(( $+functions[__mise_tasks_deps_cmd] )) || +__mise_tasks_deps_cmd() { + _arguments -s -S \ + '*::tasks:' \ + '--dot[Display dependencies in DOT format]' \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' +} +(( $+functions[__mise_tasks_edit_cmd] )) || +__mise_tasks_edit_cmd() { + _arguments -s -S \ + ':task:__mise_tasks' \ + '(-p --path)'{-p,--path}'[Display the path to the tasks instead of editing it]' \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' +} +(( $+functions[__mise_tasks_ls_cmd] )) || +__mise_tasks_ls_cmd() { + _arguments -s -S \ + '--no-header[Do not print table header]' \ + '--hidden[Show hidden tasks]' \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' +} +(( $+functions[__mise_tasks_run_cmd] )) || +__mise_tasks_run_cmd() { + _arguments -s -S \ + '::task:__mise_tasks' \ + '*::args:' \ + '(-C --cd)'{-C,--cd}'=[Change to this directory before executing the command]:cd:_directories' \ + '(-n --dry-run)'{-n,--dry-run}'[Don'\''t actually run the tasks(s), just print them in order of execution]' \ + '(-f --force)'{-f,--force}'[Force the tasks to run even if outputs are up to date]' \ + '(-p --prefix)'{-p,--prefix}'[Print stdout/stderr by line, prefixed with the tasks'\''s label]' \ + '(-i --interleave)'{-i,--interleave}'[Print directly to stdout/stderr instead of by line]' \ + '*'{-t,--tool}'=[Tool(s) to also add e.g.\: node@20 python@3.10]:tool:__mise_tool_versions' \ + '(-j --jobs)'{-j,--jobs}'=[Number of tasks to run in parallel]:jobs:' \ + '(-r --raw)'{-r,--raw}'[Read/write directly to stdin/stdout/stderr instead of by line]' \ + '--timings[Shows elapsed time after each tasks]' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' +} +(( $+functions[__mise_trust_cmd] )) || +__mise_trust_cmd() { + _arguments -s -S \ + '::config_file:_files' \ + '(-a --all)'{-a,--all}'[Trust all config files in the current directory and its parents]' \ + '--untrust[No longer trust this config]' \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' +} +(( $+functions[__mise_uninstall_cmd] )) || +__mise_uninstall_cmd() { + _arguments -s -S \ + '*::installed_tool:__mise_installed_tool_versions' \ + '(-a --all)'{-a,--all}'[Delete all installed versions]' \ + '(-n --dry-run)'{-n,--dry-run}'[Do not actually delete anything]' \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' +} +(( $+functions[__mise_unset_cmd] )) || +__mise_unset_cmd() { + _arguments -s -S \ + '*::keys:' \ + '(-f --file)'{-f,--file}'=[Specify a file to use instead of ".mise.toml"]:file:_files' \ + '(-g --global)'{-g,--global}'[Use the global config file]' \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' +} +(( $+functions[__mise_upgrade_cmd] )) || +__mise_upgrade_cmd() { + _arguments -s -S \ + '*::tool:__mise_tool_versions' \ + '(-n --dry-run)'{-n,--dry-run}'[Just print what would be done, don'\''t actually do it]' \ + '(-j --jobs)'{-j,--jobs}'=[Number of jobs to run in parallel]:jobs:' \ + '(-i --interactive)'{-i,--interactive}'[Display multiselect menu to choose which tools to upgrade]' \ + '--raw[Directly pipe stdin/stdout/stderr from plugin to user Sets --jobs=1]' \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' +} +(( $+functions[__mise_usage_cmd] )) || +__mise_usage_cmd() { + _arguments -s -S \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' +} +(( $+functions[__mise_use_cmd] )) || +__mise_use_cmd() { + _arguments -s -S \ + '*::tool:__mise_tool_versions' \ + '(-f --force)'{-f,--force}'[Force reinstall even if already installed]' \ + '--fuzzy[Save fuzzy version to config file]' \ + '(-g --global)'{-g,--global}'[Use the global config file (~/.config/mise/config.toml) instead of the local one]' \ + '(-e --env)'{-e,--env}'=[Modify an environment-specific config file like .mise..toml]:env:' \ + '(-j --jobs)'{-j,--jobs}'=[Number of jobs to run in parallel]:jobs:' \ + '--raw[Directly pipe stdin/stdout/stderr from plugin to user Sets --jobs=1]' \ + '*--remove=[Remove the plugin(s) from config file]:remove:' \ + '(-p --path)'{-p,--path}'=[Specify a path to a config file or directory If a directory is specified, it will look for .mise.toml (default) or .tool-versions]:path:_files' \ + '--pin[Save exact version to config file]' \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' +} +(( $+functions[__mise_version_cmd] )) || +__mise_version_cmd() { + _arguments -s -S \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' +} +(( $+functions[__mise_watch_cmd] )) || +__mise_watch_cmd() { + _arguments -s -S \ + '*'{-t,--task}'=[Tasks to run]:task:__mise_tasks' \ + '*::args:' \ + '*'{-g,--glob}'=[Files to watch]:glob:' \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' +} +(( $+functions[__mise_where_cmd] )) || +__mise_where_cmd() { + _arguments -s -S \ + ':tool:__mise_tool_versions' \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' +} +(( $+functions[__mise_which_cmd] )) || +__mise_which_cmd() { + _arguments -s -S \ + ':bin_name:' \ + '--plugin[Show the plugin name instead of the path]' \ + '--version[Show the version instead of the path]' \ + '(-t --tool)'{-t,--tool}'=[Use a specific tool@version]:tool:__mise_tool_versions' \ + '(-C --cd)'{-C,--cd}'=[Change directory before running command]:cd:_directories' \ + '(-q --quiet)'{-q,--quiet}'[Suppress non-error messages]' \ + '*'{-v,--verbose}'[Show extra output (use -vv for even more)]' \ + '(-y --yes)'{-y,--yes}'[Answer yes to all confirmation prompts]' +} +(( $+functions[__mise_cmds] )) || +__mise_cmds() { + local commands; commands=( + 'activate:Initializes mise in the current shell session' + {a,alias}':Manage aliases' + 'bin-paths:List all the active runtime bin paths' + 'cache:Manage the mise cache' + 'completion:Generate shell completions' + {cfg,config}':\[experimental\] Manage config files' + 'current:Shows current active and installed runtime versions' + 'deactivate:Disable mise for current shell session' + 'direnv:Output direnv function to use mise inside direnv' + {dr,doctor}':Check mise installation for possible problems' + {e,env}':Exports env vars to activate mise a single time' + {x,exec}':Execute a command with tool(s) set' + 'implode:Removes mise CLI and all related data' + {i,install}':Install a tool version' + 'latest:Gets the latest available version for a plugin' + {ln,link}':Symlinks a tool version into mise' + {list,ls}':List installed and active tool versions' + 'ls-remote:List runtime versions available for install' + 'outdated:Shows outdated tool versions' + {p,plugins}':Manage plugins' + 'prune:Delete unused versions of tools' + 'reshim:rebuilds the shim farm' + {r,run}':\[experimental\] Run a tasks' + 'self-update:Updates mise itself' + 'set:Manage environment variables' + 'settings:Manage settings' + {sh,shell}':Sets a tool version for the current session' + 'sync:Add tool versions from external tools to mise' + {t,tasks}':\[experimental\] Manage tasks' + 'trust:Marks a config file as trusted' + {remove,rm,uninstall}':Removes runtime versions' + 'unset:Remove environment variable(s) from the config file' + {up,upgrade}':Upgrades outdated tool versions' + 'usage:Generate a usage CLI spec' + {u,use}':Install tool version and add it to config' + 'version:Show mise version' + {w,watch}':\[experimental\] Run a tasks watching for changes' + 'where:Display the installation path for a runtime' + 'which:Shows the path that a bin name points to' + ) + _describe -t commands 'command' commands "$@" +} +(( $+functions[__mise_alias_cmds] )) || +__mise_alias_cmds() { + local commands; commands=( + 'get:Show an alias for a plugin' + {list,ls}':List aliases' + {add,create,set}':Add/update an alias for a plugin' + {del,delete,remove,rm,unset}':Clears an alias for a plugin' + ) + _describe -t commands 'command' commands "$@" +} +(( $+functions[__mise_cache_cmds] )) || +__mise_cache_cmds() { + local commands; commands=( + {c,clear}':Deletes all cache files in mise' + ) + _describe -t commands 'command' commands "$@" +} +(( $+functions[__mise_config_cmds] )) || +__mise_config_cmds() { + local commands; commands=( + {g,generate}':\[experimental\] Generate an .mise.toml file' + 'ls:\[experimental\] List config files currently in use' + ) + _describe -t commands 'command' commands "$@" +} +(( $+functions[__mise_direnv_cmds] )) || +__mise_direnv_cmds() { + local commands; commands=( + 'activate:Output direnv function to use mise inside direnv' + ) + _describe -t commands 'command' commands "$@" +} +(( $+functions[__mise_plugins_cmds] )) || +__mise_plugins_cmds() { + local commands; commands=( + {a,add,i,install}':Install a plugin' + {ln,link}':Symlinks a plugin into mise' + {list,ls}':List installed plugins' + {list-all,list-remote,ls-remote}':List all available remote plugins' + {remove,rm,uninstall}':Removes a plugin' + {up,upgrade,update}':Updates a plugin to the latest version' + ) + _describe -t commands 'command' commands "$@" +} +(( $+functions[__mise_settings_cmds] )) || +__mise_settings_cmds() { + local commands; commands=( + 'get:Show a current setting' + {list,ls}':Show current settings' + {add,create,set}':Add/update a setting' + {del,delete,remove,rm,unset}':Clears a setting' + ) + _describe -t commands 'command' commands "$@" +} +(( $+functions[__mise_sync_cmds] )) || +__mise_sync_cmds() { + local commands; commands=( + 'node:Symlinks all tool versions from an external tool into mise' + 'python:Symlinks all tool versions from an external tool into mise' + ) + _describe -t commands 'command' commands "$@" +} +(( $+functions[__mise_tasks_cmds] )) || +__mise_tasks_cmds() { + local commands; commands=( + 'deps:\[experimental\] Display a tree visualization of a dependency graph' + 'edit:\[experimental\] Edit a tasks with \$EDITOR' + 'ls:\[experimental\] List available tasks to execute' + {r,run}':\[experimental\] Run a tasks' + ) + _describe -t commands 'command' commands "$@" +} + +(( $+functions[__mise_tool_versions] )) || +__mise_tool_versions() { + if compset -P '*@'; then + local -a tool_versions; tool_versions=($(mise ls-remote ${words[CURRENT]})) + _wanted tool_version expl 'version of tool' \ + compadd -a tool_versions -o nosort + else + local -a plugins; plugins=($(mise plugins --core --user)) + _wanted plugin expl 'plugin name' \ + compadd -S '@' -a plugins + fi +} +(( $+functions[__mise_installed_tool_versions] )) || +__mise_installed_tool_versions() { + if compset -P '*@'; then + local plugin; plugin=${words[CURRENT]%%@*} + local -a installed_tool_versions; installed_tool_versions=($(mise ls --installed $plugin | awk '{print $2}')) + _wanted installed_tool_version expl 'version of tool' \ + compadd -a installed_tool_versions -o nosort + else + local -a plugins; plugins=($(mise plugins --core --user)) + _wanted plugin expl 'plugin name' \ + compadd -S '@' -a plugins + fi +} +(( $+functions[__mise_plugins] )) || +__mise_plugins() { + local -a plugins; plugins=($(mise plugins --core --user)) + _describe -t plugins 'plugin' plugins "$@" +} +(( $+functions[__mise_all_plugins] )) || +__mise_all_plugins() { + local -a all_plugins; all_plugins=($(mise plugins --all)) + _describe -t all_plugins 'all_plugins' all_plugins "$@" +} +(( $+functions[__mise_aliases] )) || +__mise_aliases() { + local -a aliases; aliases=($(mise aliases ls ${words[CURRENT-1]} | awk '{print $2}')) + _describe -t aliases 'alias' aliases "$@" +} +(( $+functions[__mise_settings] )) || +__mise_settings() { + local -a settings; settings=($(mise settings ls | awk '{print $1}')) + _describe -t settings 'setting' settings "$@" +} +(( $+functions[__mise_tasks] )) || +__mise_tasks() { + local -a tasks; tasks=($(mise tasks ls --no-header | awk '{print $1}')) + _describe -t tasks 'task' tasks "$@" +} +(( $+functions[__mise_prefixes] )) || +__mise_prefixes() { + if [[ CURRENT -gt 2 ]]; then + local -a prefixes; prefixes=($(mise ls-remote ${words[CURRENT-1]})) + _describe -t prefixes 'prefix' prefixes "$@" + fi +} + +if [ "$funcstack[1]" = "_mise" ]; then + _mise "$@" +else + compdef _mise mise +fi + +# vim: noet ci pi sts=0 sw=4 ts=4 diff --git a/completions/mise.bash b/completions/mise.bash new file mode 100644 index 000000000..ac962be86 --- /dev/null +++ b/completions/mise.bash @@ -0,0 +1,19 @@ +_mise() { + if ! command -v usage &> /dev/null; then + echo "Error: usage not found. This is required for completions to work in mise." >&2 + return 1 + fi + + if [[ -z ${_USAGE_SPEC_MISE:-} ]]; then + _USAGE_SPEC_MISE="$(mise usage)" + fi + + COMPREPLY=( $(usage complete-word -s "${_USAGE_SPEC_MISE}" --cword="$COMP_CWORD" -- "${COMP_WORDS[@]}" ) ) + if [[ $? -ne 0 ]]; then + unset COMPREPLY + fi + return 0 +} + +shopt -u hostcomplete && complete -o nospace -o bashdefault -o nosort -F _mise mise +# vim: noet ci pi sts=0 sw=4 ts=4 ft=sh diff --git a/completions/mise.fish b/completions/mise.fish new file mode 100644 index 000000000..6b166d0a3 --- /dev/null +++ b/completions/mise.fish @@ -0,0 +1,8 @@ +# if "usage" is not installed show an error +if ! command -v usage &> /dev/null + echo "Error: usage not found. This is required for completions to work in mise." >&2 + return 1 +end + +set _usage_spec_mise (mise usage | string collect) +complete -xc mise -a '(usage complete-word -s "$_usage_spec_mise" -- (commandline -cop) (commandline -t))' diff --git a/default.nix b/default.nix new file mode 100644 index 000000000..65946d43b --- /dev/null +++ b/default.nix @@ -0,0 +1,50 @@ +{ pkgs, lib, stdenv, fetchFromGitHub, rustPlatform, coreutils, bash, direnv, openssl }: + +rustPlatform.buildRustPackage { + pname = "mise"; + version = "2024.2.13"; + + src = lib.cleanSource ./.; + + cargoLock = { + lockFile = ./Cargo.lock; + }; + + nativeBuildInputs = with pkgs; [ pkg-config ]; + buildInputs = with pkgs; [ + coreutils + bash + direnv + gnused + git + gawk + openssl + ] ++ lib.optionals stdenv.isDarwin [ darwin.apple_sdk.frameworks.Security darwin.apple_sdk.frameworks.SystemConfiguration ]; + + prePatch = '' + substituteInPlace ./test/data/plugins/**/bin/* \ + --replace '#!/usr/bin/env bash' '#!${bash}/bin/bash' + substituteInPlace ./src/fake_asdf.rs ./src/cli/reshim.rs \ + --replace '#!/bin/sh' '#!${bash}/bin/sh' + substituteInPlace ./src/env_diff.rs \ + --replace '"bash"' '"${bash}/bin/bash"' + substituteInPlace ./test/cwd/.mise/tasks/filetask \ + --replace '#!/usr/bin/env bash' '#!${bash}/bin/bash' + substituteInPlace ./src/cli/direnv/exec.rs \ + --replace '"env"' '"${coreutils}/bin/env"' \ + --replace 'cmd!("direnv"' 'cmd!("${direnv}/bin/direnv"' + ''; + + # Skip the test_plugin_list_urls as it uses the .git folder, which + # is excluded by default from Nix. + checkPhase = '' + RUST_BACKTRACE=full cargo test --all-features -- \ + --skip cli::plugins::ls::tests::test_plugin_list_urls + ''; + + meta = with lib; { + description = "The front-end to your dev env"; + homepage = "https://github.com/jdx/mise"; + license = licenses.mit; + }; +} diff --git a/deny.toml b/deny.toml new file mode 100644 index 000000000..11c160865 --- /dev/null +++ b/deny.toml @@ -0,0 +1,273 @@ +# This template contains all of the possible sections and their default values + +# Note that all fields that take a lint level have these possible values: +# * deny - An error will be produced and the check will fail +# * warn - A warning will be produced, but the check will not fail +# * allow - No warning or error will be produced, though in some cases a note +# will be + +# The values provided in this template are the default values that will be used +# when any section or field is not specified in your own configuration + +# Root options + +# If 1 or more target triples (and optionally, target_features) are specified, +# only the specified targets will be checked when running `cargo deny check`. +# This means, if a particular package is only ever used as a target specific +# dependency, such as, for example, the `nix` crate only being used via the +# `target_family = "unix"` configuration, that only having windows targets in +# this list would mean the nix crate, as well as any of its exclusive +# dependencies not shared by any other crates, would be ignored, as the target +# list here is effectively saying which targets you are building for. +targets = [ + # The triple can be any string, but only the target triples built in to + # rustc (as of 1.40) can be checked against actual config expressions + #{ triple = "x86_64-unknown-linux-musl" }, + # You can also specify which target_features you promise are enabled for a + # particular target. target_features are currently not validated against + # the actual valid features supported by the target architecture. + #{ triple = "wasm32-unknown-unknown", features = ["atomics"] }, +] +# When creating the dependency graph used as the source of truth when checks are +# executed, this field can be used to prune crates from the graph, removing them +# from the view of cargo-deny. This is an extremely heavy hammer, as if a crate +# is pruned from the graph, all of its dependencies will also be pruned unless +# they are connected to another crate in the graph that hasn't been pruned, +# so it should be used with care. The identifiers are [Package ID Specifications] +# (https://doc.rust-lang.org/cargo/reference/pkgid-spec.html) +#exclude = [] +# If true, metadata will be collected with `--all-features`. Note that this can't +# be toggled off if true, if you want to conditionally enable `--all-features` it +# is recommended to pass `--all-features` on the cmd line instead +all-features = true +# If true, metadata will be collected with `--no-default-features`. The same +# caveat with `all-features` applies +no-default-features = false +# If set, these feature will be enabled when collecting metadata. If `--features` +# is specified on the cmd line they will take precedence over this option. +#features = [] +# When outputting inclusion graphs in diagnostics that include features, this +# option can be used to specify the depth at which feature edges will be added. +# This option is included since the graphs can be quite large and the addition +# of features from the crate(s) to all of the graph roots can be far too verbose. +# This option can be overridden via `--feature-depth` on the cmd line +feature-depth = 1 + +# This section is considered when running `cargo deny check advisories` +# More documentation for the advisories section can be found here: +# https://embarkstudios.github.io/cargo-deny/checks/advisories/cfg.html +[advisories] +# The path where the advisory database is cloned/fetched into +db-path = "~/.cargo/advisory-db" +# The url(s) of the advisory databases to use +db-urls = ["https://github.com/rustsec/advisory-db"] +# The lint level for security vulnerabilities +vulnerability = "deny" +# The lint level for unmaintained crates +unmaintained = "warn" +# The lint level for crates that have been yanked from their source registry +yanked = "warn" +# The lint level for crates with security notices. Note that as of +# 2019-12-17 there are no security notice advisories in +# https://github.com/rustsec/advisory-db +notice = "warn" +# A list of advisory IDs to ignore. Note that ignored advisories will still +# output a note when they are encountered. +ignore = [ + "RUSTSEC-2023-0052", # webpki +] +# Threshold for security vulnerabilities, any vulnerability with a CVSS score +# lower than the range specified will be ignored. Note that ignored advisories +# will still output a note when they are encountered. +# * None - CVSS Score 0.0 +# * Low - CVSS Score 0.1 - 3.9 +# * Medium - CVSS Score 4.0 - 6.9 +# * High - CVSS Score 7.0 - 8.9 +# * Critical - CVSS Score 9.0 - 10.0 +#severity-threshold = + +# If this is true, then cargo deny will use the git executable to fetch advisory database. +# If this is false, then it uses a built-in git library. +# Setting this to true can be helpful if you have special authentication requirements that cargo-deny does not support. +# See Git Authentication for more information about setting up git authentication. +#git-fetch-with-cli = true + +# This section is considered when running `cargo deny check licenses` +# More documentation for the licenses section can be found here: +# https://embarkstudios.github.io/cargo-deny/checks/licenses/cfg.html +[licenses] +# The lint level for crates which do not have a detectable license +unlicensed = "deny" +# List of explicitly allowed licenses +# See https://spdx.org/licenses/ for list of possible licenses +# [possible values: any SPDX 3.11 short identifier (+ optional exception)]. +allow = [ + "MIT", + "ISC", + "Apache-2.0", + "Apache-2.0 WITH LLVM-exception", + "Unicode-DFS-2016", + "BSD-3-Clause", + "OpenSSL", + "MPL-2.0", +] +# List of explicitly disallowed licenses +# See https://spdx.org/licenses/ for list of possible licenses +# [possible values: any SPDX 3.11 short identifier (+ optional exception)]. +deny = [ + #"Nokia", +] +# Lint level for licenses considered copyleft +copyleft = "deny" +# Blanket approval or denial for OSI-approved or FSF Free/Libre licenses +# * both - The license will be approved if it is both OSI-approved *AND* FSF +# * either - The license will be approved if it is either OSI-approved *OR* FSF +# * osi-only - The license will be approved if is OSI-approved *AND NOT* FSF +# * fsf-only - The license will be approved if is FSF *AND NOT* OSI-approved +# * neither - This predicate is ignored and the default lint level is used +allow-osi-fsf-free = "neither" +# Lint level used when no other predicates are matched +# 1. License isn't in the allow or deny lists +# 2. License isn't copyleft +# 3. License isn't OSI/FSF, or allow-osi-fsf-free = "neither" +default = "deny" +# The confidence threshold for detecting a license from license text. +# The higher the value, the more closely the license text must be to the +# canonical license text of a valid SPDX license file. +# [possible values: any between 0.0 and 1.0]. +confidence-threshold = 0.8 +# Allow 1 or more licenses on a per-crate basis, so that particular licenses +# aren't accepted for every possible crate as with the normal allow list +exceptions = [ + # Each entry is the crate and version constraint, and its specific allow + # list +] + +# Some crates don't have (easily) machine readable licensing information, +# adding a clarification entry for it allows you to manually specify the +# licensing information +[[licenses.clarify]] +# The name of the crate the clarification applies to +name = "ring" +# The optional version constraint for the crate +version = "*" +# The SPDX expression for the license requirements of the crate +expression = "MIT AND ISC AND OpenSSL" +# One or more files in the crate's source used as the "source of truth" for +# the license expression. If the contents match, the clarification will be used +# when running the license check, otherwise the clarification will be ignored +# and the crate will be checked normally, which may produce warnings or errors +# depending on the rest of your configuration +license-files = [ +# Each entry is a crate relative path, and the (opaque) hash of its contents +{ path = "LICENSE", hash = 0xbd0eed23 } +] + +[licenses.private] +# If true, ignores workspace crates that aren't published, or are only +# published to private registries. +# To see how to mark a crate as unpublished (to the official registry), +# visit https://doc.rust-lang.org/cargo/reference/manifest.html#the-publish-field. +ignore = false +# One or more private registries that you might publish crates to, if a crate +# is only published to private registries, and ignore is true, the crate will +# not have its license(s) checked +registries = [ + #"https://sekretz.com/registry +] + +# This section is considered when running `cargo deny check bans`. +# More documentation about the 'bans' section can be found here: +# https://embarkstudios.github.io/cargo-deny/checks/bans/cfg.html +[bans] +# Lint level for when multiple versions of the same crate are detected +multiple-versions = "warn" +# Lint level for when a crate version requirement is `*` +wildcards = "allow" +# The graph highlighting used when creating dotgraphs for crates +# with multiple versions +# * lowest-version - The path to the lowest versioned duplicate is highlighted +# * simplest-path - The path to the version with the fewest edges is highlighted +# * all - Both lowest-version and simplest-path are used +highlight = "all" +# The default lint level for `default` features for crates that are members of +# the workspace that is being checked. This can be overridden by allowing/denying +# `default` on a crate-by-crate basis if desired. +workspace-default-features = "allow" +# The default lint level for `default` features for external crates that are not +# members of the workspace. This can be overridden by allowing/denying `default` +# on a crate-by-crate basis if desired. +external-default-features = "allow" +# List of crates that are allowed. Use with care! +allow = [ + #{ name = "ansi_term", version = "=0.11.0" }, +] +# List of crates to deny +deny = [ + # Each entry the name of a crate and a version range. If version is + # not specified, all versions will be matched. + #{ name = "ansi_term", version = "=0.11.0" }, + # + # Wrapper crates can optionally be specified to allow the crate when it + # is a direct dependency of the otherwise banned crate + #{ name = "ansi_term", version = "=0.11.0", wrappers = [] }, +] + +# List of features to allow/deny +# Each entry the name of a crate and a version range. If version is +# not specified, all versions will be matched. +#[[bans.features]] +#name = "reqwest" +# Features to not allow +#deny = ["json"] +# Features to allow +#allow = [ +# "rustls", +# "__rustls", +# "__tls", +# "hyper-rustls", +# "rustls", +# "rustls-pemfile", +# "rustls-tls-webpki-roots", +# "tokio-rustls", +# "webpki-roots", +#] +# If true, the allowed features must exactly match the enabled feature set. If +# this is set there is no point setting `deny` +#exact = true + +# Certain crates/versions that will be skipped when doing duplicate detection. +skip = [ + #{ name = "ansi_term", version = "=0.11.0" }, +] +# Similarly to `skip` allows you to skip certain crates during duplicate +# detection. Unlike skip, it also includes the entire tree of transitive +# dependencies starting at the specified crate, up to a certain depth, which is +# by default infinite. +skip-tree = [ + #{ name = "ansi_term", version = "=0.11.0", depth = 20 }, +] + +# This section is considered when running `cargo deny check sources`. +# More documentation about the 'sources' section can be found here: +# https://embarkstudios.github.io/cargo-deny/checks/sources/cfg.html +[sources] +# Lint level for what to happen when a crate from a crate registry that is not +# in the allow list is encountered +unknown-registry = "warn" +# Lint level for what to happen when a crate from a git repository that is not +# in the allow list is encountered +unknown-git = "warn" +# List of URLs for allowed crate registries. Defaults to the crates.io index +# if not specified. If it is specified but empty, no registries are allowed. +allow-registry = ["https://github.com/rust-lang/crates.io-index"] +# List of URLs for allowed Git repositories +allow-git = [] + +# [sources.allow-org] +# # 1 or more github.com organizations to allow git sources for +# github = [""] +# # 1 or more gitlab.com organizations to allow git sources for +# gitlab = [""] +# # 1 or more bitbucket.org organizations to allow git sources for +# bitbucket = [""] diff --git a/docs/bun.md b/docs/bun.md new file mode 100644 index 000000000..052b9204e --- /dev/null +++ b/docs/bun.md @@ -0,0 +1 @@ +See [mise.jdx.dev](https://mise.jdx.dev/lang/bun.html) for more information. diff --git a/docs/cli-reference.md b/docs/cli-reference.md new file mode 100644 index 000000000..e53487383 --- /dev/null +++ b/docs/cli-reference.md @@ -0,0 +1,1716 @@ + + +# Commands + +## `mise activate [OPTIONS] [SHELL_TYPE]` + +```text +Initializes mise in the current shell session + +This should go into your shell's rc file. +Otherwise, it will only take effect in the current session. +(e.g. ~/.zshrc, ~/.bashrc) + +This is only intended to be used in interactive sessions, not scripts. +mise is only capable of updating PATH when the prompt is displayed to the user. +For non-interactive use-cases, use shims instead. + +Typically this can be added with something like the following: + + echo 'eval "$(mise activate)"' >> ~/.zshrc + +However, this requires that "mise" is in your PATH. If it is not, you need to +specify the full path like this: + + echo 'eval "$(/path/to/mise activate)"' >> ~/.zshrc + +Customize status output with `status` settings. + +Usage: activate [OPTIONS] [SHELL_TYPE] + +Arguments: + [SHELL_TYPE] + Shell type to generate the script for + + [possible values: bash, fish, nu, xonsh, zsh] + +Options: + --shims + Use shims instead of modifying PATH + Effectively the same as: + PATH="$HOME/.local/share/mise/shims:$PATH" + + -q, --quiet + Suppress non-error messages + +Examples: + + $ eval "$(mise activate bash)" + $ eval "$(mise activate zsh)" + $ mise activate fish | source + $ execx($(mise activate xonsh)) +``` + +## `mise alias get ` + +```text +Show an alias for a plugin + +This is the contents of an alias. entry in ~/.config/mise/config.toml + +Usage: alias get + +Arguments: + + The plugin to show the alias for + + + The alias to show + +Examples: + $ mise alias get node lts-hydrogen + 20.0.0 +``` + +## `mise alias ls [OPTIONS] [PLUGIN]` + +**Aliases:** `list` + +```text +List aliases +Shows the aliases that can be specified. +These can come from user config or from plugins in `bin/list-aliases`. + +For user config, aliases are defined like the following in `~/.config/mise/config.toml`: + + [alias.node] + lts = "20.0.0" + +Usage: alias ls [OPTIONS] [PLUGIN] + +Arguments: + [PLUGIN] + Show aliases for + +Options: + --no-header + Don't show table header + +Examples: + + $ mise aliases + node lts-hydrogen 20.0.0 +``` + +## `mise alias set ` + +**Aliases:** `add, create` + +```text +Add/update an alias for a plugin + +This modifies the contents of ~/.config/mise/config.toml + +Usage: alias set + +Arguments: + + The plugin to set the alias for + + + The alias to set + + + The value to set the alias to + +Examples: + + $ mise alias set node lts-hydrogen 18.0.0 +``` + +## `mise alias unset ` + +**Aliases:** `del, delete, remove, rm` + +```text +Clears an alias for a plugin + +This modifies the contents of ~/.config/mise/config.toml + +Usage: alias unset + +Arguments: + + The plugin to remove the alias from + + + The alias to remove + +Examples: + + $ mise alias unset node lts-hydrogen +``` + +## `mise bin-paths` + +```text +List all the active runtime bin paths + +Usage: bin-paths +``` + +## `mise cache clear [PLUGIN]...` + +**Aliases:** `c` + +```text +Deletes all cache files in mise + +Usage: cache clear [PLUGIN]... + +Arguments: + [PLUGIN]... + Plugin(s) to clear cache for e.g.: node, python +``` + +## `mise completion [OPTIONS] [SHELL]` + +```text +Generate shell completions + +Usage: completion [OPTIONS] [SHELL] + +Arguments: + [SHELL] + Shell type to generate completions for + + [possible values: bash, fish, zsh] + +Options: + --usage + Always use usage for completions. + Currently, usage is the default for fish and bash but not zsh since it has a few quirks + to work out first. + + This requires the `usage` CLI to be installed. + https://usage.jdx.dev + +Examples: + + $ mise completion bash > /etc/bash_completion.d/mise + $ mise completion zsh > /usr/local/share/zsh/site-functions/_mise + $ mise completion fish > ~/.config/fish/completions/mise.fish +``` + +## `mise config ls [OPTIONS]` + +```text +[experimental] List config files currently in use + +Usage: config ls [OPTIONS] + +Options: + --no-header + Do not print table header + +Examples: + + $ mise config ls +``` + +## `mise config generate [OPTIONS]` + +**Aliases:** `g` + +```text +[experimental] Generate an .mise.toml file + +Usage: config generate [OPTIONS] + +Options: + -o, --output + Output to file instead of stdout + +Examples: + + $ mise cf generate > .mise.toml + $ mise cf generate --output=.mise.toml +``` + +## `mise current [PLUGIN]` + +```text +Shows current active and installed runtime versions + +This is similar to `mise ls --current`, but this only shows the runtime +and/or version. It's designed to fit into scripts more easily. + +Usage: current [PLUGIN] + +Arguments: + [PLUGIN] + Plugin to show versions of e.g.: ruby, node, cargo:eza, npm:prettier, etc + +Examples: + # outputs `.tool-versions` compatible format + $ mise current + python 3.11.0 3.10.0 + shfmt 3.6.0 + shellcheck 0.9.0 + node 20.0.0 + + $ mise current node + 20.0.0 + + # can output multiple versions + $ mise current python + 3.11.0 3.10.0 +``` + +## `mise deactivate` + +```text +Disable mise for current shell session + +This can be used to temporarily disable mise in a shell session. + +Usage: deactivate + +Examples: + + $ mise deactivate bash + $ mise deactivate zsh + $ mise deactivate fish + $ execx($(mise deactivate xonsh)) +``` + +## `mise direnv activate` + +```text +Output direnv function to use mise inside direnv + +See https://mise.jdx.dev/direnv.html for more information + +Because this generates the legacy files based on currently installed plugins, +you should run this command after installing new plugins. Otherwise +direnv may not know to update environment variables when legacy file versions change. + +Usage: direnv activate + +Examples: + + $ mise direnv activate > ~/.config/direnv/lib/use_mise.sh + $ echo 'use mise' > .envrc + $ direnv allow +``` + +## `mise doctor` + +**Aliases:** `dr` + +```text +Check mise installation for possible problems + +Usage: doctor + +Examples: + + $ mise doctor + [WARN] plugin node is not installed +``` + +## `mise env [OPTIONS] [TOOL@VERSION]...` + +**Aliases:** `e` + +```text +Exports env vars to activate mise a single time + +Use this if you don't want to permanently install mise. It's not necessary to +use this if you have `mise activate` in your shell rc file. + +Usage: env [OPTIONS] [TOOL@VERSION]... + +Arguments: + [TOOL@VERSION]... + Tool(s) to use + +Options: + -J, --json + Output in JSON format + + -s, --shell + Shell type to generate environment variables for + + [possible values: bash, fish, nu, xonsh, zsh] + +Examples: + + $ eval "$(mise env -s bash)" + $ eval "$(mise env -s zsh)" + $ mise env -s fish | source + $ execx($(mise env -s xonsh)) +``` + +## `mise exec [OPTIONS] [TOOL@VERSION]... [-- ...]` + +**Aliases:** `x` + +```text +Execute a command with tool(s) set + +use this to avoid modifying the shell session or running ad-hoc commands with mise tools set. + +Tools will be loaded from .mise.toml/.tool-versions, though they can be overridden with args +Note that only the plugin specified will be overridden, so if a `.tool-versions` file +includes "node 20" but you run `mise exec python@3.11`; it will still load node@20. + +The "--" separates runtimes from the commands to pass along to the subprocess. + +Usage: exec [OPTIONS] [TOOL@VERSION]... [-- ...] + +Arguments: + [TOOL@VERSION]... + Tool(s) to start e.g.: node@20 python@3.10 + + [COMMAND]... + Command string to execute (same as --command) + +Options: + -c, --command + Command string to execute + + -j, --jobs + Number of jobs to run in parallel + [default: 4] + + [env: MISE_JOBS=] + + --raw + Directly pipe stdin/stdout/stderr from plugin to user Sets --jobs=1 + +Examples: + + $ mise exec node@20 -- node ./app.js # launch app.js using node-20.x + $ mise x node@20 -- node ./app.js # shorter alias + + # Specify command as a string: + $ mise exec node@20 python@3.11 --command "node -v && python -V" + + # Run a command in a different directory: + $ mise x -C /path/to/project node@20 -- node ./app.js +``` + +## `mise implode [OPTIONS]` + +```text +Removes mise CLI and all related data + +Skips config directory by default. + +Usage: implode [OPTIONS] + +Options: + --config + Also remove config directory + + -n, --dry-run + List directories that would be removed without actually removing them +``` + +## `mise install [OPTIONS] [TOOL@VERSION]...` + +**Aliases:** `i` + +```text +Install a tool version + +This will install a tool version to `~/.local/share/mise/installs//` +It won't be used simply by being installed, however. +For that, you must set up a `.mise.toml`/`.tool-version` file manually or with `mise use`. +Or you can call a tool version explicitly with `mise exec @ -- `. + +Tools will be installed in parallel. To disable, set `--jobs=1` or `MISE_JOBS=1` + +Usage: install [OPTIONS] [TOOL@VERSION]... + +Arguments: + [TOOL@VERSION]... + Tool(s) to install e.g.: node@20 + +Options: + -f, --force + Force reinstall even if already installed + + -j, --jobs + Number of jobs to run in parallel + [default: 4] + + [env: MISE_JOBS=] + + --raw + Directly pipe stdin/stdout/stderr from plugin to user Sets --jobs=1 + + -v, --verbose... + Show installation output + +Examples: + + $ mise install node@20.0.0 # install specific node version + $ mise install node@20 # install fuzzy node version + $ mise install node # install version specified in .tool-versions or .mise.toml + $ mise install # installs everything specified in .tool-versions or .mise.toml +``` + +## `mise latest [OPTIONS] ` + +```text +Gets the latest available version for a plugin + +Usage: latest [OPTIONS] + +Arguments: + + Tool to get the latest version of + +Options: + -i, --installed + Show latest installed instead of available version + +Examples: + + $ mise latest node@20 # get the latest version of node 20 + 20.0.0 + + $ mise latest node # get the latest stable version of node + 20.0.0 +``` + +## `mise link [OPTIONS] ` + +**Aliases:** `ln` + +```text +Symlinks a tool version into mise + +Use this for adding installs either custom compiled outside +mise or built with a different tool. + +Usage: link [OPTIONS] + +Arguments: + + Tool name and version to create a symlink for + + + The local path to the tool version + e.g.: ~/.nvm/versions/node/v20.0.0 + +Options: + -f, --force + Overwrite an existing tool version if it exists + +Examples: + # build node-20.0.0 with node-build and link it into mise + $ node-build 20.0.0 ~/.nodes/20.0.0 + $ mise link node@20.0.0 ~/.nodes/20.0.0 + + # have mise use the python version provided by Homebrew + $ brew install node + $ mise link node@brew $(brew --prefix node) + $ mise use node@brew +``` + +## `mise ls [OPTIONS] [PLUGIN]...` + +**Aliases:** `list` + +```text +List installed and active tool versions + +This command lists tools that mise "knows about". +These may be tools that are currently installed, or those +that are in a config file (active) but may or may not be installed. + +It's a useful command to get the current state of your tools. + +Usage: ls [OPTIONS] [PLUGIN]... + +Arguments: + [PLUGIN]... + Only show tool versions from [PLUGIN] + +Options: + -c, --current + Only show tool versions currently specified in a .tool-versions/.mise.toml + + -g, --global + Only show tool versions currently specified in a the global .tool-versions/.mise.toml + + -i, --installed + Only show tool versions that are installed (Hides tools defined in .tool-versions/.mise.toml but not installed) + + -J, --json + Output in json format + + -m, --missing + Display missing tool versions + + --prefix + Display versions matching this prefix + + --no-header + Don't display headers + +Examples: + + $ mise ls + node 20.0.0 ~/src/myapp/.tool-versions latest + python 3.11.0 ~/.tool-versions 3.10 + python 3.10.0 + + $ mise ls --current + node 20.0.0 ~/src/myapp/.tool-versions 20 + python 3.11.0 ~/.tool-versions 3.11.0 + + $ mise ls --json + { + "node": [ + { + "version": "20.0.0", + "install_path": "/Users/jdx/.mise/installs/node/20.0.0", + "source": { + "type": ".mise.toml", + "path": "/Users/jdx/.mise.toml" + } + } + ], + "python": [...] + } +``` + +## `mise ls-remote [OPTIONS] [TOOL@VERSION] [PREFIX]` + +```text +List runtime versions available for install + +note that the results are cached for 24 hours +run `mise cache clean` to clear the cache and get fresh results + +Usage: ls-remote [OPTIONS] [TOOL@VERSION] [PREFIX] + +Arguments: + [TOOL@VERSION] + Plugin to get versions for + + [PREFIX] + The version prefix to use when querying the latest version + same as the first argument after the "@" + +Options: + --all + Show all installed plugins and versions + +Examples: + + $ mise ls-remote node + 18.0.0 + 20.0.0 + + $ mise ls-remote node@20 + 20.0.0 + 20.1.0 + + $ mise ls-remote node 20 + 20.0.0 + 20.1.0 +``` + +## `mise outdated [TOOL@VERSION]...` + +```text +Shows outdated tool versions + +Usage: outdated [TOOL@VERSION]... + +Arguments: + [TOOL@VERSION]... + Tool(s) to show outdated versions for + e.g.: node@20 python@3.10 + If not specified, all tools in global and local configs will be shown + +Examples: + + $ mise outdated + Plugin Requested Current Latest + python 3.11 3.11.0 3.11.1 + node 20 20.0.0 20.1.0 + + $ mise outdated node + Plugin Requested Current Latest + node 20 20.0.0 20.1.0 +``` + +## `mise plugins install [OPTIONS] [NEW_PLUGIN] [GIT_URL]` + +**Aliases:** `a, add, i` + +```text +Install a plugin + +note that mise automatically can install plugins when you install a tool +e.g.: `mise install node@20` will autoinstall the node plugin + +This behavior can be modified in ~/.config/mise/config.toml + +Usage: plugins install [OPTIONS] [NEW_PLUGIN] [GIT_URL] + +Arguments: + [NEW_PLUGIN] + The name of the plugin to install + e.g.: node, ruby + Can specify multiple plugins: `mise plugins install node ruby python` + + [GIT_URL] + The git url of the plugin + +Options: + -f, --force + Reinstall even if plugin exists + + -a, --all + Install all missing plugins + This will only install plugins that have matching shorthands. + i.e.: they don't need the full git repo url + + -v, --verbose... + Show installation output + +Examples: + # install the node via shorthand + $ mise plugins install node + + # install the node plugin using a specific git url + $ mise plugins install node https://github.com/mise-plugins/rtx-nodejs.git + + # install the node plugin using the git url only + # (node is inferred from the url) + $ mise plugins install https://github.com/mise-plugins/rtx-nodejs.git + + # install the node plugin using a specific ref + $ mise plugins install node https://github.com/mise-plugins/rtx-nodejs.git#v1.0.0 +``` + +## `mise plugins link [OPTIONS] [PATH]` + +**Aliases:** `ln` + +```text +Symlinks a plugin into mise + +This is used for developing a plugin. + +Usage: plugins link [OPTIONS] [PATH] + +Arguments: + + The name of the plugin + e.g.: node, ruby + + [PATH] + The local path to the plugin + e.g.: ./mise-node + +Options: + -f, --force + Overwrite existing plugin + +Examples: + # essentially just `ln -s ./mise-node ~/.local/share/mise/plugins/node` + $ mise plugins link node ./mise-node + + # infer plugin name as "node" + $ mise plugins link ./mise-node +``` + +## `mise plugins ls [OPTIONS]` + +**Aliases:** `list` + +```text +List installed plugins + +Can also show remotely available plugins to install. + +Usage: plugins ls [OPTIONS] + +Options: + -c, --core + The built-in plugins only + Normally these are not shown + + --user + List installed plugins + + This is the default behavior but can be used with --core + to show core and user plugins + + -u, --urls + Show the git url for each plugin + e.g.: https://github.com/asdf-vm/asdf-nodejs.git + +Examples: + + $ mise plugins ls + node + ruby + + $ mise plugins ls --urls + node https://github.com/asdf-vm/asdf-nodejs.git + ruby https://github.com/asdf-vm/asdf-ruby.git +``` + +## `mise plugins ls-remote [OPTIONS]` + +**Aliases:** `list-all, list-remote` + +```text +List all available remote plugins + +The full list is here: https://github.com/jdx/mise/blob/main/src/default_shorthands.rs + +Examples: + $ mise plugins ls-remote + + +Usage: plugins ls-remote [OPTIONS] + +Options: + -u, --urls + Show the git url for each plugin e.g.: https://github.com/mise-plugins/rtx-nodejs.git + + --only-names + Only show the name of each plugin by default it will show a "*" next to installed plugins +``` + +## `mise plugins uninstall [OPTIONS] [PLUGIN]...` + +**Aliases:** `remove, rm` + +```text +Removes a plugin + +Usage: plugins uninstall [OPTIONS] [PLUGIN]... + +Arguments: + [PLUGIN]... + Plugin(s) to remove + +Options: + -p, --purge + Also remove the plugin's installs, downloads, and cache + + -a, --all + Remove all plugins + +Examples: + + $ mise uninstall node +``` + +## `mise plugins update [OPTIONS] [PLUGIN]...` + +**Aliases:** `up, upgrade` + +```text +Updates a plugin to the latest version + +note: this updates the plugin itself, not the runtime versions + +Usage: plugins update [OPTIONS] [PLUGIN]... + +Arguments: + [PLUGIN]... + Plugin(s) to update + +Options: + -j, --jobs + Number of jobs to run in parallel + Default: 4 + +Examples: + + $ mise plugins update # update all plugins + $ mise plugins update node # update only node + $ mise plugins update node#beta # specify a ref +``` + +## `mise prune [OPTIONS] [PLUGIN]...` + +```text +Delete unused versions of tools + +mise tracks which config files have been used in ~/.local/share/mise/tracked_config_files +Versions which are no longer the latest specified in any of those configs are deleted. +Versions installed only with environment variables (`MISE__VERSION`) will be deleted, +as will versions only referenced on the command line (`mise exec @`). + +Usage: prune [OPTIONS] [PLUGIN]... + +Arguments: + [PLUGIN]... + Prune only versions from this plugin(s) + +Options: + -n, --dry-run + Do not actually delete anything + +Examples: + + $ mise prune --dry-run + rm -rf ~/.local/share/mise/versions/node/20.0.0 + rm -rf ~/.local/share/mise/versions/node/20.0.1 +``` + +## `mise reshim` + +```text +rebuilds the shim farm + +This creates new shims in ~/.local/share/mise/shims for CLIs that have been added. +mise will try to do this automatically for commands like `npm i -g` but there are +other ways to install things (like using yarn or pnpm for node) that mise does +not know about and so it will be necessary to call this explicitly. + +If you think mise should automatically call this for a particular command, please +open an issue on the mise repo. You can also setup a shell function to reshim +automatically (it's really fast so you don't need to worry about overhead): + +npm() { + command npm "$@" + mise reshim +} + +Usage: reshim + +Examples: + + $ mise reshim + $ ~/.local/share/mise/shims/node -v + v20.0.0 +``` + +## `mise run [OPTIONS] [TASK] [ARGS]...` + +**Aliases:** `r` + +```text +[experimental] Run a tasks + +This command will run a tasks, or multiple tasks in parallel. +Tasks may have dependencies on other tasks or on source files. +If source is configured on a tasks, it will only run if the source +files have changed. + +Tasks can be defined in .mise.toml or as standalone scripts. +In .mise.toml, tasks take this form: + + [tasks.build] + run = "npm run build" + sources = ["src/**/*.ts"] + outputs = ["dist/**/*.js"] + +Alternatively, tasks can be defined as standalone scripts. +These must be located in the `.mise/tasks` directory. +The name of the script will be the name of the tasks. + + $ cat .mise/tasks/build< + Change to this directory before executing the command + + -n, --dry-run + Don't actually run the tasks(s), just print them in order of execution + + -f, --force + Force the tasks to run even if outputs are up to date + + -p, --prefix + Print stdout/stderr by line, prefixed with the tasks's label + Defaults to true if --jobs > 1 + Configure with `task_output` config or `MISE_TASK_OUTPUT` env var + + -i, --interleave + Print directly to stdout/stderr instead of by line + Defaults to true if --jobs == 1 + Configure with `task_output` config or `MISE_TASK_OUTPUT` env var + + -t, --tool + Tool(s) to also add e.g.: node@20 python@3.10 + + -j, --jobs + Number of tasks to run in parallel + [default: 4] + Configure with `jobs` config or `MISE_JOBS` env var + + [env: MISE_JOBS=] + + -r, --raw + Read/write directly to stdin/stdout/stderr instead of by line + Configure with `raw` config or `MISE_RAW` env var + + --timings + Shows elapsed time after each tasks + +Examples: + + # Runs the "lint" tasks. This needs to either be defined in .mise.toml + # or as a standalone script. See the project README for more information. + $ mise run lint + + # Forces the "build" tasks to run even if its sources are up-to-date. + $ mise run build --force + + # Run "test" with stdin/stdout/stderr all connected to the current terminal. + # This forces `--jobs=1` to prevent interleaving of output. + $ mise run test --raw + + # Runs the "lint", "test", and "check" tasks in parallel. + $ mise run lint ::: test ::: check + + # Execute multiple tasks each with their own arguments. + $ mise tasks cmd1 arg1 arg2 ::: cmd2 arg1 arg2 +``` + +## `mise self-update [OPTIONS] [VERSION]` + +```text +Updates mise itself + +Uses the GitHub Releases API to find the latest release and binary +By default, this will also update any installed plugins + +Usage: self-update [OPTIONS] [VERSION] + +Arguments: + [VERSION] + Update to a specific version + +Options: + -f, --force + Update even if already up to date + + --no-plugins + Disable auto-updating plugins + + -y, --yes + Skip confirmation prompt +``` + +## `mise set [OPTIONS] [ENV_VARS]...` + +```text +Manage environment variables + +By default this command modifies ".mise.toml" in the current directory. + +Usage: set [OPTIONS] [ENV_VARS]... + +Arguments: + [ENV_VARS]... + Environment variable(s) to set + e.g.: NODE_ENV=production + +Options: + --file + The TOML file to update + + Defaults to MISE_DEFAULT_CONFIG_FILENAME environment variable, or ".mise.toml". + + -g, --global + Set the environment variable in the global config file + +Examples: + + $ mise set NODE_ENV=production + + $ mise set NODE_ENV + production + + $ mise set + key value source + NODE_ENV production ~/.config/mise/config.toml +``` + +## `mise settings get ` + +```text +Show a current setting + +This is the contents of a single entry in ~/.config/mise/config.toml + +Note that aliases are also stored in this file +but managed separately with `mise aliases get` + +Usage: settings get + +Arguments: + + The setting to show + +Examples: + + $ mise settings get legacy_version_file + true +``` + +## `mise settings ls [OPTIONS]` + +**Aliases:** `list` + +```text +Show current settings + +This is the contents of ~/.config/mise/config.toml + +Note that aliases are also stored in this file +but managed separately with `mise aliases` + +Usage: settings ls [OPTIONS] + +Options: + --keys + Only display key names for each setting + +Examples: + + $ mise settings + legacy_version_file = false +``` + +## `mise settings set ` + +**Aliases:** `add, create` + +```text +Add/update a setting + +This modifies the contents of ~/.config/mise/config.toml + +Usage: settings set + +Arguments: + + The setting to set + + + The value to set + +Examples: + + $ mise settings set legacy_version_file true +``` + +## `mise settings unset ` + +**Aliases:** `del, delete, remove, rm` + +```text +Clears a setting + +This modifies the contents of ~/.config/mise/config.toml + +Usage: settings unset + +Arguments: + + The setting to remove + +Examples: + + $ mise settings unset legacy_version_file +``` + +## `mise shell [OPTIONS] [TOOL@VERSION]...` + +**Aliases:** `sh` + +```text +Sets a tool version for the current session + +Only works in a session where mise is already activated. + +This works by setting environment variables for the current shell session +such as `MISE_NODE_VERSION=20` which is "eval"ed as a shell function created +by `mise activate`. + +Usage: shell [OPTIONS] [TOOL@VERSION]... + +Arguments: + [TOOL@VERSION]... + Tool(s) to use + +Options: + -j, --jobs + Number of jobs to run in parallel + [default: 4] + + [env: MISE_JOBS=] + + --raw + Directly pipe stdin/stdout/stderr from plugin to user Sets --jobs=1 + + -u, --unset + Removes a previously set version + +Examples: + + $ mise shell node@20 + $ node -v + v20.0.0 +``` + +## `mise sync node <--brew|--nvm|--nodenv>` + +```text +Symlinks all tool versions from an external tool into mise + +For example, use this to import all Homebrew node installs into mise + +Usage: sync node <--brew|--nvm|--nodenv> + +Options: + --brew + Get tool versions from Homebrew + + --nvm + Get tool versions from nvm + + --nodenv + Get tool versions from nodenv + +Examples: + + $ brew install node@18 node@20 + $ mise sync node --brew + $ mise use -g node@18 - uses Homebrew-provided node +``` + +## `mise sync python --pyenv` + +```text +Symlinks all tool versions from an external tool into mise + +For example, use this to import all pyenv installs into mise + +Usage: sync python --pyenv + +Options: + --pyenv + Get tool versions from pyenv + +Examples: + + $ pyenv install 3.11.0 + $ mise sync python --pyenv + $ mise use -g python@3.11.0 - uses pyenv-provided python +``` + +## `mise tasks deps [OPTIONS] [TASKS]...` + +```text +[experimental] Display a tree visualization of a dependency graph + +Usage: tasks deps [OPTIONS] [TASKS]... + +Arguments: + [TASKS]... + Tasks to show dependencies for + Can specify multiple tasks by separating with spaces + e.g.: mise tasks deps lint test check + +Options: + --dot + Display dependencies in DOT format + +Examples: + + # Show dependencies for all tasks + $ mise tasks deps + + # Show dependencies for the "lint", "test" and "check" tasks + $ mise tasks deps lint test check + + # Show dependencies in DOT format + $ mise tasks deps --dot +``` + +## `mise tasks edit [OPTIONS] ` + +```text +[experimental] Edit a tasks with $EDITOR + +The tasks will be created as a standalone script if it does not already exist. + +Usage: tasks edit [OPTIONS] + +Arguments: + + Tasks to edit + +Options: + -p, --path + Display the path to the tasks instead of editing it + +Examples: + + $ mise tasks edit build + $ mise tasks edit test +``` + +## `mise tasks ls [OPTIONS]` + +```text +[experimental] List available tasks to execute +These may be included from the config file or from the project's .mise/tasks directory +mise will merge all tasks from all parent directories into this list. + +So if you have global tasks in ~/.config/mise/tasks/* and project-specific tasks in +~/myproject/.mise/tasks/*, then they'll both be available but the project-specific +tasks will override the global ones if they have the same name. + +Usage: tasks ls [OPTIONS] + +Options: + --no-header + Do not print table header + + --hidden + Show hidden tasks + +Examples: + + $ mise tasks ls +``` + +## `mise tasks run [OPTIONS] [TASK] [ARGS]...` + +**Aliases:** `r` + +```text +[experimental] Run a tasks + +This command will run a tasks, or multiple tasks in parallel. +Tasks may have dependencies on other tasks or on source files. +If source is configured on a tasks, it will only run if the source +files have changed. + +Tasks can be defined in .mise.toml or as standalone scripts. +In .mise.toml, tasks take this form: + + [tasks.build] + run = "npm run build" + sources = ["src/**/*.ts"] + outputs = ["dist/**/*.js"] + +Alternatively, tasks can be defined as standalone scripts. +These must be located in the `.mise/tasks` directory. +The name of the script will be the name of the tasks. + + $ cat .mise/tasks/build< + Change to this directory before executing the command + + -n, --dry-run + Don't actually run the tasks(s), just print them in order of execution + + -f, --force + Force the tasks to run even if outputs are up to date + + -p, --prefix + Print stdout/stderr by line, prefixed with the tasks's label + Defaults to true if --jobs > 1 + Configure with `task_output` config or `MISE_TASK_OUTPUT` env var + + -i, --interleave + Print directly to stdout/stderr instead of by line + Defaults to true if --jobs == 1 + Configure with `task_output` config or `MISE_TASK_OUTPUT` env var + + -t, --tool + Tool(s) to also add e.g.: node@20 python@3.10 + + -j, --jobs + Number of tasks to run in parallel + [default: 4] + Configure with `jobs` config or `MISE_JOBS` env var + + [env: MISE_JOBS=] + + -r, --raw + Read/write directly to stdin/stdout/stderr instead of by line + Configure with `raw` config or `MISE_RAW` env var + + --timings + Shows elapsed time after each tasks + +Examples: + + # Runs the "lint" tasks. This needs to either be defined in .mise.toml + # or as a standalone script. See the project README for more information. + $ mise run lint + + # Forces the "build" tasks to run even if its sources are up-to-date. + $ mise run build --force + + # Run "test" with stdin/stdout/stderr all connected to the current terminal. + # This forces `--jobs=1` to prevent interleaving of output. + $ mise run test --raw + + # Runs the "lint", "test", and "check" tasks in parallel. + $ mise run lint ::: test ::: check + + # Execute multiple tasks each with their own arguments. + $ mise tasks cmd1 arg1 arg2 ::: cmd2 arg1 arg2 +``` + +## `mise trust [OPTIONS] [CONFIG_FILE]` + +```text +Marks a config file as trusted + +This means mise will parse the file with potentially dangerous +features enabled. + +This includes: +- environment variables +- templates +- `path:` plugin versions + +Usage: trust [OPTIONS] [CONFIG_FILE] + +Arguments: + [CONFIG_FILE] + The config file to trust + +Options: + -a, --all + Trust all config files in the current directory and its parents + + --untrust + No longer trust this config + +Examples: + # trusts ~/some_dir/.mise.toml + $ mise trust ~/some_dir/.mise.toml + + # trusts .mise.toml in the current or parent directory + $ mise trust +``` + +## `mise uninstall [OPTIONS] [TOOL@VERSION]...` + +**Aliases:** `remove, rm` + +```text +Removes runtime versions + +Usage: uninstall [OPTIONS] [TOOL@VERSION]... + +Arguments: + [TOOL@VERSION]... + Tool(s) to remove + +Options: + -a, --all + Delete all installed versions + + -n, --dry-run + Do not actually delete anything + +Examples: + + $ mise uninstall node@18.0.0 # will uninstall specific version + $ mise uninstall node # will uninstall current node version + $ mise uninstall --all node@18.0.0 # will uninstall all node versions +``` + +## `mise unset [OPTIONS] [KEYS]...` + +```text +Remove environment variable(s) from the config file + +By default this command modifies ".mise.toml" in the current directory. + +Usage: unset [OPTIONS] [KEYS]... + +Arguments: + [KEYS]... + Environment variable(s) to remove + e.g.: NODE_ENV + +Options: + -f, --file + Specify a file to use instead of ".mise.toml" + + -g, --global + Use the global config file +``` + +## `mise upgrade [OPTIONS] [TOOL@VERSION]...` + +**Aliases:** `up` + +```text +Upgrades outdated tool versions + +Usage: upgrade [OPTIONS] [TOOL@VERSION]... + +Arguments: + [TOOL@VERSION]... + Tool(s) to upgrade + e.g.: node@20 python@3.10 + If not specified, all current tools will be upgraded + +Options: + -n, --dry-run + Just print what would be done, don't actually do it + + -j, --jobs + Number of jobs to run in parallel + [default: 4] + + [env: MISE_JOBS=] + + -i, --interactive + Display multiselect menu to choose which tools to upgrade + + --raw + Directly pipe stdin/stdout/stderr from plugin to user Sets --jobs=1 +``` + +## `mise usage` + +```text +Generate a usage CLI spec + +See https://usage.jdx.dev for more information + +Usage: usage +``` + +## `mise use [OPTIONS] [TOOL@VERSION]...` + +**Aliases:** `u` + +```text +Install tool version and add it to config + +This will install the tool if it is not already installed. +By default, this will use an `.mise.toml` file in the current directory. +Use the --global flag to use the global config file instead. +This replaces asdf's `local` and `global` commands, however those are still available in mise. + +Usage: use [OPTIONS] [TOOL@VERSION]... + +Arguments: + [TOOL@VERSION]... + Tool(s) to add to config file + e.g.: node@20, cargo:ripgrep@latest npm:prettier@3 + If no version is specified, it will default to @latest + +Options: + -f, --force + Force reinstall even if already installed + + --fuzzy + Save fuzzy version to config file + e.g.: `mise use --fuzzy node@20` will save 20 as the version + this is the default behavior unless MISE_ASDF_COMPAT=1 + + -g, --global + Use the global config file (~/.config/mise/config.toml) instead of the local one + + -e, --env + Modify an environment-specific config file like .mise..toml + + -j, --jobs + Number of jobs to run in parallel + [default: 4] + + [env: MISE_JOBS=] + + --raw + Directly pipe stdin/stdout/stderr from plugin to user Sets --jobs=1 + + --remove + Remove the plugin(s) from config file + + -p, --path + Specify a path to a config file or directory If a directory is specified, it will look for .mise.toml (default) or .tool-versions + + --pin + Save exact version to config file + e.g.: `mise use --pin node@20` will save 20.0.0 as the version + Set MISE_ASDF_COMPAT=1 to make this the default behavior + +Examples: + + # set the current version of node to 20.x in .mise.toml of current directory + # will write the fuzzy version (e.g.: 20) + $ mise use node@20 + + # set the current version of node to 20.x in ~/.config/mise/config.toml + # will write the precise version (e.g.: 20.0.0) + $ mise use -g --pin node@20 + + # sets .mise.local.toml (which is intended not to be committed to a project) + $ mise use --env local node@20 + + # sets .mise.staging.toml (which is used if MISE_ENV=staging) + $ mise use --env staging node@20 +``` + +## `mise version` + +```text +Show mise version + +Usage: version +``` + +## `mise watch [OPTIONS] [ARGS]...` + +**Aliases:** `w` + +```text +[experimental] Run a tasks watching for changes + +Usage: watch [OPTIONS] [ARGS]... + +Arguments: + [ARGS]... + Extra arguments + +Options: + -t, --task + Tasks to run + + [default: default] + + -g, --glob + Files to watch + Defaults to sources from the tasks(s) + +Examples: + $ mise watch -t build + Runs the "build" tasks. Will re-run the tasks when any of its sources change. + Uses "sources" from the tasks definition to determine which files to watch. + + $ mise watch -t build --glob src/**/*.rs + Runs the "build" tasks but specify the files to watch with a glob pattern. + This overrides the "sources" from the tasks definition. + + $ mise run -t build --clear + Extra arguments are passed to watchexec. See `watchexec --help` for details. +``` + +## `mise where ` + +```text +Display the installation path for a runtime + +Must be installed. + +Usage: where + +Arguments: + + Tool(s) to look up + e.g.: ruby@3 + if "@" is specified, it will show the latest installed version + that matches the prefix + otherwise, it will show the current, active installed version + +Examples: + # Show the latest installed version of node + # If it is is not installed, errors + $ mise where node@20 + /home/jdx/.local/share/mise/installs/node/20.0.0 + + # Show the current, active install directory of node + # Errors if node is not referenced in any .tool-version file + $ mise where node + /home/jdx/.local/share/mise/installs/node/20.0.0 +``` + +## `mise which [OPTIONS] ` + +```text +Shows the path that a bin name points to + +Usage: which [OPTIONS] + +Arguments: + + The bin name to look up + +Options: + --plugin + Show the plugin name instead of the path + + --version + Show the version instead of the path + + -t, --tool + Use a specific tool@version + e.g.: `mise which npm --tool=node@20` + +Examples: + + $ mise which node + /home/username/.local/share/mise/installs/node/20.0.0/bin/node + $ mise which node --plugin + node + $ mise which node --version + 20.0.0 +``` + + diff --git a/docs/demo.gif b/docs/demo.gif new file mode 100644 index 000000000..7e11432be Binary files /dev/null and b/docs/demo.gif differ diff --git a/docs/demo.sh b/docs/demo.sh new file mode 100755 index 000000000..f60cbf288 --- /dev/null +++ b/docs/demo.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash +set -e + +cd +mkdir -p ~/myproj +rm -rf ~/myproj/.* ~/.mise/installs ~/.config/mise +PATH="$HOME/.cargo/bin:$PATH" vhs <~/src/mise/docs/demo.tape +rm -rf ~/myproj diff --git a/docs/demo.tape b/docs/demo.tape new file mode 100644 index 000000000..521b76f58 --- /dev/null +++ b/docs/demo.tape @@ -0,0 +1,87 @@ +# VHS documentation +# +# Output: +# Output .gif Create a GIF output at the given +# Output .mp4 Create an MP4 output at the given +# Output .webm Create a WebM output at the given +# +# Require: +# Require Ensure a program is on the $PATH to proceed +# +# Settings: +# Set FontSize Set the font size of the terminal +# Set FontFamily Set the font family of the terminal +# Set Height Set the height of the terminal +# Set Width Set the width of the terminal +# Set LetterSpacing Set the font letter spacing (tracking) +# Set LineHeight Set the font line height +# Set LoopOffset % Set the starting frame offset for the GIF loop +# Set Theme Set the theme of the terminal +# Set Padding Set the padding of the terminal +# Set Framerate Set the framerate of the recording +# Set PlaybackSpeed Set the playback speed of the recording +# +# Sleep: +# Sleep