upd-cli 0.1.7__tar.gz → 0.1.9__tar.gz

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.
Files changed (80) hide show
  1. {upd_cli-0.1.7 → upd_cli-0.1.9}/CHANGELOG.md +14 -0
  2. {upd_cli-0.1.7 → upd_cli-0.1.9}/Cargo.lock +312 -4
  3. {upd_cli-0.1.7 → upd_cli-0.1.9}/Cargo.toml +7 -1
  4. {upd_cli-0.1.7 → upd_cli-0.1.9}/PKG-INFO +1 -1
  5. upd_cli-0.1.9/fixtures/clispec-v0.2.json +135 -0
  6. upd_cli-0.1.9/src/bin/upd-cli.rs +39 -0
  7. {upd_cli-0.1.7 → upd_cli-0.1.9}/src/cli.rs +71 -3
  8. {upd_cli-0.1.7 → upd_cli-0.1.9}/src/lib.rs +1 -0
  9. {upd_cli-0.1.7 → upd_cli-0.1.9}/src/main.rs +138 -23
  10. upd_cli-0.1.9/src/schema.rs +403 -0
  11. {upd_cli-0.1.7 → upd_cli-0.1.9}/tests/cooldown_e2e.rs +2 -0
  12. {upd_cli-0.1.7 → upd_cli-0.1.9}/tests/discovery_no_ignore.rs +15 -2
  13. {upd_cli-0.1.7 → upd_cli-0.1.9}/tests/format_json.rs +35 -6
  14. {upd_cli-0.1.7 → upd_cli-0.1.9}/tests/help_text.rs +1 -1
  15. {upd_cli-0.1.7 → upd_cli-0.1.9}/tests/no_args_scope.rs +2 -2
  16. {upd_cli-0.1.7 → upd_cli-0.1.9}/tests/output_streams.rs +25 -6
  17. {upd_cli-0.1.7 → upd_cli-0.1.9}/.mise.toml +0 -0
  18. {upd_cli-0.1.7 → upd_cli-0.1.9}/.pre-commit-config.yaml +0 -0
  19. {upd_cli-0.1.7 → upd_cli-0.1.9}/.pre-commit-hooks.yaml +0 -0
  20. {upd_cli-0.1.7 → upd_cli-0.1.9}/.rumdl.toml +0 -0
  21. {upd_cli-0.1.7 → upd_cli-0.1.9}/LICENSE +0 -0
  22. {upd_cli-0.1.7 → upd_cli-0.1.9}/Makefile +0 -0
  23. {upd_cli-0.1.7 → upd_cli-0.1.9}/README.md +0 -0
  24. {upd_cli-0.1.7 → upd_cli-0.1.9}/assets/logo-wide.svg +0 -0
  25. {upd_cli-0.1.7 → upd_cli-0.1.9}/assets/logo.svg +0 -0
  26. {upd_cli-0.1.7 → upd_cli-0.1.9}/pyproject.toml +0 -0
  27. {upd_cli-0.1.7 → upd_cli-0.1.9}/python/upd_cli/__init__.py +0 -0
  28. {upd_cli-0.1.7 → upd_cli-0.1.9}/python/upd_cli/__main__.py +0 -0
  29. {upd_cli-0.1.7 → upd_cli-0.1.9}/python/upd_cli/py.typed +0 -0
  30. {upd_cli-0.1.7 → upd_cli-0.1.9}/rust-toolchain.toml +0 -0
  31. {upd_cli-0.1.7 → upd_cli-0.1.9}/src/align.rs +0 -0
  32. {upd_cli-0.1.7 → upd_cli-0.1.9}/src/audit/cache.rs +0 -0
  33. {upd_cli-0.1.7 → upd_cli-0.1.9}/src/audit/cvss.rs +0 -0
  34. {upd_cli-0.1.7 → upd_cli-0.1.9}/src/audit/mod.rs +0 -0
  35. {upd_cli-0.1.7 → upd_cli-0.1.9}/src/cache.rs +0 -0
  36. {upd_cli-0.1.7 → upd_cli-0.1.9}/src/config.rs +0 -0
  37. {upd_cli-0.1.7 → upd_cli-0.1.9}/src/cooldown.rs +0 -0
  38. {upd_cli-0.1.7 → upd_cli-0.1.9}/src/http.rs +0 -0
  39. {upd_cli-0.1.7 → upd_cli-0.1.9}/src/interactive.rs +0 -0
  40. {upd_cli-0.1.7 → upd_cli-0.1.9}/src/lockfile.rs +0 -0
  41. {upd_cli-0.1.7 → upd_cli-0.1.9}/src/output.rs +0 -0
  42. {upd_cli-0.1.7 → upd_cli-0.1.9}/src/registry/crates_io.rs +0 -0
  43. {upd_cli-0.1.7 → upd_cli-0.1.9}/src/registry/github_releases.rs +0 -0
  44. {upd_cli-0.1.7 → upd_cli-0.1.9}/src/registry/go_proxy.rs +0 -0
  45. {upd_cli-0.1.7 → upd_cli-0.1.9}/src/registry/mock.rs +0 -0
  46. {upd_cli-0.1.7 → upd_cli-0.1.9}/src/registry/mod.rs +0 -0
  47. {upd_cli-0.1.7 → upd_cli-0.1.9}/src/registry/npm.rs +0 -0
  48. {upd_cli-0.1.7 → upd_cli-0.1.9}/src/registry/nuget.rs +0 -0
  49. {upd_cli-0.1.7 → upd_cli-0.1.9}/src/registry/pypi.rs +0 -0
  50. {upd_cli-0.1.7 → upd_cli-0.1.9}/src/registry/rubygems.rs +0 -0
  51. {upd_cli-0.1.7 → upd_cli-0.1.9}/src/registry/terraform.rs +0 -0
  52. {upd_cli-0.1.7 → upd_cli-0.1.9}/src/registry/utils.rs +0 -0
  53. {upd_cli-0.1.7 → upd_cli-0.1.9}/src/updater/cargo_toml.rs +0 -0
  54. {upd_cli-0.1.7 → upd_cli-0.1.9}/src/updater/csproj.rs +0 -0
  55. {upd_cli-0.1.7 → upd_cli-0.1.9}/src/updater/gemfile.rs +0 -0
  56. {upd_cli-0.1.7 → upd_cli-0.1.9}/src/updater/github_actions.rs +0 -0
  57. {upd_cli-0.1.7 → upd_cli-0.1.9}/src/updater/go_mod.rs +0 -0
  58. {upd_cli-0.1.7 → upd_cli-0.1.9}/src/updater/mise.rs +0 -0
  59. {upd_cli-0.1.7 → upd_cli-0.1.9}/src/updater/mod.rs +0 -0
  60. {upd_cli-0.1.7 → upd_cli-0.1.9}/src/updater/npm_range.rs +0 -0
  61. {upd_cli-0.1.7 → upd_cli-0.1.9}/src/updater/package_json.rs +0 -0
  62. {upd_cli-0.1.7 → upd_cli-0.1.9}/src/updater/pre_commit.rs +0 -0
  63. {upd_cli-0.1.7 → upd_cli-0.1.9}/src/updater/pyproject.rs +0 -0
  64. {upd_cli-0.1.7 → upd_cli-0.1.9}/src/updater/requirements.rs +0 -0
  65. {upd_cli-0.1.7 → upd_cli-0.1.9}/src/updater/terraform.rs +0 -0
  66. {upd_cli-0.1.7 → upd_cli-0.1.9}/src/version/compare.rs +0 -0
  67. {upd_cli-0.1.7 → upd_cli-0.1.9}/src/version/mod.rs +0 -0
  68. {upd_cli-0.1.7 → upd_cli-0.1.9}/src/version/pep440.rs +0 -0
  69. {upd_cli-0.1.7 → upd_cli-0.1.9}/src/version/semver_util.rs +0 -0
  70. {upd_cli-0.1.7 → upd_cli-0.1.9}/src/version/tag.rs +0 -0
  71. {upd_cli-0.1.7 → upd_cli-0.1.9}/tests/audit_offline.rs +0 -0
  72. {upd_cli-0.1.7 → upd_cli-0.1.9}/tests/audit_sarif.rs +0 -0
  73. {upd_cli-0.1.7 → upd_cli-0.1.9}/tests/audit_severity.rs +0 -0
  74. {upd_cli-0.1.7 → upd_cli-0.1.9}/tests/bump_filter.rs +0 -0
  75. {upd_cli-0.1.7 → upd_cli-0.1.9}/tests/exit_codes.rs +0 -0
  76. {upd_cli-0.1.7 → upd_cli-0.1.9}/tests/fix_audit.rs +0 -0
  77. {upd_cli-0.1.7 → upd_cli-0.1.9}/tests/interactive_tty.rs +0 -0
  78. {upd_cli-0.1.7 → upd_cli-0.1.9}/tests/invalid_positional.rs +0 -0
  79. {upd_cli-0.1.7 → upd_cli-0.1.9}/tests/package_filter.rs +0 -0
  80. {upd_cli-0.1.7 → upd_cli-0.1.9}/vership.toml +0 -0
