90 lines
4.7 KiB
Markdown
90 lines
4.7 KiB
Markdown
# 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](https://github.com/actions/setup-python/issues/587#issuecomment-1455797407) 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:
|
|
|
|
```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:
|
|
|
|
| Input | Default | Description |
|
|
| -------------------------- | --------------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
|
|
| `python-version` | Not specified | Version range or exact version of a Python version to use, using SemVer's version range syntax. |
|
|
| `python-version-file` | `pyproject.toml` | File containing the Python version to use. Example: .`python-version` |
|
|
| `architecture` | `x64` | The target architecture (x86, x64, arm64) of the Python interpreter. |
|
|
| `allow-python-prereleases` | `false` | Allow 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. |
|
|
| `version` | Not specified | The version of PDM to install, or 'head' to install from the main branch. |
|
|
| `prerelease` | `false` | Allow prerelease versions of PDM to be installed |
|
|
| `enable-pep582` | `false` | Enable PEP 582 package loading globally. |
|
|
| `cache` | `false` | Cache PDM installation. |
|
|
| `cache-dependency-path` | `pdm.lock` | The dependency file(s) to cache. |
|
|
| `update-python` | `true` | Whether to update the environment with the requested Python |
|
|
|
|
## Action Outputs
|
|
|
|
This action also exposes the following outputs:
|
|
|
|
| Output | Description |
|
|
| ---------------- | --------------------------------------------------------------------------------- |
|
|
| `python-version` | The installed Python or PyPy version. Useful when given a version range as input. |
|
|
| `python-path` | The absolute path to the Python or PyPy executable. |
|
|
| `pdm-version` | The installed PDM version. |
|
|
| `pdm-bin` | The absolute path to the PDM executable. |
|
|
|
|
## Caches
|
|
|
|
This action has a built-in cache support. You can use it like this:
|
|
|
|
```yaml
|
|
- 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**
|
|
|
|
```yaml
|
|
- 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**
|
|
|
|
```yaml
|
|
- uses: pdm-project/setup-pdm@v3
|
|
with:
|
|
python-version: 3.9
|
|
cache: true
|
|
cache-dependency-path: '**/pdm.lock'
|
|
```
|