upd-cli 0.0.26__tar.gz → 0.0.28__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 (56) hide show
  1. {upd_cli-0.0.26 → upd_cli-0.0.28}/CHANGELOG.md +21 -0
  2. {upd_cli-0.0.26 → upd_cli-0.0.28}/Cargo.lock +1 -1
  3. {upd_cli-0.0.26 → upd_cli-0.0.28}/Cargo.toml +1 -1
  4. {upd_cli-0.0.26 → upd_cli-0.0.28}/PKG-INFO +3 -3
  5. {upd_cli-0.0.26 → upd_cli-0.0.28}/README.md +2 -2
  6. {upd_cli-0.0.26 → upd_cli-0.0.28}/src/align.rs +2 -10
  7. {upd_cli-0.0.26 → upd_cli-0.0.28}/src/config.rs +5 -7
  8. upd_cli-0.0.28/src/main.rs +3147 -0
  9. {upd_cli-0.0.26 → upd_cli-0.0.28}/src/registry/npm.rs +13 -2
  10. {upd_cli-0.0.26 → upd_cli-0.0.28}/src/registry/pypi.rs +3 -0
  11. {upd_cli-0.0.26 → upd_cli-0.0.28}/src/updater/cargo_toml.rs +219 -72
  12. {upd_cli-0.0.26 → upd_cli-0.0.28}/src/updater/csproj.rs +75 -11
  13. {upd_cli-0.0.26 → upd_cli-0.0.28}/src/updater/gemfile.rs +40 -16
  14. {upd_cli-0.0.26 → upd_cli-0.0.28}/src/updater/mod.rs +56 -16
  15. {upd_cli-0.0.26 → upd_cli-0.0.28}/src/updater/package_json.rs +376 -39
  16. {upd_cli-0.0.26 → upd_cli-0.0.28}/src/updater/pyproject.rs +474 -61
  17. {upd_cli-0.0.26 → upd_cli-0.0.28}/src/updater/requirements.rs +35 -16
  18. {upd_cli-0.0.26 → upd_cli-0.0.28}/src/updater/terraform.rs +41 -15
  19. upd_cli-0.0.28/src/version/mod.rs +105 -0
  20. {upd_cli-0.0.26 → upd_cli-0.0.28}/src/version/pep440.rs +3 -0
  21. upd_cli-0.0.26/src/main.rs +0 -1868
  22. upd_cli-0.0.26/src/version/mod.rs +0 -55
  23. {upd_cli-0.0.26 → upd_cli-0.0.28}/.mise.toml +0 -0
  24. {upd_cli-0.0.26 → upd_cli-0.0.28}/.pre-commit-config.yaml +0 -0
  25. {upd_cli-0.0.26 → upd_cli-0.0.28}/.pre-commit-hooks.yaml +0 -0
  26. {upd_cli-0.0.26 → upd_cli-0.0.28}/.rumdl.toml +0 -0
  27. {upd_cli-0.0.26 → upd_cli-0.0.28}/LICENSE +0 -0
  28. {upd_cli-0.0.26 → upd_cli-0.0.28}/Makefile +0 -0
  29. {upd_cli-0.0.26 → upd_cli-0.0.28}/assets/logo-wide.svg +0 -0
  30. {upd_cli-0.0.26 → upd_cli-0.0.28}/assets/logo.svg +0 -0
  31. {upd_cli-0.0.26 → upd_cli-0.0.28}/pyproject.toml +0 -0
  32. {upd_cli-0.0.26 → upd_cli-0.0.28}/python/upd_cli/__init__.py +0 -0
  33. {upd_cli-0.0.26 → upd_cli-0.0.28}/python/upd_cli/__main__.py +0 -0
  34. {upd_cli-0.0.26 → upd_cli-0.0.28}/python/upd_cli/py.typed +0 -0
  35. {upd_cli-0.0.26 → upd_cli-0.0.28}/rust-toolchain.toml +0 -0
  36. {upd_cli-0.0.26 → upd_cli-0.0.28}/src/audit.rs +0 -0
  37. {upd_cli-0.0.26 → upd_cli-0.0.28}/src/cache.rs +0 -0
  38. {upd_cli-0.0.26 → upd_cli-0.0.28}/src/cli.rs +0 -0
  39. {upd_cli-0.0.26 → upd_cli-0.0.28}/src/interactive.rs +0 -0
  40. {upd_cli-0.0.26 → upd_cli-0.0.28}/src/lib.rs +0 -0
  41. {upd_cli-0.0.26 → upd_cli-0.0.28}/src/lockfile.rs +0 -0
  42. {upd_cli-0.0.26 → upd_cli-0.0.28}/src/registry/crates_io.rs +0 -0
  43. {upd_cli-0.0.26 → upd_cli-0.0.28}/src/registry/github_releases.rs +0 -0
  44. {upd_cli-0.0.26 → upd_cli-0.0.28}/src/registry/go_proxy.rs +0 -0
  45. {upd_cli-0.0.26 → upd_cli-0.0.28}/src/registry/mock.rs +0 -0
  46. {upd_cli-0.0.26 → upd_cli-0.0.28}/src/registry/mod.rs +0 -0
  47. {upd_cli-0.0.26 → upd_cli-0.0.28}/src/registry/nuget.rs +0 -0
  48. {upd_cli-0.0.26 → upd_cli-0.0.28}/src/registry/rubygems.rs +0 -0
  49. {upd_cli-0.0.26 → upd_cli-0.0.28}/src/registry/terraform.rs +0 -0
  50. {upd_cli-0.0.26 → upd_cli-0.0.28}/src/registry/utils.rs +0 -0
  51. {upd_cli-0.0.26 → upd_cli-0.0.28}/src/updater/github_actions.rs +0 -0
  52. {upd_cli-0.0.26 → upd_cli-0.0.28}/src/updater/go_mod.rs +0 -0
  53. {upd_cli-0.0.26 → upd_cli-0.0.28}/src/updater/mise.rs +0 -0
  54. {upd_cli-0.0.26 → upd_cli-0.0.28}/src/updater/pre_commit.rs +0 -0
  55. {upd_cli-0.0.26 → upd_cli-0.0.28}/src/version/semver_util.rs +0 -0
  56. {upd_cli-0.0.26 → upd_cli-0.0.28}/vership.toml +0 -0
