PyPI
| source | condition | target |
|---|---|---|
✔ | ✔ | ✗ |
Description
The pypi resource queries a PyPI-compatible registry for the versions of a Python package.
- source
Returns the version matching
versionfilter.- condition
Checks that
versionexists on the registry.- target
Not supported - a target fails with
target not supported for the pypi plugin. To bump a pinned version in a file, use the "File" resource or the pyproject autodiscovery crawler.
Note | An scm attached to a condition is ignored, with a warning (the lookup always goes to the registry). |
Parameters
| Name | Type | Description | Required |
|---|---|---|---|
| name | string | Name defines the PyPI package name. | |
| token | string | Token defines the Bearer token for private registries. | |
| url | string | URL defines the PyPI-compatible registry URL (defaults to https://pypi.org/). | |
| version | string | Version defines a specific package version for condition checks. | |
| versionfilter | object | VersionFilter provides parameters to specify version pattern and its type. | |
| kind | string | specifies the version kind such as semver, regex, or latest | |
| pattern | string | specifies the version pattern according the version kind for semver, it is a semver constraint for regex, it is a regex pattern for time, it is a date format | |
| regex | string | specifies the regex pattern, used for regex/semver and regex/time. Output of the first capture group will be used. | |
| replaceall | object | replaceAll applies a regex replacement to version strings before filtering. This is useful for transforming versions (e.g., curl-8_15_0 to curl-8.15.0) before regex extraction. | |
| strict | boolean | strict enforce strict versioning rule. Only used for semantic versioning at this time |
nameThe project name as published, e.g.
requests.urlDefaults to
https://pypi.org/. Point it at a private index that speaks the same JSON API.tokenBearer token for a private registry. Keep it out of the manifest with
'{{ requiredEnv "PYPI_TOKEN" }}'.versionCondition only - the version whose existence is being checked.
Versions, PEP 440 and yanked releases
Yanked releases are always excluded, whatever the filter. A version withdrawn by its maintainer is never returned by a source, matching what pip does by default.
PEP 440 and semver disagree about how a pre-release is written (1.2.3rc1 against 1.2.3-rc1), so the resource handles them differently depending on the filter:
kind: pep440Versions are compared as raw PEP 440 strings, untouched.
- any other kind
Versions are normalised to a semver-compatible form for matching, then the original PEP 440 string is returned. So a
semverfilter can match1.2.3-rc1internally while the source still yields1.2.3rc1, which is what a requirements file needs.
A version that cannot be normalised is skipped rather than failing the run. See the "Version Filtering" page.
Example
# updatecli.yaml
name: PyPI resource example
sources:
requests:
name: Get latest requests version from PyPI
kind: pypi
spec:
name: requests
flask:
name: Get latest flask version matching >=3.0
kind: pypi
spec:
name: flask
versionfilter:
kind: semver
pattern: ">=3.0.0"
conditions:
requests:
name: Test that requests version 2.31.0 exists on PyPI
kind: pypi
disablesourceinput: true
spec:
name: requests
version: 2.31.0
targets:
# Targets are not supported