dependabot-composer 0.390.0 → 0.392.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/helpers/v2/composer.lock +54 -57
- data/lib/dependabot/composer/file_fetcher/path_dependency_builder.rb +3 -3
- data/lib/dependabot/composer/file_updater/lockfile_updater.rb +3 -3
- data/lib/dependabot/composer/file_updater/manifest_updater.rb +9 -9
- data/lib/dependabot/composer/helpers.rb +10 -22
- data/lib/dependabot/composer/metadata_finder.rb +1 -6
- data/lib/dependabot/composer/update_checker/latest_version_finder.rb +2 -2
- data/lib/dependabot/composer/update_checker/requirements_updater.rb +34 -17
- data/lib/dependabot/composer/update_checker/version_resolver.rb +18 -25
- data/lib/dependabot/composer/update_checker.rb +2 -2
- metadata +4 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 90874526a1c8b9f36669040be08ce71794578d3844f3d0aa97fe80e831ee5b4b
|
|
4
|
+
data.tar.gz: d940cd0bef070dac30dc9a4f54a88e9a10601fc9a4cb5711dd0667b466bacdb6
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: e044682e96915f3f126ebf844a71e7c150398a518660fa771003ecc196c52836d35c4b77736dbe7aa0813a062d181d05ca0e4c091ac87af2859b75605d2c9ed2
|
|
7
|
+
data.tar.gz: b7e61669d528f52aecdf68e17a668163863d4d0e013632c7a354848d28c972a9a3817d56aa4f5d86c836d361f9dc6ed2c38f8e24e6f0d0725e2d69f53bc785a8
|
data/helpers/v2/composer.lock
CHANGED
|
@@ -331,28 +331,29 @@
|
|
|
331
331
|
},
|
|
332
332
|
{
|
|
333
333
|
"name": "composer/pcre",
|
|
334
|
-
"version": "3.
|
|
334
|
+
"version": "3.4.0",
|
|
335
335
|
"source": {
|
|
336
336
|
"type": "git",
|
|
337
337
|
"url": "https://github.com/composer/pcre.git",
|
|
338
|
-
"reference": "
|
|
338
|
+
"reference": "d5a341b3fb61f3001970940afb1d332968a183ed"
|
|
339
339
|
},
|
|
340
340
|
"dist": {
|
|
341
341
|
"type": "zip",
|
|
342
|
-
"url": "https://api.github.com/repos/composer/pcre/zipball/
|
|
343
|
-
"reference": "
|
|
342
|
+
"url": "https://api.github.com/repos/composer/pcre/zipball/d5a341b3fb61f3001970940afb1d332968a183ed",
|
|
343
|
+
"reference": "d5a341b3fb61f3001970940afb1d332968a183ed",
|
|
344
344
|
"shasum": ""
|
|
345
345
|
},
|
|
346
346
|
"require": {
|
|
347
347
|
"php": "^7.4 || ^8.0"
|
|
348
348
|
},
|
|
349
349
|
"conflict": {
|
|
350
|
-
"phpstan/phpstan": "<
|
|
350
|
+
"phpstan/phpstan": "<2.2.2"
|
|
351
351
|
},
|
|
352
352
|
"require-dev": {
|
|
353
|
-
"phpstan/phpstan": "^
|
|
354
|
-
"phpstan/phpstan-
|
|
355
|
-
"
|
|
353
|
+
"phpstan/phpstan": "^2",
|
|
354
|
+
"phpstan/phpstan-deprecation-rules": "^2",
|
|
355
|
+
"phpstan/phpstan-strict-rules": "^2",
|
|
356
|
+
"phpunit/phpunit": "^9"
|
|
356
357
|
},
|
|
357
358
|
"type": "library",
|
|
358
359
|
"extra": {
|
|
@@ -390,7 +391,7 @@
|
|
|
390
391
|
],
|
|
391
392
|
"support": {
|
|
392
393
|
"issues": "https://github.com/composer/pcre/issues",
|
|
393
|
-
"source": "https://github.com/composer/pcre/tree/3.
|
|
394
|
+
"source": "https://github.com/composer/pcre/tree/3.4.0"
|
|
394
395
|
},
|
|
395
396
|
"funding": [
|
|
396
397
|
{
|
|
@@ -400,13 +401,9 @@
|
|
|
400
401
|
{
|
|
401
402
|
"url": "https://github.com/composer",
|
|
402
403
|
"type": "github"
|
|
403
|
-
},
|
|
404
|
-
{
|
|
405
|
-
"url": "https://tidelift.com/funding/github/packagist/composer/composer",
|
|
406
|
-
"type": "tidelift"
|
|
407
404
|
}
|
|
408
405
|
],
|
|
409
|
-
"time": "
|
|
406
|
+
"time": "2026-06-07T11:47:49+00:00"
|
|
410
407
|
},
|
|
411
408
|
{
|
|
412
409
|
"name": "composer/semver",
|
|
@@ -1130,16 +1127,16 @@
|
|
|
1130
1127
|
},
|
|
1131
1128
|
{
|
|
1132
1129
|
"name": "symfony/console",
|
|
1133
|
-
"version": "v7.4.
|
|
1130
|
+
"version": "v7.4.15",
|
|
1134
1131
|
"source": {
|
|
1135
1132
|
"type": "git",
|
|
1136
1133
|
"url": "https://github.com/symfony/console.git",
|
|
1137
|
-
"reference": "
|
|
1134
|
+
"reference": "088ec6fe0ef6819cbc301174093b6bfa4ad26930"
|
|
1138
1135
|
},
|
|
1139
1136
|
"dist": {
|
|
1140
1137
|
"type": "zip",
|
|
1141
|
-
"url": "https://api.github.com/repos/symfony/console/zipball/
|
|
1142
|
-
"reference": "
|
|
1138
|
+
"url": "https://api.github.com/repos/symfony/console/zipball/088ec6fe0ef6819cbc301174093b6bfa4ad26930",
|
|
1139
|
+
"reference": "088ec6fe0ef6819cbc301174093b6bfa4ad26930",
|
|
1143
1140
|
"shasum": ""
|
|
1144
1141
|
},
|
|
1145
1142
|
"require": {
|
|
@@ -1204,7 +1201,7 @@
|
|
|
1204
1201
|
"terminal"
|
|
1205
1202
|
],
|
|
1206
1203
|
"support": {
|
|
1207
|
-
"source": "https://github.com/symfony/console/tree/v7.4.
|
|
1204
|
+
"source": "https://github.com/symfony/console/tree/v7.4.15"
|
|
1208
1205
|
},
|
|
1209
1206
|
"funding": [
|
|
1210
1207
|
{
|
|
@@ -1224,7 +1221,7 @@
|
|
|
1224
1221
|
"type": "tidelift"
|
|
1225
1222
|
}
|
|
1226
1223
|
],
|
|
1227
|
-
"time": "2026-
|
|
1224
|
+
"time": "2026-07-27T13:51:00+00:00"
|
|
1228
1225
|
},
|
|
1229
1226
|
{
|
|
1230
1227
|
"name": "symfony/deprecation-contracts",
|
|
@@ -1299,16 +1296,16 @@
|
|
|
1299
1296
|
},
|
|
1300
1297
|
{
|
|
1301
1298
|
"name": "symfony/filesystem",
|
|
1302
|
-
"version": "v7.4.
|
|
1299
|
+
"version": "v7.4.15",
|
|
1303
1300
|
"source": {
|
|
1304
1301
|
"type": "git",
|
|
1305
1302
|
"url": "https://github.com/symfony/filesystem.git",
|
|
1306
|
-
"reference": "
|
|
1303
|
+
"reference": "ff16a16bf87fdf264638b8f6995b3515975e3c79"
|
|
1307
1304
|
},
|
|
1308
1305
|
"dist": {
|
|
1309
1306
|
"type": "zip",
|
|
1310
|
-
"url": "https://api.github.com/repos/symfony/filesystem/zipball/
|
|
1311
|
-
"reference": "
|
|
1307
|
+
"url": "https://api.github.com/repos/symfony/filesystem/zipball/ff16a16bf87fdf264638b8f6995b3515975e3c79",
|
|
1308
|
+
"reference": "ff16a16bf87fdf264638b8f6995b3515975e3c79",
|
|
1312
1309
|
"shasum": ""
|
|
1313
1310
|
},
|
|
1314
1311
|
"require": {
|
|
@@ -1345,7 +1342,7 @@
|
|
|
1345
1342
|
"description": "Provides basic utilities for the filesystem",
|
|
1346
1343
|
"homepage": "https://symfony.com",
|
|
1347
1344
|
"support": {
|
|
1348
|
-
"source": "https://github.com/symfony/filesystem/tree/v7.4.
|
|
1345
|
+
"source": "https://github.com/symfony/filesystem/tree/v7.4.15"
|
|
1349
1346
|
},
|
|
1350
1347
|
"funding": [
|
|
1351
1348
|
{
|
|
@@ -1365,7 +1362,7 @@
|
|
|
1365
1362
|
"type": "tidelift"
|
|
1366
1363
|
}
|
|
1367
1364
|
],
|
|
1368
|
-
"time": "2026-
|
|
1365
|
+
"time": "2026-07-22T07:36:05+00:00"
|
|
1369
1366
|
},
|
|
1370
1367
|
{
|
|
1371
1368
|
"name": "symfony/finder",
|
|
@@ -1520,16 +1517,16 @@
|
|
|
1520
1517
|
},
|
|
1521
1518
|
{
|
|
1522
1519
|
"name": "symfony/polyfill-intl-grapheme",
|
|
1523
|
-
"version": "v1.
|
|
1520
|
+
"version": "v1.41.0",
|
|
1524
1521
|
"source": {
|
|
1525
1522
|
"type": "git",
|
|
1526
1523
|
"url": "https://github.com/symfony/polyfill-intl-grapheme.git",
|
|
1527
|
-
"reference": "
|
|
1524
|
+
"reference": "bb899c1db0aa8127dc3afe8cda4a67eb24915f8d"
|
|
1528
1525
|
},
|
|
1529
1526
|
"dist": {
|
|
1530
1527
|
"type": "zip",
|
|
1531
|
-
"url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/
|
|
1532
|
-
"reference": "
|
|
1528
|
+
"url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/bb899c1db0aa8127dc3afe8cda4a67eb24915f8d",
|
|
1529
|
+
"reference": "bb899c1db0aa8127dc3afe8cda4a67eb24915f8d",
|
|
1533
1530
|
"shasum": ""
|
|
1534
1531
|
},
|
|
1535
1532
|
"require": {
|
|
@@ -1578,7 +1575,7 @@
|
|
|
1578
1575
|
"shim"
|
|
1579
1576
|
],
|
|
1580
1577
|
"support": {
|
|
1581
|
-
"source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.
|
|
1578
|
+
"source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.41.0"
|
|
1582
1579
|
},
|
|
1583
1580
|
"funding": [
|
|
1584
1581
|
{
|
|
@@ -1598,7 +1595,7 @@
|
|
|
1598
1595
|
"type": "tidelift"
|
|
1599
1596
|
}
|
|
1600
1597
|
],
|
|
1601
|
-
"time": "2026-
|
|
1598
|
+
"time": "2026-07-28T08:25:59+00:00"
|
|
1602
1599
|
},
|
|
1603
1600
|
{
|
|
1604
1601
|
"name": "symfony/polyfill-intl-normalizer",
|
|
@@ -2248,16 +2245,16 @@
|
|
|
2248
2245
|
},
|
|
2249
2246
|
{
|
|
2250
2247
|
"name": "symfony/string",
|
|
2251
|
-
"version": "v7.4.
|
|
2248
|
+
"version": "v7.4.15",
|
|
2252
2249
|
"source": {
|
|
2253
2250
|
"type": "git",
|
|
2254
2251
|
"url": "https://github.com/symfony/string.git",
|
|
2255
|
-
"reference": "
|
|
2252
|
+
"reference": "e394af32256bf9e7bf80849d95e589167c10097b"
|
|
2256
2253
|
},
|
|
2257
2254
|
"dist": {
|
|
2258
2255
|
"type": "zip",
|
|
2259
|
-
"url": "https://api.github.com/repos/symfony/string/zipball/
|
|
2260
|
-
"reference": "
|
|
2256
|
+
"url": "https://api.github.com/repos/symfony/string/zipball/e394af32256bf9e7bf80849d95e589167c10097b",
|
|
2257
|
+
"reference": "e394af32256bf9e7bf80849d95e589167c10097b",
|
|
2261
2258
|
"shasum": ""
|
|
2262
2259
|
},
|
|
2263
2260
|
"require": {
|
|
@@ -2315,7 +2312,7 @@
|
|
|
2315
2312
|
"utf8"
|
|
2316
2313
|
],
|
|
2317
2314
|
"support": {
|
|
2318
|
-
"source": "https://github.com/symfony/string/tree/v7.4.
|
|
2315
|
+
"source": "https://github.com/symfony/string/tree/v7.4.15"
|
|
2319
2316
|
},
|
|
2320
2317
|
"funding": [
|
|
2321
2318
|
{
|
|
@@ -2335,7 +2332,7 @@
|
|
|
2335
2332
|
"type": "tidelift"
|
|
2336
2333
|
}
|
|
2337
2334
|
],
|
|
2338
|
-
"time": "2026-
|
|
2335
|
+
"time": "2026-07-28T07:33:02+00:00"
|
|
2339
2336
|
}
|
|
2340
2337
|
],
|
|
2341
2338
|
"packages-dev": [
|
|
@@ -2582,16 +2579,16 @@
|
|
|
2582
2579
|
},
|
|
2583
2580
|
{
|
|
2584
2581
|
"name": "friendsofphp/php-cs-fixer",
|
|
2585
|
-
"version": "v3.95.
|
|
2582
|
+
"version": "v3.95.18",
|
|
2586
2583
|
"source": {
|
|
2587
2584
|
"type": "git",
|
|
2588
2585
|
"url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git",
|
|
2589
|
-
"reference": "
|
|
2586
|
+
"reference": "a8b4e4216faabf67f4e96110ee99a48c96e4e683"
|
|
2590
2587
|
},
|
|
2591
2588
|
"dist": {
|
|
2592
2589
|
"type": "zip",
|
|
2593
|
-
"url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/
|
|
2594
|
-
"reference": "
|
|
2590
|
+
"url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/a8b4e4216faabf67f4e96110ee99a48c96e4e683",
|
|
2591
|
+
"reference": "a8b4e4216faabf67f4e96110ee99a48c96e4e683",
|
|
2595
2592
|
"shasum": ""
|
|
2596
2593
|
},
|
|
2597
2594
|
"require": {
|
|
@@ -2631,10 +2628,10 @@
|
|
|
2631
2628
|
"php-coveralls/php-coveralls": "^2.9.1",
|
|
2632
2629
|
"php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.8",
|
|
2633
2630
|
"php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.8",
|
|
2634
|
-
"phpunit/phpunit": "^9.6.35 || ^10.5.64 || ^11.5.56 || ^12.5.31",
|
|
2631
|
+
"phpunit/phpunit": "^9.6.35 || ^10.5.64 || ^11.5.56 || ^12.5.31 || ^13.0.6",
|
|
2635
2632
|
"symfony/polyfill-php85": "^1.38",
|
|
2636
|
-
"symfony/var-dumper": "^5.4.48 || ^6.4.36 || ^7.4.8 || ^8.1.
|
|
2637
|
-
"symfony/yaml": "^5.4.53 || ^6.4.41 || ^7.4.13 || ^8.1.
|
|
2633
|
+
"symfony/var-dumper": "^5.4.48 || ^6.4.36 || ^7.4.8 || ^8.1.1",
|
|
2634
|
+
"symfony/yaml": "^5.4.53 || ^6.4.41 || ^7.4.13 || ^8.1.1"
|
|
2638
2635
|
},
|
|
2639
2636
|
"suggest": {
|
|
2640
2637
|
"ext-dom": "For handling output formats in XML",
|
|
@@ -2675,7 +2672,7 @@
|
|
|
2675
2672
|
],
|
|
2676
2673
|
"support": {
|
|
2677
2674
|
"issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues",
|
|
2678
|
-
"source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.95.
|
|
2675
|
+
"source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.95.18"
|
|
2679
2676
|
},
|
|
2680
2677
|
"funding": [
|
|
2681
2678
|
{
|
|
@@ -2683,15 +2680,15 @@
|
|
|
2683
2680
|
"type": "github"
|
|
2684
2681
|
}
|
|
2685
2682
|
],
|
|
2686
|
-
"time": "2026-07-
|
|
2683
|
+
"time": "2026-07-30T15:46:02+00:00"
|
|
2687
2684
|
},
|
|
2688
2685
|
{
|
|
2689
2686
|
"name": "phpstan/phpstan",
|
|
2690
|
-
"version": "2.2.
|
|
2687
|
+
"version": "2.2.8",
|
|
2691
2688
|
"dist": {
|
|
2692
2689
|
"type": "zip",
|
|
2693
|
-
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/
|
|
2694
|
-
"reference": "
|
|
2690
|
+
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/e285254e60f33c21902efef4a926ca0987c06804",
|
|
2691
|
+
"reference": "e285254e60f33c21902efef4a926ca0987c06804",
|
|
2695
2692
|
"shasum": ""
|
|
2696
2693
|
},
|
|
2697
2694
|
"require": {
|
|
@@ -2747,7 +2744,7 @@
|
|
|
2747
2744
|
"type": "github"
|
|
2748
2745
|
}
|
|
2749
2746
|
],
|
|
2750
|
-
"time": "2026-
|
|
2747
|
+
"time": "2026-08-04T22:21:45+00:00"
|
|
2751
2748
|
},
|
|
2752
2749
|
{
|
|
2753
2750
|
"name": "psr/event-dispatcher",
|
|
@@ -3321,16 +3318,16 @@
|
|
|
3321
3318
|
},
|
|
3322
3319
|
{
|
|
3323
3320
|
"name": "symfony/event-dispatcher",
|
|
3324
|
-
"version": "v7.4.
|
|
3321
|
+
"version": "v7.4.15",
|
|
3325
3322
|
"source": {
|
|
3326
3323
|
"type": "git",
|
|
3327
3324
|
"url": "https://github.com/symfony/event-dispatcher.git",
|
|
3328
|
-
"reference": "
|
|
3325
|
+
"reference": "336e7f3b9e95aba04f93ea9143920c2186abfbb9"
|
|
3329
3326
|
},
|
|
3330
3327
|
"dist": {
|
|
3331
3328
|
"type": "zip",
|
|
3332
|
-
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/
|
|
3333
|
-
"reference": "
|
|
3329
|
+
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/336e7f3b9e95aba04f93ea9143920c2186abfbb9",
|
|
3330
|
+
"reference": "336e7f3b9e95aba04f93ea9143920c2186abfbb9",
|
|
3334
3331
|
"shasum": ""
|
|
3335
3332
|
},
|
|
3336
3333
|
"require": {
|
|
@@ -3382,7 +3379,7 @@
|
|
|
3382
3379
|
"description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
|
|
3383
3380
|
"homepage": "https://symfony.com",
|
|
3384
3381
|
"support": {
|
|
3385
|
-
"source": "https://github.com/symfony/event-dispatcher/tree/v7.4.
|
|
3382
|
+
"source": "https://github.com/symfony/event-dispatcher/tree/v7.4.15"
|
|
3386
3383
|
},
|
|
3387
3384
|
"funding": [
|
|
3388
3385
|
{
|
|
@@ -3402,7 +3399,7 @@
|
|
|
3402
3399
|
"type": "tidelift"
|
|
3403
3400
|
}
|
|
3404
3401
|
],
|
|
3405
|
-
"time": "2026-
|
|
3402
|
+
"time": "2026-07-21T15:13:06+00:00"
|
|
3406
3403
|
},
|
|
3407
3404
|
{
|
|
3408
3405
|
"name": "symfony/event-dispatcher-contracts",
|
|
@@ -16,9 +16,9 @@ module Dependabot
|
|
|
16
16
|
|
|
17
17
|
sig { params(path: String, directory: String, lockfile: T.nilable(Dependabot::DependencyFile)).void }
|
|
18
18
|
def initialize(path:, directory:, lockfile:)
|
|
19
|
-
@path =
|
|
20
|
-
@directory =
|
|
21
|
-
@lockfile =
|
|
19
|
+
@path = path
|
|
20
|
+
@directory = directory
|
|
21
|
+
@lockfile = lockfile
|
|
22
22
|
@parsed_lockfile = T.let(nil, T.nilable(T::Hash[String, T.untyped]))
|
|
23
23
|
end
|
|
24
24
|
|
|
@@ -29,7 +29,7 @@ module Dependabot
|
|
|
29
29
|
|
|
30
30
|
sig { params(extensions: T::Array[T::Hash[Symbol, String]]).void }
|
|
31
31
|
def initialize(extensions)
|
|
32
|
-
@extensions =
|
|
32
|
+
@extensions = extensions
|
|
33
33
|
super
|
|
34
34
|
end
|
|
35
35
|
end
|
|
@@ -320,8 +320,8 @@ module Dependabot
|
|
|
320
320
|
next content unless Composer::Version.correct?(updated_req)
|
|
321
321
|
|
|
322
322
|
old_req =
|
|
323
|
-
dep.requirements.find { |r| r
|
|
324
|
-
&.
|
|
323
|
+
dep.requirements.find { |r| r.file == PackageManager::MANIFEST_FILENAME }
|
|
324
|
+
&.requirement_string
|
|
325
325
|
|
|
326
326
|
# When updating a subdep there won't be an old requirement
|
|
327
327
|
next content unless old_req
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# typed:
|
|
1
|
+
# typed: strong
|
|
2
2
|
# frozen_string_literal: true
|
|
3
3
|
|
|
4
4
|
require "sorbet-runtime"
|
|
@@ -23,8 +23,8 @@ module Dependabot
|
|
|
23
23
|
dependencies.reduce(manifest.content.dup) do |content, dep|
|
|
24
24
|
updated_content = content
|
|
25
25
|
updated_requirements(dep).each do |new_req|
|
|
26
|
-
old_req = old_requirement(dep, new_req)&.
|
|
27
|
-
updated_req = new_req.
|
|
26
|
+
old_req = T.must(old_requirement(dep, new_req)&.requirement_string)
|
|
27
|
+
updated_req = T.must(new_req.requirement_string)
|
|
28
28
|
|
|
29
29
|
regex =
|
|
30
30
|
/
|
|
@@ -54,20 +54,20 @@ module Dependabot
|
|
|
54
54
|
|
|
55
55
|
sig { params(dependency: Dependabot::Dependency).returns(T::Array[Dependabot::DependencyRequirement]) }
|
|
56
56
|
def new_requirements(dependency)
|
|
57
|
-
dependency.requirements.select { |r| r
|
|
57
|
+
dependency.requirements.select { |r| r.file == manifest.name }
|
|
58
58
|
end
|
|
59
59
|
|
|
60
60
|
sig do
|
|
61
61
|
params(
|
|
62
62
|
dependency: Dependabot::Dependency,
|
|
63
|
-
new_requirement:
|
|
63
|
+
new_requirement: Dependabot::DependencyRequirement
|
|
64
64
|
)
|
|
65
|
-
.returns(T.nilable(
|
|
65
|
+
.returns(T.nilable(Dependabot::DependencyRequirement))
|
|
66
66
|
end
|
|
67
67
|
def old_requirement(dependency, new_requirement)
|
|
68
68
|
T.must(dependency.previous_requirements)
|
|
69
|
-
.select { |r| r
|
|
70
|
-
.find { |r| r
|
|
69
|
+
.select { |r| r.file == manifest.name }
|
|
70
|
+
.find { |r| r.groups == new_requirement.groups }
|
|
71
71
|
end
|
|
72
72
|
|
|
73
73
|
sig { params(dependency: Dependabot::Dependency).returns(T::Array[Dependabot::DependencyRequirement]) }
|
|
@@ -81,7 +81,7 @@ module Dependabot
|
|
|
81
81
|
changed_requirements =
|
|
82
82
|
dependency.requirements - T.must(dependency.previous_requirements)
|
|
83
83
|
|
|
84
|
-
changed_requirements.any? { |
|
|
84
|
+
changed_requirements.any? { |requirement| requirement.file == file.name }
|
|
85
85
|
end
|
|
86
86
|
end
|
|
87
87
|
end
|
|
@@ -9,37 +9,25 @@ module Dependabot
|
|
|
9
9
|
module Helpers
|
|
10
10
|
extend T::Sig
|
|
11
11
|
|
|
12
|
-
V1 =
|
|
13
|
-
V2 =
|
|
12
|
+
V1 = "1"
|
|
13
|
+
V2 = "2"
|
|
14
14
|
|
|
15
15
|
# If we are updating a project with no lock file then the default should be the newest version
|
|
16
16
|
DEFAULT = T.let(V2, String)
|
|
17
17
|
|
|
18
18
|
# From composers json-schema: https://getcomposer.org/schema.json
|
|
19
|
-
COMPOSER_V2_NAME_REGEX =
|
|
20
|
-
%r{^[a-z0-9]([_.-]?[a-z0-9]++)*/[a-z0-9](([_.]?|-{0,2})[a-z0-9]++)*$},
|
|
21
|
-
Regexp
|
|
22
|
-
)
|
|
19
|
+
COMPOSER_V2_NAME_REGEX = %r{^[a-z0-9]([_.-]?[a-z0-9]++)*/[a-z0-9](([_.]?|-{0,2})[a-z0-9]++)*$}
|
|
23
20
|
|
|
24
21
|
# From https://github.com/composer/composer/blob/b7d770659b4e3ef21423bd67ade935572913a4c1/src/Composer/Repository/PlatformRepository.php#L33
|
|
25
|
-
PLATFORM_PACKAGE_REGEX =
|
|
26
|
-
/
|
|
22
|
+
PLATFORM_PACKAGE_REGEX = /
|
|
27
23
|
^(?:php(?:-64bit|-ipv6|-zts|-debug)?|hhvm|(?:ext|lib)-[a-z0-9](?:[_.-]?[a-z0-9]+)*
|
|
28
24
|
|composer-(?:plugin|runtime)-api)$
|
|
29
|
-
/x
|
|
30
|
-
|
|
31
|
-
)
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
Regexp
|
|
36
|
-
)
|
|
37
|
-
FAILED_GIT_CLONE = T.let(/^Failed to clone (?<url>.*?)/, Regexp)
|
|
38
|
-
|
|
39
|
-
GIT_REPO_URL = T.let(
|
|
40
|
-
%r{((git|ssh|http(s)?)|(git@[\w\.]+))(:(//)?)([\w\.@\:/\-~]+)(/)?},
|
|
41
|
-
Regexp
|
|
42
|
-
)
|
|
25
|
+
/x
|
|
26
|
+
|
|
27
|
+
FAILED_GIT_CLONE_WITH_MIRROR = /^Failed to execute git clone --(mirror|checkout)[^']*'(?<url>[^']*?)'/
|
|
28
|
+
FAILED_GIT_CLONE = /^Failed to clone (?<url>.*?)/
|
|
29
|
+
|
|
30
|
+
GIT_REPO_URL = %r{((git|ssh|http(s)?)|(git@[\w\.]+))(:(//)?)([\w\.@\:/\-~]+)(/)?}
|
|
43
31
|
|
|
44
32
|
sig do
|
|
45
33
|
params(
|
|
@@ -36,12 +36,7 @@ module Dependabot
|
|
|
36
36
|
|
|
37
37
|
sig { returns(T.nilable(Source)) }
|
|
38
38
|
def source_from_dependency
|
|
39
|
-
|
|
40
|
-
dependency.requirements
|
|
41
|
-
.filter_map { |r| r.fetch(:source) }
|
|
42
|
-
.first&.fetch(:url, nil)
|
|
43
|
-
|
|
44
|
-
Source.from_url(source_url)
|
|
39
|
+
Source.from_url(dependency.source_string("url"))
|
|
45
40
|
end
|
|
46
41
|
|
|
47
42
|
sig { returns(T.nilable(Source)) }
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# typed:
|
|
1
|
+
# typed: strong
|
|
2
2
|
# frozen_string_literal: true
|
|
3
3
|
|
|
4
4
|
require "excon"
|
|
@@ -74,7 +74,7 @@ module Dependabot
|
|
|
74
74
|
return true if current_version&.prerelease?
|
|
75
75
|
|
|
76
76
|
dependency.requirements.any? do |req|
|
|
77
|
-
req
|
|
77
|
+
req.requirement_string&.match?(/\d-[A-Za-z]/)
|
|
78
78
|
end
|
|
79
79
|
end
|
|
80
80
|
|
|
@@ -11,6 +11,7 @@ require "sorbet-runtime"
|
|
|
11
11
|
require "dependabot/composer/requirement"
|
|
12
12
|
require "dependabot/composer/update_checker"
|
|
13
13
|
require "dependabot/composer/version"
|
|
14
|
+
require "dependabot/dependency_requirement"
|
|
14
15
|
require "dependabot/requirements_update_strategy"
|
|
15
16
|
|
|
16
17
|
module Dependabot
|
|
@@ -36,7 +37,7 @@ module Dependabot
|
|
|
36
37
|
|
|
37
38
|
sig do
|
|
38
39
|
params(
|
|
39
|
-
requirements: T::Array[
|
|
40
|
+
requirements: T::Array[Dependabot::DependencyRequirement],
|
|
40
41
|
update_strategy: Dependabot::RequirementsUpdateStrategy,
|
|
41
42
|
latest_resolvable_version: T.nilable(T.any(String, Composer::Version))
|
|
42
43
|
).void
|
|
@@ -46,7 +47,10 @@ module Dependabot
|
|
|
46
47
|
update_strategy:,
|
|
47
48
|
latest_resolvable_version:
|
|
48
49
|
)
|
|
49
|
-
@requirements =
|
|
50
|
+
@requirements = T.let(
|
|
51
|
+
requirements.map { |requirement| Dependabot::DependencyRequirement.create(requirement) },
|
|
52
|
+
T::Array[Dependabot::DependencyRequirement]
|
|
53
|
+
)
|
|
50
54
|
@update_strategy = update_strategy
|
|
51
55
|
|
|
52
56
|
check_update_strategy
|
|
@@ -59,7 +63,7 @@ module Dependabot
|
|
|
59
63
|
)
|
|
60
64
|
end
|
|
61
65
|
|
|
62
|
-
sig { returns(T::Array[
|
|
66
|
+
sig { returns(T::Array[Dependabot::DependencyRequirement]) }
|
|
63
67
|
def updated_requirements
|
|
64
68
|
return requirements if update_strategy.lockfile_only?
|
|
65
69
|
return requirements unless latest_resolvable_version
|
|
@@ -69,7 +73,7 @@ module Dependabot
|
|
|
69
73
|
|
|
70
74
|
private
|
|
71
75
|
|
|
72
|
-
sig { returns(T::Array[
|
|
76
|
+
sig { returns(T::Array[Dependabot::DependencyRequirement]) }
|
|
73
77
|
attr_reader :requirements
|
|
74
78
|
|
|
75
79
|
sig { returns(Dependabot::RequirementsUpdateStrategy) }
|
|
@@ -85,9 +89,12 @@ module Dependabot
|
|
|
85
89
|
raise "Unknown update strategy: #{update_strategy}"
|
|
86
90
|
end
|
|
87
91
|
|
|
88
|
-
sig
|
|
92
|
+
sig do
|
|
93
|
+
params(req: Dependabot::DependencyRequirement)
|
|
94
|
+
.returns(Dependabot::DependencyRequirement)
|
|
95
|
+
end
|
|
89
96
|
def updated_requirement(req)
|
|
90
|
-
req_string = T.must(req
|
|
97
|
+
req_string = T.must(req.requirement_string).strip
|
|
91
98
|
or_string_reqs = req_string.split(OR_SEPARATOR)
|
|
92
99
|
or_separator = req_string.match(OR_SEPARATOR)&.to_s || " || "
|
|
93
100
|
branch_or_string_reqs, numeric_or_string_reqs = or_string_reqs
|
|
@@ -110,12 +117,16 @@ module Dependabot
|
|
|
110
117
|
# Add a T.must for new_req as it's defined in the case statement with multiple options
|
|
111
118
|
new_req = T.must(new_req)
|
|
112
119
|
new_req_string =
|
|
113
|
-
[new_req
|
|
114
|
-
new_req.merge(requirement: new_req_string)
|
|
120
|
+
[T.must(new_req.requirement_string), *branch_or_string_reqs].join(or_separator)
|
|
121
|
+
Dependabot::DependencyRequirement.create(new_req.merge(requirement: new_req_string))
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
sig do
|
|
125
|
+
params(req: Dependabot::DependencyRequirement)
|
|
126
|
+
.returns(Dependabot::DependencyRequirement)
|
|
115
127
|
end
|
|
116
|
-
sig { params(req: T::Hash[Symbol, String]).returns(T::Hash[Symbol, String]) }
|
|
117
128
|
def updated_alias(req)
|
|
118
|
-
req_string = T.must(req
|
|
129
|
+
req_string = T.must(req.requirement_string)
|
|
119
130
|
parts = req_string.split(/\sas\s/)
|
|
120
131
|
real_version = T.must(parts.first).strip
|
|
121
132
|
|
|
@@ -125,13 +136,16 @@ module Dependabot
|
|
|
125
136
|
|
|
126
137
|
new_version_string = T.must(latest_resolvable_version).to_s
|
|
127
138
|
new_req = req_string.sub(real_version, new_version_string)
|
|
128
|
-
req.merge(requirement: new_req)
|
|
139
|
+
Dependabot::DependencyRequirement.create(req.merge(requirement: new_req))
|
|
129
140
|
end
|
|
130
141
|
|
|
131
142
|
# rubocop:disable Metrics/PerceivedComplexity
|
|
132
|
-
sig
|
|
143
|
+
sig do
|
|
144
|
+
params(req: Dependabot::DependencyRequirement, or_separator: String)
|
|
145
|
+
.returns(Dependabot::DependencyRequirement)
|
|
146
|
+
end
|
|
133
147
|
def widen_requirement(req, or_separator)
|
|
134
|
-
current_requirement = T.must(req
|
|
148
|
+
current_requirement = T.must(req.requirement_string)
|
|
135
149
|
reqs = current_requirement.strip.split(SEPARATOR).map(&:strip)
|
|
136
150
|
|
|
137
151
|
updated_requirement =
|
|
@@ -147,13 +161,16 @@ module Dependabot
|
|
|
147
161
|
update_version_string(current_requirement)
|
|
148
162
|
end
|
|
149
163
|
|
|
150
|
-
req.merge(requirement: updated_requirement)
|
|
164
|
+
Dependabot::DependencyRequirement.create(req.merge(requirement: updated_requirement))
|
|
151
165
|
end
|
|
152
166
|
# rubocop:enable Metrics/PerceivedComplexity
|
|
153
167
|
|
|
154
|
-
sig
|
|
168
|
+
sig do
|
|
169
|
+
params(req: Dependabot::DependencyRequirement, or_separator: String)
|
|
170
|
+
.returns(Dependabot::DependencyRequirement)
|
|
171
|
+
end
|
|
155
172
|
def update_requirement_version(req, or_separator)
|
|
156
|
-
current_requirement = T.must(req
|
|
173
|
+
current_requirement = T.must(req.requirement_string)
|
|
157
174
|
reqs = current_requirement.strip.split(SEPARATOR).map(&:strip)
|
|
158
175
|
|
|
159
176
|
updated_requirement =
|
|
@@ -167,7 +184,7 @@ module Dependabot
|
|
|
167
184
|
update_version_string(current_requirement)
|
|
168
185
|
end
|
|
169
186
|
|
|
170
|
-
req.merge(requirement: updated_requirement)
|
|
187
|
+
Dependabot::DependencyRequirement.create(req.merge(requirement: updated_requirement))
|
|
171
188
|
end
|
|
172
189
|
|
|
173
190
|
sig { params(requirement_string: String).returns(T::Boolean) }
|
|
@@ -28,29 +28,23 @@ module Dependabot
|
|
|
28
28
|
|
|
29
29
|
sig { params(extensions: T::Array[T::Hash[Symbol, T.untyped]]).void }
|
|
30
30
|
def initialize(extensions)
|
|
31
|
-
@extensions =
|
|
31
|
+
@extensions = extensions
|
|
32
32
|
super
|
|
33
33
|
end
|
|
34
34
|
end
|
|
35
35
|
|
|
36
|
-
MISSING_EXPLICIT_PLATFORM_REQ_REGEX =
|
|
37
|
-
%r{
|
|
36
|
+
MISSING_EXPLICIT_PLATFORM_REQ_REGEX = %r{
|
|
38
37
|
(?<=PHP\sextension\s)ext\-[^\s\/]+\s.*?\s(?=is|but)|
|
|
39
38
|
(?<=requires\s)php(?:\-[^\s\/]+)?\s.*?\s(?=but)
|
|
40
|
-
}x
|
|
41
|
-
|
|
42
|
-
)
|
|
43
|
-
MISSING_IMPLICIT_PLATFORM_REQ_REGEX = T.let(
|
|
44
|
-
%r{
|
|
39
|
+
}x
|
|
40
|
+
MISSING_IMPLICIT_PLATFORM_REQ_REGEX = %r{
|
|
45
41
|
(?<!with|for|by)\sext\-[^\s\/]+\s.*?\s(?=->)|
|
|
46
42
|
(?<=require\s)php(?:\-[^\s\/]+)?\s.*?\s(?=->) # composer v2
|
|
47
|
-
}x
|
|
48
|
-
|
|
49
|
-
)
|
|
50
|
-
VERSION_REGEX = T.let(/[0-9]+(?:\.[A-Za-z0-9\-_]+)*/, Regexp)
|
|
43
|
+
}x
|
|
44
|
+
VERSION_REGEX = /[0-9]+(?:\.[A-Za-z0-9\-_]+)*/
|
|
51
45
|
|
|
52
46
|
# Example Timeout error from Composer 2.7.7: "curl error 28 while downloading https://example.com:81/packages.json: Failed to connect to example.com port 81 after 9853 ms: Connection timed out" # rubocop:disable Layout/LineLength
|
|
53
|
-
SOURCE_TIMED_OUT_REGEX =
|
|
47
|
+
SOURCE_TIMED_OUT_REGEX = %r{curl error 28 while downloading (?<url>https?://.+/packages\.json): }
|
|
54
48
|
|
|
55
49
|
sig do
|
|
56
50
|
params(
|
|
@@ -271,22 +265,22 @@ module Dependabot
|
|
|
271
265
|
end
|
|
272
266
|
|
|
273
267
|
# rubocop:disable Metrics/PerceivedComplexity
|
|
274
|
-
# rubocop:disable Metrics/AbcSize
|
|
275
268
|
sig { returns(String) }
|
|
276
269
|
def updated_version_requirement_string
|
|
277
270
|
lower_bound =
|
|
278
271
|
if requirements_to_unlock == :none
|
|
279
|
-
dependency.requirements.first&.
|
|
272
|
+
dependency.requirements.first&.requirement_string || ">= 0"
|
|
280
273
|
elsif dependency.version
|
|
281
274
|
">= #{dependency.version}"
|
|
282
275
|
else
|
|
283
276
|
version_for_requirement =
|
|
284
|
-
dependency.requirements
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
277
|
+
dependency.requirements
|
|
278
|
+
.filter_map(&:requirement_string)
|
|
279
|
+
.reject { |req_string| req_string.start_with?("<") }
|
|
280
|
+
.select { |req_string| req_string.match?(VERSION_REGEX) }
|
|
281
|
+
.map { |req_string| req_string.match(VERSION_REGEX) }
|
|
282
|
+
.select { |version| requirement_valid?(">= #{version}") }
|
|
283
|
+
.max_by { |version| Composer::Version.new(version.to_s) }
|
|
290
284
|
|
|
291
285
|
">= #{version_for_requirement || 0}"
|
|
292
286
|
end
|
|
@@ -307,7 +301,6 @@ module Dependabot
|
|
|
307
301
|
lower_bound + ", == #{latest_allowable_version}"
|
|
308
302
|
end
|
|
309
303
|
# rubocop:enable Metrics/PerceivedComplexity
|
|
310
|
-
# rubocop:enable Metrics/AbcSize
|
|
311
304
|
|
|
312
305
|
# TODO: Extract error handling and share between the lockfile updater
|
|
313
306
|
#
|
|
@@ -644,7 +637,7 @@ module Dependabot
|
|
|
644
637
|
extend T::Sig
|
|
645
638
|
|
|
646
639
|
# Private source errors
|
|
647
|
-
CURL_ERROR =
|
|
640
|
+
CURL_ERROR = /curl error 52 while downloading (?<url>.*): Empty reply from server/
|
|
648
641
|
|
|
649
642
|
PRIVATE_SOURCE_AUTH_FAIL = T.let(
|
|
650
643
|
[
|
|
@@ -655,9 +648,9 @@ module Dependabot
|
|
|
655
648
|
T::Array[Regexp]
|
|
656
649
|
)
|
|
657
650
|
|
|
658
|
-
REQUIREMENT_ERROR =
|
|
651
|
+
REQUIREMENT_ERROR = /^(?<req>.*) is invalid, it should not contain uppercase characters/
|
|
659
652
|
|
|
660
|
-
NO_URL =
|
|
653
|
+
NO_URL = "No URL specified"
|
|
661
654
|
|
|
662
655
|
sig { params(url: String).returns(String) }
|
|
663
656
|
def sanitize_uri(url)
|
|
@@ -156,13 +156,13 @@ module Dependabot
|
|
|
156
156
|
|
|
157
157
|
sig { returns(T::Boolean) }
|
|
158
158
|
def path_dependency?
|
|
159
|
-
dependency.requirements.any? { |r| r.
|
|
159
|
+
dependency.requirements.any? { |r| r.source_string("type") == "path" }
|
|
160
160
|
end
|
|
161
161
|
|
|
162
162
|
# To be a true git dependency, it must have a branch.
|
|
163
163
|
sig { returns(T::Boolean) }
|
|
164
164
|
def git_dependency?
|
|
165
|
-
dependency.requirements.any? { |r| r.
|
|
165
|
+
dependency.requirements.any? { |r| r.source_string("branch") }
|
|
166
166
|
end
|
|
167
167
|
|
|
168
168
|
sig { returns(Dependabot::DependencyFile) }
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: dependabot-composer
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.392.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Dependabot
|
|
@@ -15,14 +15,14 @@ dependencies:
|
|
|
15
15
|
requirements:
|
|
16
16
|
- - '='
|
|
17
17
|
- !ruby/object:Gem::Version
|
|
18
|
-
version: 0.
|
|
18
|
+
version: 0.392.0
|
|
19
19
|
type: :runtime
|
|
20
20
|
prerelease: false
|
|
21
21
|
version_requirements: !ruby/object:Gem::Requirement
|
|
22
22
|
requirements:
|
|
23
23
|
- - '='
|
|
24
24
|
- !ruby/object:Gem::Version
|
|
25
|
-
version: 0.
|
|
25
|
+
version: 0.392.0
|
|
26
26
|
- !ruby/object:Gem::Dependency
|
|
27
27
|
name: debug
|
|
28
28
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -276,7 +276,7 @@ licenses:
|
|
|
276
276
|
- MIT
|
|
277
277
|
metadata:
|
|
278
278
|
bug_tracker_uri: https://github.com/dependabot/dependabot-core/issues
|
|
279
|
-
changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.
|
|
279
|
+
changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.392.0
|
|
280
280
|
rdoc_options: []
|
|
281
281
|
require_paths:
|
|
282
282
|
- lib
|