Skip to content

Commit babd6da

Browse files
mkniewallnersecustor
andauthoredOct 26, 2024··
feat(pep621): add support for dependency-groups (PEP 735) (#32148)
Co-authored-by: Sebastian Poxhofer <secustor@users.noreply.github.com>
1 parent cc6696b commit babd6da

File tree

6 files changed

+61
-0
lines changed

6 files changed

+61
-0
lines changed
 

‎lib/modules/manager/pep621/__fixtures__/pyproject_with_pdm.toml

+5
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,11 @@ pytest = [
2525
"pytest-mock",
2626
]
2727

28+
[dependency-groups]
29+
typing = ["mypy==1.13.0", "types-requests"]
30+
coverage = ["pytest-cov==5.0.0"]
31+
all = [{include-group = "typing"}, {include-group = "coverage"}, "click==8.1.7"]
32+
2833
[tool.pdm.dev-dependencies]
2934
test = [
3035
"pdm[pytest]",

‎lib/modules/manager/pep621/extract.spec.ts

+41
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,47 @@ describe('modules/manager/pep621/extract', () => {
147147
},
148148
]);
149149

150+
const dependenciesFromDependencyGroups = result?.deps.filter(
151+
(dep) => dep.depType === 'dependency-groups',
152+
);
153+
expect(dependenciesFromDependencyGroups).toEqual([
154+
{
155+
packageName: 'mypy',
156+
datasource: 'pypi',
157+
depType: 'dependency-groups',
158+
currentValue: '==1.13.0',
159+
currentVersion: '1.13.0',
160+
depName: 'mypy',
161+
managerData: { depGroup: 'typing' },
162+
},
163+
{
164+
packageName: 'types-requests',
165+
datasource: 'pypi',
166+
depType: 'dependency-groups',
167+
skipReason: 'unspecified-version',
168+
depName: 'types-requests',
169+
managerData: { depGroup: 'typing' },
170+
},
171+
{
172+
packageName: 'pytest-cov',
173+
datasource: 'pypi',
174+
depType: 'dependency-groups',
175+
currentValue: '==5.0.0',
176+
currentVersion: '5.0.0',
177+
depName: 'pytest-cov',
178+
managerData: { depGroup: 'coverage' },
179+
},
180+
{
181+
packageName: 'click',
182+
datasource: 'pypi',
183+
depType: 'dependency-groups',
184+
currentValue: '==8.1.7',
185+
currentVersion: '8.1.7',
186+
depName: 'click',
187+
managerData: { depGroup: 'all' },
188+
},
189+
]);
190+
150191
const pdmDevDependencies = result?.deps.filter(
151192
(dep) => dep.depType === 'tool.pdm.dev-dependencies',
152193
);

‎lib/modules/manager/pep621/extract.ts

+6
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,12 @@ export async function extractPackageFile(
3737
deps.push(
3838
...parseDependencyList(depTypes.dependencies, def.project?.dependencies),
3939
);
40+
deps.push(
41+
...parseDependencyGroupRecord(
42+
depTypes.dependencyGroups,
43+
def['dependency-groups'],
44+
),
45+
);
4046
deps.push(
4147
...parseDependencyGroupRecord(
4248
depTypes.optionalDependencies,

‎lib/modules/manager/pep621/readme.md

+1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ Available `depType`s:
1010

1111
- `project.dependencies`
1212
- `project.optional-dependencies`
13+
- `dependency-groups`
1314
- `build-system.requires`
1415
- `tool.pdm.dev-dependencies`
1516
- `tool.uv.dev-dependencies`

‎lib/modules/manager/pep621/schema.ts

+7
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,13 @@ export const PyProjectSchema = z.object({
8383
'build-backend': z.string().optional(),
8484
})
8585
.optional(),
86+
'dependency-groups': z
87+
.record(
88+
z.string(),
89+
// Skip non-string entries, like `{include-group = "typing"}`, as they are not dependencies.
90+
LooseArray(z.string()),
91+
)
92+
.optional(),
8693
tool: z
8794
.object({
8895
pdm: PdmSchema.optional(),

‎lib/modules/manager/pep621/utils.ts

+1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ const pep508Regex = regEx(
1616
export const depTypes = {
1717
dependencies: 'project.dependencies',
1818
optionalDependencies: 'project.optional-dependencies',
19+
dependencyGroups: 'dependency-groups',
1920
pdmDevDependencies: 'tool.pdm.dev-dependencies',
2021
uvDevDependencies: 'tool.uv.dev-dependencies',
2122
uvSources: 'tool.uv.sources',

0 commit comments

Comments
 (0)
Please sign in to comment.