Home

Awesome

Setup PDM for GitHub Action

A GitHub Action that installs pdm properly for all Python versions

Why do I need this action?

Nowadays the main reason to use this action is that actions/setup-python doesn't support caching for PDM out of the box while setup-pdm does.

Historically, this action made it easier to use PDM in repos where the Python version in use was older than the Python version required by PDM. PDM requires >=3.8 but works for projects using older versions.

Usage

Include the action in your workflow yaml:

steps:
  - uses: actions/checkout@v4
  - name: Setup PDM
    uses: pdm-project/setup-pdm@v4
    # You are now able to use PDM in your workflow
  - name: Install dependencies
    run: pdm install

You don't need actions/setup-python actually.

Action Inputs

This action supports the following inputs:

InputDefaultDescription
python-versionNot specifiedVersion range or exact version of a Python version to use, using SemVer's version range syntax.
python-version-filepyproject.tomlFile containing the Python version to use. Example: .python-version
architecturex64The target architecture (x86, x64) of the Python interpreter.
allow-python-prereleasesfalseAllow prerelease versions of Python to be installed.
token${{ github.token }}Used to pull python distributions from actions/python-versions. Since there's a default, this is typically not supplied by the user.
versionNot specifiedThe version of PDM to install, or 'head' to install from the main branch.
prereleasefalseAllow prerelease versions of PDM to be installed
enable-pep582falseEnable PEP 582 package loading globally.
cachefalseCache PDM installation.
cache-dependency-pathpdm.lockThe dependency file(s) to cache.
update-pythontrueWhether to update the environment with the requested Python

Action Outputs

This action also exposes the following outputs:

OutputDescription
python-versionThe installed Python or PyPy version. Useful when given a version range as input.
python-pathThe absolute path to the Python or PyPy executable.
pdm-versionThe installed PDM version.
pdm-binThe absolute path to the PDM executable.

Caches

This action has a built-in cache support. You can use it like this:

- uses: pdm-project/setup-pdm@v3
  with:
    python-version: 3.9
    cache: true

The default path to calculate the cache key is ./pdm.lock, you can change it by setting the cache-dependency-path input.

Using a list of file paths to cache dependencies

- uses: pdm-project/setup-pdm@v3
  with:
    python-version: 3.9
    cache: true
    cache-dependency-path: |
      ./pdm.lock
      ./pdm.new.lock

Using a glob pattern to cache dependencies

- uses: pdm-project/setup-pdm@v3
  with:
    python-version: 3.9
    cache: true
    cache-dependency-path: '**/pdm.lock'