@@ -7,6 +7,27 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
 
9
9
 
10
+
11
+
12
+ ## [0.0.28](https://github.com/rvben/upd/compare/v0.0.27...v0.0.28) - 2026-04-17
13
+
14
+ ### Added
15
+
16
+ - **updater**: recursive hidden-file discovery, precise line numbers, scoped npm ([5fcc5d8](https://github.com/rvben/upd/commit/5fcc5d818d349abd109ae7cac001972a6a9cadea))
17
+
18
+ ### Fixed
19
+
20
+ - **package_json**: index dependencies when opening brace starts on its own line ([e40c3f1](https://github.com/rvben/upd/commit/e40c3f1bf736ef3ea0c565047d886ff7543d37c9))
21
+ - **update**: check mode exits 1 when only configured pins differ ([33a69f5](https://github.com/rvben/upd/commit/33a69f5a16ee03247a13c41bfabe1935d09bfa64))
22
+ - **updater**: classify configured pins as pins, not updates ([571a96b](https://github.com/rvben/upd/commit/571a96b9de72fe283c5114e594da72687a67efab))
23
+
24
+ ## [0.0.27](https://github.com/rvben/upd/compare/v0.0.26...v0.0.27) - 2026-04-15
25
+
26
+ ### Fixed
27
+
28
+ - **align**: use pep440_rs for Python stable-version check ([7f132b3](https://github.com/rvben/upd/commit/7f132b351cdd9225a31df96d2a421c8c42926987))
29
+ - **version**: use PEP 440 release segments for precision matching ([fff041d](https://github.com/rvben/upd/commit/fff041d2d2e9508f117012a6bfc857ee57e5cd20))
30
+
10
31
  ## [0.0.26](https://github.com/rvben/upd/compare/v0.0.25...v0.0.26) - 2026-04-15
11
32
 
12
33
  ### Fixed
@@ -1780,7 +1780,7 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
1780
1780
 
1781
1781
  [[package]]
1782
1782
  name = "upd"
1783
- version = "0.0.26"
1783
+ version = "0.0.28"
1784
1784
  dependencies = [
1785
1785
  "anyhow",
1786
1786
  "async-trait",
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "upd"
3
- version = "0.0.26"
3
+ version = "0.0.28"
4
4
  edition = "2024"
5
5
  rust-version = "1.91.1"
6
6
  description = "A fast dependency updater for Python, Node.js, Rust, Go, Ruby, Terraform, GitHub Actions, pre-commit, and Mise projects"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: upd-cli
3
- Version: 0.0.26
3
+ Version: 0.0.28
4
4
  Classifier: Development Status :: 4 - Beta
5
5
  Classifier: Environment :: Console
6
6
  Classifier: Intended Audience :: Developers
@@ -164,7 +164,7 @@ upd align --check # Exit 1 if misalignments found (for CI)
164
164
 
165
165
  # Check for security vulnerabilities
166
166
  upd audit
167
- upd audit --check # Exit 1 if vulnerabilities found (for CI)
167
+ upd audit --check # Exit 1 if vulnerabilities are found or the audit can't complete (for CI)
168
168
  ```
169
169
 
170
170
  ## Supported Files
@@ -305,7 +305,7 @@ Check your dependencies for known security vulnerabilities using the [OSV (Open
305
305
  ```bash
306
306
  upd audit # Scan all dependency files
307
307
  upd audit --dry-run # Same as audit (read-only operation)
308
- upd audit --check # Exit 1 if vulnerabilities found (for CI)
308
+ upd audit --check # Exit 1 if vulnerabilities are found or the audit can't complete
309
309
  upd audit --lang python # Audit only Python packages
310
310
  upd audit ./services # Audit specific directory
311
311
  ```
@@ -141,7 +141,7 @@ upd align --check # Exit 1 if misalignments found (for CI)
141
141
 
142
142
  # Check for security vulnerabilities
143
143
  upd audit
144
- upd audit --check # Exit 1 if vulnerabilities found (for CI)
144
+ upd audit --check # Exit 1 if vulnerabilities are found or the audit can't complete (for CI)
145
145
  ```
146
146
 
147
147
  ## Supported Files
@@ -282,7 +282,7 @@ Check your dependencies for known security vulnerabilities using the [OSV (Open
282
282
  ```bash
283
283
  upd audit # Scan all dependency files
284
284
  upd audit --dry-run # Same as audit (read-only operation)
285
- upd audit --check # Exit 1 if vulnerabilities found (for CI)
285
+ upd audit --check # Exit 1 if vulnerabilities are found or the audit can't complete
286
286
  upd audit --lang python # Audit only Python packages
287
287
  upd audit ./services # Audit specific directory
288
288
  ```
@@ -8,6 +8,7 @@ use crate::updater::{
8
8
  Lang, MiseUpdater, PackageJsonUpdater, ParsedDependency, PreCommitUpdater, PyProjectUpdater,
9
9
  RequirementsUpdater, TerraformUpdater, Updater,
10
10
  };
11
+ use crate::version::is_stable_pep440;
11
12
  use anyhow::Result;
12
13
  use std::collections::HashMap;
13
14
  use std::path::{Path, PathBuf};
@@ -170,16 +171,7 @@ fn find_highest_version(occurrences: &[PackageOccurrence], lang: Lang) -> Option
170
171
  /// Check if a version is stable (not a pre-release)
171
172
  fn is_stable_version(version: &str, lang: Lang) -> bool {
172
173
  match lang {
173
- Lang::Python => {
174
- // Python pre-release indicators: a, b, rc, alpha, beta, dev
175
- let v = version.to_lowercase();
176
- !v.contains("a")
177
- && !v.contains("b")
178
- && !v.contains("rc")
179
- && !v.contains("alpha")
180
- && !v.contains("beta")
181
- && !v.contains("dev")
182
- }
174
+ Lang::Python => is_stable_pep440(version),
183
175
  Lang::Node | Lang::Rust | Lang::Go | Lang::DotNet => {
184
176
  // Semver pre-release indicator: hyphen followed by identifier
185
177
  !version.contains('-')
@@ -482,7 +482,7 @@ parent-pkg = "1.0.0"
482
482
 
483
483
  // Verify results:
484
484
  // - requests should be ignored
485
- // - flask should be pinned to 2.0.0 (appears in both pinned and updated)
485
+ // - flask should be pinned to 2.0.0
486
486
  // - django should be updated to 4.2.0
487
487
 
488
488
  assert_eq!(result.ignored.len(), 1);
@@ -492,8 +492,7 @@ parent-pkg = "1.0.0"
492
492
  assert_eq!(result.pinned[0].0, "flask");
493
493
  assert_eq!(result.pinned[0].2, "2.0.0"); // New version is pinned version
494
494
 
495
- // Both flask (pinned) and django (registry) are in updated
496
- assert_eq!(result.updated.len(), 2);
495
+ assert_eq!(result.updated.len(), 1);
497
496
 
498
497
  // Verify contents by checking all updated packages
499
498
  let updated_names: Vec<&str> = result
@@ -501,8 +500,8 @@ parent-pkg = "1.0.0"
501
500
  .iter()
502
501
  .map(|(n, _, _, _)| n.as_str())
503
502
  .collect();
504
- assert!(updated_names.contains(&"flask"));
505
503
  assert!(updated_names.contains(&"django"));
504
+ assert!(!updated_names.contains(&"flask"));
506
505
  }
507
506
 
508
507
  /// Integration test: Config with all supported file types
@@ -527,7 +526,7 @@ parent-pkg = "1.0.0"
527
526
  });
528
527
 
529
528
  // Test Requirements
530
- // RequirementsUpdater: pinned packages appear in BOTH pinned AND updated
529
+ // RequirementsUpdater: pinned packages appear only in pinned
531
530
  {
532
531
  let mut file = NamedTempFile::new().unwrap();
533
532
  writeln!(file, "ignored-pkg>=1.0.0").unwrap();
@@ -549,8 +548,7 @@ parent-pkg = "1.0.0"
549
548
 
550
549
  assert_eq!(result.ignored.len(), 1);
551
550
  assert_eq!(result.pinned.len(), 1);
552
- // RequirementsUpdater counts pinned packages in both updated and pinned
553
- assert_eq!(result.updated.len(), 2); // pinned-pkg + other-pkg
551
+ assert_eq!(result.updated.len(), 1); // other-pkg only
554
552
  }
555
553
 
556
554
  // Test package.json