Getting started

Prerequisites

  • A repository with an IVPM manifest (ivpm.yaml, and/or *.ivpm.yaml multi-file manifests).

  • A GitHub Actions workflow.

Minimal usage

name: CI
on: [push, pull_request]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: fvutils/ivpm-setup@v1
      - run: ./packages/python/bin/python -m pytest

That single ivpm-setup step installs IVPM, restores the cache, and runs ivpm update so ./packages is fully populated for subsequent steps.

Pinning IVPM

For reproducible CI, pin the IVPM version:

- uses: fvutils/ivpm-setup@v1
  with:
    version: "2.14.0"

Choosing a Python

By default the action uses whatever Python is already on the runner. To pick a specific version (the action will run actions/setup-python for you):

- uses: fvutils/ivpm-setup@v1
  with:
    python-version: "3.12"

Running workspace tools

After ivpm update populates ./packages, you can invoke the workspace tools two ways:

Directly (simplest for Python entry points):

- run: ./packages/python/bin/python -m pytest

Via direnv (recommended when your workspace pulls in tools that publish a export.envrc — e.g. EDA toolchains / EDAPack). ivpm update generates packages/packages.envrc; a project-root .envrc that does source_env packages/packages.envrc activates the whole environment, and direnv exec . <command> runs a command inside it:

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

This requires three things in place:

  1. direnv installed on the runner (not present by default).

  2. A project-root ``.envrc`` that sources packages/packages.envrc (see the IVPM direnv docs). For Python entry points, also add the venv bin (PATH_add packages/python/bin).

  3. ``direnv allow .`` before direnv exec — direnv refuses an unapproved .envrc.

See Inputs for the full set of options and Examples for more complete workflows.