@@ -17,6 +17,20 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
17
17
 
18
18
 
19
19
 
20
+
21
+
22
+ ## [0.1.9](https://github.com/rvben/upd/compare/v0.1.8...v0.1.9) - 2026-06-11
23
+
24
+ ### Added
25
+
26
+ - **clispec**: implement clispec v0.2 compliance (24/24) ([1c477cc](https://github.com/rvben/upd/commit/1c477cc11252dbad4f6d46fa7f393dcb48fb170d))
27
+
28
+ ## [0.1.8](https://github.com/rvben/upd/compare/v0.1.7...v0.1.8) - 2026-04-30
29
+
30
+ ### Added
31
+
32
+ - **packaging**: add upd-cli shim binary so `uvx upd-cli` works directly ([17fc581](https://github.com/rvben/upd/commit/17fc581015d2a44dcaa16a547597f4bfd0013751))
33
+
20
34
  ## [0.1.7](https://github.com/rvben/upd/compare/v0.1.6...v0.1.7) - 2026-04-29
21
35
 
22
36
  ### Fixed
@@ -8,6 +8,20 @@ version = "2.0.1"
8
8
  source = "registry+https://github.com/rust-lang/crates.io-index"
9
9
  checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa"
10
10
 
11
+ [[package]]
12
+ name = "ahash"
13
+ version = "0.8.12"
14
+ source = "registry+https://github.com/rust-lang/crates.io-index"
15
+ checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75"
16
+ dependencies = [
17
+ "cfg-if",
18
+ "getrandom 0.3.4",
19
+ "once_cell",
20
+ "serde",
21
+ "version_check",
22
+ "zerocopy",
23
+ ]
24
+
11
25
  [[package]]
12
26
  name = "aho-corasick"
13
27
  version = "1.1.4"
@@ -17,6 +31,12 @@ dependencies = [
17
31
  "memchr",
18
32
  ]
19
33
 
34
+ [[package]]
35
+ name = "allocator-api2"
36
+ version = "0.2.21"
37
+ source = "registry+https://github.com/rust-lang/crates.io-index"
38
+ checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923"
39
+
20
40
  [[package]]
21
41
  name = "android_system_properties"
22
42
  version = "0.1.5"
@@ -134,12 +154,33 @@ version = "0.22.1"
134
154
  source = "registry+https://github.com/rust-lang/crates.io-index"
135
155
  checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
136
156
 
157
+ [[package]]
158
+ name = "bit-set"
159
+ version = "0.8.0"
160
+ source = "registry+https://github.com/rust-lang/crates.io-index"
161
+ checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3"
162
+ dependencies = [
163
+ "bit-vec",
164
+ ]
165
+
166
+ [[package]]
167
+ name = "bit-vec"
168
+ version = "0.8.0"
169
+ source = "registry+https://github.com/rust-lang/crates.io-index"
170
+ checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7"
171
+
137
172
  [[package]]
138
173
  name = "bitflags"
139
174
  version = "2.11.1"
140
175
  source = "registry+https://github.com/rust-lang/crates.io-index"
141
176
  checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3"
142
177
 
178
+ [[package]]
179
+ name = "borrow-or-share"
180
+ version = "0.2.4"
181
+ source = "registry+https://github.com/rust-lang/crates.io-index"
182
+ checksum = "dc0b364ead1874514c8c2855ab558056ebfeb775653e7ae45ff72f28f8f3166c"
183
+
143
184
  [[package]]
144
185
  name = "bstr"
145
186
  version = "1.12.1"
@@ -156,6 +197,12 @@ version = "3.19.0"
156
197
  source = "registry+https://github.com/rust-lang/crates.io-index"
157
198
  checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43"
158
199
 
200
+ [[package]]
201
+ name = "bytecount"
202
+ version = "0.6.9"
203
+ source = "registry+https://github.com/rust-lang/crates.io-index"
204
+ checksum = "175812e0be2bccb6abe50bb8d566126198344f707e304f45c648fd8f2cc0365e"
205
+
159
206
  [[package]]
160
207
  name = "bytes"
161
208
  version = "1.11.0"
@@ -312,6 +359,12 @@ version = "0.8.21"
312
359
  source = "registry+https://github.com/rust-lang/crates.io-index"
313
360
  checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
314
361
 
362
+ [[package]]
363
+ name = "data-encoding"
364
+ version = "2.11.0"
365
+ source = "registry+https://github.com/rust-lang/crates.io-index"
366
+ checksum = "a4ae5f15dda3c708c0ade84bfee31ccab44a3da4f88015ed22f63732abe300c8"
367
+
315
368
  [[package]]
316
369
  name = "deadpool"
317
370
  version = "0.12.3"
@@ -362,6 +415,15 @@ dependencies = [
362
415
  "syn",
363
416
  ]
364
417
 
418
+ [[package]]
419
+ name = "email_address"
420
+ version = "0.2.9"
421
+ source = "registry+https://github.com/rust-lang/crates.io-index"
422
+ checksum = "e079f19b08ca6239f47f8ba8509c11cf3ea30095831f7fed61441475edd8c449"
423
+ dependencies = [
424
+ "serde",
425
+ ]
426
+
365
427
  [[package]]
366
428
  name = "equivalent"
367
429
  version = "1.0.2"
@@ -378,6 +440,17 @@ dependencies = [
378
440
  "windows-sys",
379
441
  ]
380
442
 
443
+ [[package]]
444
+ name = "fancy-regex"
445
+ version = "0.18.0"
446
+ source = "registry+https://github.com/rust-lang/crates.io-index"
447
+ checksum = "e1e1dacd0d2082dfcf1351c4bdd566bbe89a2b263235a2b50058f1e130a47277"
448
+ dependencies = [
449
+ "bit-set",
450
+ "regex-automata",
451
+ "regex-syntax",
452
+ ]
453
+
381
454
  [[package]]
382
455
  name = "fastrand"
383
456
  version = "2.3.0"
@@ -400,12 +473,29 @@ dependencies = [
400
473
  "miniz_oxide",
401
474
  ]
402
475
 
476
+ [[package]]
477
+ name = "fluent-uri"
478
+ version = "0.4.1"
479
+ source = "registry+https://github.com/rust-lang/crates.io-index"
480
+ checksum = "bc74ac4d8359ae70623506d512209619e5cf8f347124910440dbc221714b328e"
481
+ dependencies = [
482
+ "borrow-or-share",
483
+ "ref-cast",
484
+ "serde",
485
+ ]
486
+
403
487
  [[package]]
404
488
  name = "fnv"
405
489
  version = "1.0.7"
406
490
  source = "registry+https://github.com/rust-lang/crates.io-index"
407
491
  checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
408
492
 
493
+ [[package]]
494
+ name = "foldhash"
495
+ version = "0.2.0"
496
+ source = "registry+https://github.com/rust-lang/crates.io-index"
497
+ checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb"
498
+
409
499
  [[package]]
410
500
  name = "foreign-types"
411
501
  version = "0.3.2"
@@ -430,6 +520,16 @@ dependencies = [
430
520
  "percent-encoding",
431
521
  ]
432
522
 
523
+ [[package]]
524
+ name = "fraction"
525
+ version = "0.15.4"
526
+ source = "registry+https://github.com/rust-lang/crates.io-index"
527
+ checksum = "e076045bb43dac435333ed5f04caf35c7463631d0dae2deb2638d94dd0a5b872"
528
+ dependencies = [
529
+ "lazy_static",
530
+ "num",
531
+ ]
532
+
433
533
  [[package]]
434
534
  name = "futures"
435
535
  version = "0.3.32"
@@ -536,9 +636,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
536
636
  checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd"
537
637
  dependencies = [
538
638
  "cfg-if",
639
+ "js-sys",
539
640
  "libc",
540
641
  "r-efi",
541
642
  "wasip2",
643
+ "wasm-bindgen",
542
644
  ]
543
645
 
544
646
  [[package]]
@@ -573,6 +675,17 @@ dependencies = [
573
675
  "tracing",
574
676
  ]
575
677
 
678
+ [[package]]
679
+ name = "hashbrown"
680
+ version = "0.16.1"
681
+ source = "registry+https://github.com/rust-lang/crates.io-index"
682
+ checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100"
683
+ dependencies = [
684
+ "allocator-api2",
685
+ "equivalent",
686
+ "foldhash",
687
+ ]
688
+
576
689
  [[package]]
577
690
  name = "hashbrown"
578
691
  version = "0.17.0"
@@ -848,7 +961,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
848
961
  checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9"
849
962
  dependencies = [
850
963
  "equivalent",
851
- "hashbrown",
964
+ "hashbrown 0.17.0",
852
965
  ]
853
966
 
854
967
  [[package]]
@@ -889,6 +1002,33 @@ dependencies = [
889
1002
  "wasm-bindgen",
890
1003
  ]
891
1004
 
1005
+ [[package]]
1006
+ name = "jsonschema"
1007
+ version = "0.46.5"
1008
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1009
+ checksum = "6a5fe5206f06e589caf25e79fc05ccdf91fca745685fe9fe1a13bbdfb479a631"
1010
+ dependencies = [
1011
+ "ahash",
1012
+ "bytecount",
1013
+ "data-encoding",
1014
+ "email_address",
1015
+ "fancy-regex",
1016
+ "fraction",
1017
+ "getrandom 0.3.4",
1018
+ "idna",
1019
+ "itoa",
1020
+ "num-cmp",
1021
+ "num-traits",
1022
+ "percent-encoding",
1023
+ "referencing",
1024
+ "regex",
1025
+ "regex-syntax",
1026
+ "serde",
1027
+ "serde_json",
1028
+ "unicode-general-category",
1029
+ "uuid-simd",
1030
+ ]
1031
+
892
1032
  [[package]]
893
1033
  name = "lazy_static"
894
1034
  version = "1.5.0"
@@ -944,6 +1084,12 @@ version = "2.7.6"
944
1084
  source = "registry+https://github.com/rust-lang/crates.io-index"
945
1085
  checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273"
946
1086
 
1087
+ [[package]]
1088
+ name = "micromap"
1089
+ version = "0.3.0"
1090
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1091
+ checksum = "c2a86d3146ed3995b5913c414f6664344b9617457320782e64f0bb44afd49d74"
1092
+
947
1093
  [[package]]
948
1094
  name = "miniz_oxide"
949
1095
  version = "0.8.9"
@@ -982,6 +1128,76 @@ dependencies = [
982
1128
  "tempfile",
983
1129
  ]
984
1130
 
1131
+ [[package]]
1132
+ name = "num"
1133
+ version = "0.4.3"
1134
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1135
+ checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23"
1136
+ dependencies = [
1137
+ "num-bigint",
1138
+ "num-complex",
1139
+ "num-integer",
1140
+ "num-iter",
1141
+ "num-rational",
1142
+ "num-traits",
1143
+ ]
1144
+
1145
+ [[package]]
1146
+ name = "num-bigint"
1147
+ version = "0.4.6"
1148
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1149
+ checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9"
1150
+ dependencies = [
1151
+ "num-integer",
1152
+ "num-traits",
1153
+ ]
1154
+
1155
+ [[package]]
1156
+ name = "num-cmp"
1157
+ version = "0.1.0"
1158
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1159
+ checksum = "63335b2e2c34fae2fb0aa2cecfd9f0832a1e24b3b32ecec612c3426d46dc8aaa"
1160
+
1161
+ [[package]]
1162
+ name = "num-complex"
1163
+ version = "0.4.6"
1164
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1165
+ checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495"
1166
+ dependencies = [
1167
+ "num-traits",
1168
+ ]
1169
+
1170
+ [[package]]
1171
+ name = "num-integer"
1172
+ version = "0.1.46"
1173
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1174
+ checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f"
1175
+ dependencies = [
1176
+ "num-traits",
1177
+ ]
1178
+
1179
+ [[package]]
1180
+ name = "num-iter"
1181
+ version = "0.1.45"
1182
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1183
+ checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf"
1184
+ dependencies = [
1185
+ "autocfg",
1186
+ "num-integer",
1187
+ "num-traits",
1188
+ ]
1189
+
1190
+ [[package]]
1191
+ name = "num-rational"
1192
+ version = "0.4.2"
1193
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1194
+ checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824"
1195
+ dependencies = [
1196
+ "num-bigint",
1197
+ "num-integer",
1198
+ "num-traits",
1199
+ ]
1200
+
985
1201
  [[package]]
986
1202
  name = "num-traits"
987
1203
  version = "0.2.19"
@@ -1073,6 +1289,12 @@ version = "0.2.0"
1073
1289
  source = "registry+https://github.com/rust-lang/crates.io-index"
1074
1290
  checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d"
1075
1291
 
1292
+ [[package]]
1293
+ name = "outref"
1294
+ version = "0.5.2"
1295
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1296
+ checksum = "1a80800c0488c3a21695ea981a54918fbb37abf04f4d0720c453632255e2ff0e"
1297
+
1076
1298
  [[package]]
1077
1299
  name = "parking_lot"
1078
1300
  version = "0.12.5"
@@ -1185,6 +1407,43 @@ dependencies = [
1185
1407
  "thiserror",
1186
1408
  ]
1187
1409
 
1410
+ [[package]]
1411
+ name = "ref-cast"
1412
+ version = "1.0.25"
1413
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1414
+ checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d"
1415
+ dependencies = [
1416
+ "ref-cast-impl",
1417
+ ]
1418
+
1419
+ [[package]]
1420
+ name = "ref-cast-impl"
1421
+ version = "1.0.25"
1422
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1423
+ checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da"
1424
+ dependencies = [
1425
+ "proc-macro2",
1426
+ "quote",
1427
+ "syn",
1428
+ ]
1429
+
1430
+ [[package]]
1431
+ name = "referencing"
1432
+ version = "0.46.5"
1433
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1434
+ checksum = "69e4e17ef386c5383591d07623d3de49cbc601156e7582973e6db98d66a57de2"
1435
+ dependencies = [
1436
+ "ahash",
1437
+ "fluent-uri",
1438
+ "getrandom 0.3.4",
1439
+ "hashbrown 0.16.1",
1440
+ "itoa",
1441
+ "micromap",
1442
+ "parking_lot",
1443
+ "percent-encoding",
1444
+ "serde_json",
1445
+ ]
1446
+
1188
1447
  [[package]]
1189
1448
  name = "regex"
1190
1449
  version = "1.12.3"
@@ -1199,9 +1458,9 @@ dependencies = [
1199
1458
 
1200
1459
  [[package]]
1201
1460
  name = "regex-automata"
1202
- version = "0.4.13"
1461
+ version = "0.4.14"
1203
1462
  source = "registry+https://github.com/rust-lang/crates.io-index"
1204
- checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c"
1463
+ checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f"
1205
1464
  dependencies = [
1206
1465
  "aho-corasick",
1207
1466
  "memchr",
@@ -1730,6 +1989,12 @@ version = "0.2.5"
1730
1989
  source = "registry+https://github.com/rust-lang/crates.io-index"
1731
1990
  checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
1732
1991
 
1992
+ [[package]]
1993
+ name = "unicode-general-category"
1994
+ version = "1.1.0"
1995
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1996
+ checksum = "0b993bddc193ae5bd0d623b49ec06ac3e9312875fdae725a975c51db1cc1677f"
1997
+
1733
1998
  [[package]]
1734
1999
  name = "unicode-ident"
1735
2000
  version = "1.0.22"
@@ -1750,7 +2015,7 @@ checksum = "e9df2af067a7953e9c3831320f35c1cc0600c30d44d9f7a12b01db1cd88d6b47"
1750
2015
 
1751
2016
  [[package]]
1752
2017
  name = "upd"
1753
- version = "0.1.7"
2018
+ version = "0.1.9"
1754
2019
  dependencies = [
1755
2020
  "anyhow",
1756
2021
  "async-trait",
@@ -1760,6 +2025,7 @@ dependencies = [
1760
2025
  "directories",
1761
2026
  "futures",
1762
2027
  "ignore",
2028
+ "jsonschema",
1763
2029
  "pep440_rs",
1764
2030
  "regex",
1765
2031
  "reqwest",
@@ -1800,12 +2066,34 @@ version = "0.2.2"
1800
2066
  source = "registry+https://github.com/rust-lang/crates.io-index"
1801
2067
  checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
1802
2068
 
2069
+ [[package]]
2070
+ name = "uuid-simd"
2071
+ version = "0.8.0"
2072
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2073
+ checksum = "23b082222b4f6619906941c17eb2297fff4c2fb96cb60164170522942a200bd8"
2074
+ dependencies = [
2075
+ "outref",
2076
+ "vsimd",
2077
+ ]
2078
+
1803
2079
  [[package]]
1804
2080
  name = "vcpkg"
1805
2081
  version = "0.2.15"
1806
2082
  source = "registry+https://github.com/rust-lang/crates.io-index"
1807
2083
  checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
1808
2084
 
2085
+ [[package]]
2086
+ name = "version_check"
2087
+ version = "0.9.5"
2088
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2089
+ checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
2090
+
2091
+ [[package]]
2092
+ name = "vsimd"
2093
+ version = "0.8.0"
2094
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2095
+ checksum = "5c3082ca00d5a5ef149bb8b555a72ae84c9c59f7250f013ac822ac2e49b19c64"
2096
+
1809
2097
  [[package]]
1810
2098
  name = "walkdir"
1811
2099
  version = "2.5.0"
@@ -2052,6 +2340,26 @@ dependencies = [
2052
2340
  "synstructure",
2053
2341
  ]
2054
2342
 
2343
+ [[package]]
2344
+ name = "zerocopy"
2345
+ version = "0.8.52"
2346
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2347
+ checksum = "ce1022995ff5ff5d841ad7d994facc23098cd40152f2c1d11cd607c6f530653f"
2348
+ dependencies = [
2349
+ "zerocopy-derive",
2350
+ ]
2351
+
2352
+ [[package]]
2353
+ name = "zerocopy-derive"
2354
+ version = "0.8.52"
2355
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2356
+ checksum = "1ae7f38b72ec2a254e2b87ef277cf2cd4fb97cbebf944faa6f33354da0867930"
2357
+ dependencies = [
2358
+ "proc-macro2",
2359
+ "quote",
2360
+ "syn",
2361
+ ]
2362
+
2055
2363
  [[package]]
2056
2364
  name = "zerofrom"
2057
2365
  version = "0.1.6"
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "upd"
3
- version = "0.1.7"
3
+ version = "0.1.9"
4
4
  edition = "2024"
5
5
  rust-version = "1.95.0"
6
6
  description = "A fast dependency updater for Python, Node.js, Rust, Go, Ruby, Terraform, GitHub Actions, pre-commit, and Mise projects"
@@ -28,6 +28,10 @@ crate-type = ["cdylib", "rlib"]
28
28
  name = "upd"
29
29
  path = "src/main.rs"
30
30
 
31
+ [[bin]]
32
+ name = "upd-cli"
33
+ path = "src/bin/upd-cli.rs"
34
+
31
35
  [dependencies]
32
36
  # CLI
33
37
  clap = { version = "4.6.1", features = ["derive"] }
@@ -62,6 +66,8 @@ futures = "0.3.32"
62
66
  url = "2.5"
63
67
  chrono = { version = "0.4", default-features = false, features = ["serde", "clock"] }
64
68
 
69
+ jsonschema = { version = "0.46.5", default-features = false }
70
+
65
71
  [dev-dependencies]
66
72
  tempfile = "3.27.0"
67
73
  wiremock = "0.6"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: upd-cli
3
- Version: 0.1.7
3
+ Version: 0.1.9
4
4
  Classifier: Development Status :: 4 - Beta
5
5
  Classifier: Environment :: Console
6
6
  Classifier: Intended Audience :: Developers
@@ -0,0 +1,135 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://clispec.dev/schema/v0.2.json",
4
+ "title": "The CLI Spec - Schema v0.2",
5
+ "description": "Machine-readable description of a CLI tool that conforms to The CLI Spec (https://clispec.dev). Emitted to stdout by the tool's `schema` subcommand.",
6
+ "type": "object",
7
+ "required": ["name", "version", "commands"],
8
+ "properties": {
9
+ "clispec": {
10
+ "description": "Version of The CLI Spec schema this document conforms to.",
11
+ "type": "string",
12
+ "pattern": "^[0-9]+\\.[0-9]+$"
13
+ },
14
+ "name": {
15
+ "description": "The tool's invocation name (the binary name, without path).",
16
+ "type": "string",
17
+ "minLength": 1
18
+ },
19
+ "version": {
20
+ "description": "The tool's version. Free-form, but SemVer is recommended.",
21
+ "type": "string",
22
+ "minLength": 1
23
+ },
24
+ "description": {
25
+ "type": "string"
26
+ },
27
+ "global_args": {
28
+ "description": "Arguments accepted by every command (e.g. --output, --quiet, --profile). Listed once here instead of being repeated or omitted per command.",
29
+ "type": "array",
30
+ "items": { "$ref": "#/$defs/arg" }
31
+ },
32
+ "commands": {
33
+ "description": "Commands the tool exposes. Subcommands nest via the `subcommands` field.",
34
+ "type": "array",
35
+ "items": { "$ref": "#/$defs/command" }
36
+ },
37
+ "errors": {
38
+ "description": "The finite set of `kind` values the tool emits in structured errors. Consumers can write exhaustive handlers against this set.",
39
+ "type": "array",
40
+ "items": { "$ref": "#/$defs/error" }
41
+ }
42
+ },
43
+ "$defs": {
44
+ "command": {
45
+ "type": "object",
46
+ "required": ["name"],
47
+ "properties": {
48
+ "name": { "type": "string", "minLength": 1 },
49
+ "description": { "type": "string" },
50
+ "mutating": {
51
+ "description": "Whether the command modifies state. Omitted means unknown - consumers MUST NOT assume an unmarked command is read-only. `mutating: false` is a contract: consumers may grant trust (e.g. auto-approval) based on it.",
52
+ "type": "boolean"
53
+ },
54
+ "stability": {
55
+ "description": "Stability of the command's contract.",
56
+ "type": "string",
57
+ "enum": ["stable", "beta", "experimental", "deprecated"]
58
+ },
59
+ "args": {
60
+ "type": "array",
61
+ "items": { "$ref": "#/$defs/arg" }
62
+ },
63
+ "output_fields": {
64
+ "description": "Fields present in the command's structured output, so consumers know the shape without invoking the command. For list commands, these describe one item of the `items` array, not the envelope.",
65
+ "type": "array",
66
+ "items": { "$ref": "#/$defs/field" }
67
+ },
68
+ "subcommands": {
69
+ "type": "array",
70
+ "items": { "$ref": "#/$defs/command" }
71
+ }
72
+ }
73
+ },
74
+ "arg": {
75
+ "type": "object",
76
+ "required": ["name", "type"],
77
+ "properties": {
78
+ "name": {
79
+ "description": "Flag (e.g. \"--status\") or positional name.",
80
+ "type": "string",
81
+ "minLength": 1
82
+ },
83
+ "type": {
84
+ "description": "Type name. Common values: \"string\", \"integer\", \"number\", \"boolean\", \"path\", \"string[]\".",
85
+ "type": "string"
86
+ },
87
+ "required": {
88
+ "type": "boolean",
89
+ "default": false
90
+ },
91
+ "default": {},
92
+ "enum": {
93
+ "type": "array"
94
+ },
95
+ "description": {
96
+ "type": "string"
97
+ }
98
+ }
99
+ },
100
+ "field": {
101
+ "type": "object",
102
+ "required": ["name", "type"],
103
+ "properties": {
104
+ "name": { "type": "string", "minLength": 1 },
105
+ "type": { "type": "string" },
106
+ "description": { "type": "string" }
107
+ }
108
+ },
109
+ "error": {
110
+ "type": "object",
111
+ "required": ["kind"],
112
+ "properties": {
113
+ "kind": {
114
+ "description": "Stable identifier consumers branch on. Snake_case by convention.",
115
+ "type": "string",
116
+ "minLength": 1,
117
+ "pattern": "^[a-z][a-z0-9_]*$"
118
+ },
119
+ "exit_code": {
120
+ "description": "The exit code the tool returns for this error kind. Consumers can branch on the exit code without parsing stderr.",
121
+ "type": "integer",
122
+ "minimum": 1,
123
+ "maximum": 255
124
+ },
125
+ "retryable": {
126
+ "description": "Whether a consumer should retry on this error.",
127
+ "type": "boolean"
128
+ },
129
+ "description": {
130
+ "type": "string"
131
+ }
132
+ }
133
+ }
134
+ }
135
+ }