Examples

Minimal

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: fvutils/ivpm-setup@v1
      - run: ./packages/python/bin/python -m pytest

Pinned + matrix + custom dep-set

jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        python: ["3.10", "3.11", "3.12"]
    steps:
      - uses: actions/checkout@v4
      - uses: fvutils/ivpm-setup@v1
        with:
          version: "2.14.0"
          python-version: ${{ matrix.python }}
          installer: uv
          dep-set: ci
          cache-key-prefix: ivpm-${{ matrix.python }}

Note the per-matrix cache-key-prefix so each Python version keeps its own cache.

Setup-only (drive update manually)

steps:
  - uses: actions/checkout@v4
  - uses: fvutils/ivpm-setup@v1
    with:
      run-update: "false"
  - run: ivpm update -d gui-tools -j 4

The second step inherits IVPM_CACHE and the git-auth configuration from the action.

Running tools via direnv

For workspaces that pull in tools publishing export.envrc (e.g. EDA toolchains), run them inside the activated environment with direnv exec:

steps:
  - uses: actions/checkout@v4
  - uses: fvutils/ivpm-setup@v1
  - name: Enable direnv
    run: |
      sudo apt-get update && sudo apt-get install -y direnv
      direnv allow .
  - run: direnv exec . verilator --version
  - run: direnv exec . pytest

Requires a project-root .envrc that sources packages/packages.envrc (see the IVPM direnv documentation) and direnv installed on the runner.

Multiple dep-sets

- uses: fvutils/ivpm-setup@v1
  with:
    dep-set: |
      default
      ci

Private cross-repo dependencies

- uses: fvutils/ivpm-setup@v1
  with:
    token: ${{ secrets.IVPM_DEPS_TOKEN }}