Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package topgrade for openSUSE:Factory 
checked in at 2026-10-08 13:28:06
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/topgrade (Old)
 and      /work/SRC/openSUSE:Factory/.topgrade.new.3698736 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "topgrade"

Thu Oct  8 13:28:06 2026 rev:35 rq:1383253 version:17.12.3

Changes:
--------
--- /work/SRC/openSUSE:Factory/topgrade/topgrade.changes        2026-09-22 
15:52:07.155499973 +0200
+++ /work/SRC/openSUSE:Factory/.topgrade.new.3698736/topgrade.changes   
2026-10-08 13:28:49.567403594 +0200
@@ -1,0 +2,18 @@
+Thu Oct 08 08:12:12 UTC 2026 - Gerald Chen <[email protected]>
+
+- Update to version 17.12.3:
+  * chore: release v17.12.3 (#2383)
+  * fix: restore old working directory when opening a shell (#2391)
+  * chore(deps): update rust to v1.99.0 (#2386)
+  * chore(pre-commit): autoupdate (#2384)
+  * chore(deps): update github/codeql-action action to v4.38.2 (#2375)
+  * chore(deps): update vmactions/openbsd-vm action to v1.4.8 (#2378)
+  * chore(deps): lock file maintenance (#2381)
+  * fix(mise): skip self-update when disabled by the package manager (#2374)
+  * chore: release v17.12.2 (#2369)
+  * fix(hyprpm): run hyprpm at the end to avoid dropping cached sudo 
credentials for other steps
+  * fix(brew): run brew at the end to avoid dropping cached sudo credentials 
for other steps
+  * fix(zed): support preview channel (#2372)
+  * chore(pre-commit): autoupdate (#2368)
+
+-------------------------------------------------------------------

Old:
----
  topgrade-17.12.1.tar.zst

New:
----
  topgrade-17.12.3.tar.zst

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ topgrade.spec ++++++
--- /var/tmp/diff_new_pack.9qPHX7/_old  2026-10-08 13:28:52.818539652 +0200
+++ /var/tmp/diff_new_pack.9qPHX7/_new  2026-10-08 13:28:52.820539736 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           topgrade
-Version:        17.12.1
+Version:        17.12.3
 Release:        0
 Summary:        Upgrade all the things
 License:        GPL-3.0-only

++++++ _service ++++++
--- /var/tmp/diff_new_pack.9qPHX7/_old  2026-10-08 13:28:52.946545009 +0200
+++ /var/tmp/diff_new_pack.9qPHX7/_new  2026-10-08 13:28:52.956545428 +0200
@@ -3,7 +3,7 @@
     <param name="url">https://github.com/topgrade-rs/topgrade.git</param>
     <param name="versionformat">@PARENT_TAG@</param>
     <param name="scm">git</param>
-    <param name="revision">v17.12.1</param>
+    <param name="revision">v17.12.3</param>
     <param name="match-tag">*</param>
     <param name="versionrewrite-pattern">v(\d+\.\d+\.\d+)</param>
     <param name="versionrewrite-replacement">\1</param>

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.9qPHX7/_old  2026-10-08 13:28:53.046549195 +0200
+++ /var/tmp/diff_new_pack.9qPHX7/_new  2026-10-08 13:28:53.062549864 +0200
@@ -1,7 +1,7 @@
 <servicedata>
 <service name="tar_scm">
                 <param 
name="url">https://github.com/topgrade-rs/topgrade.git</param>
-              <param 
name="changesrevision">25e20b9e0e1d035b1e731d7fa913ad9463f21c8f</param></service><service
 name="tar_scm">
+              <param 
name="changesrevision">710856320124b85228e42846d133b3fd1a3ab5ae</param></service><service
 name="tar_scm">
                 <param 
name="url">https://ghproxy.net/https://github.com/topgrade-rs/topgrade.git</param>
               <param 
name="changesrevision">ef0a0d69bbe0cb08d6c4930ee18b734e03c215fb</param></service></servicedata>
 (No newline at EOF)

++++++ topgrade-17.12.1.tar.zst -> topgrade-17.12.3.tar.zst ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/topgrade-17.12.1/.github/workflows/check_security_vulnerability.yml 
new/topgrade-17.12.3/.github/workflows/check_security_vulnerability.yml
--- old/topgrade-17.12.1/.github/workflows/check_security_vulnerability.yml     
2026-09-21 20:30:21.000000000 +0200
+++ new/topgrade-17.12.3/.github/workflows/check_security_vulnerability.yml     
2026-10-02 19:59:59.000000000 +0200
@@ -32,6 +32,6 @@
         uses: 
microsoft/DevSkim-Action@4b5047945a44163b94642a1cecc0d93a3f428cc6 # v1.0.16
 
       - name: Upload DevSkim scan results to GitHub Security tab
-        uses: 
github/codeql-action/upload-sarif@1c5b675653bb5c22dbe9b12b556ec555138e09fd # 
v4.38.1
+        uses: 
github/codeql-action/upload-sarif@2892aa5e19bbd11bc0cff5427e3b750a04d9e3c2 # 
v4.38.2
         with:
           sarif_file: devskim-results.sarif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/topgrade-17.12.1/.github/workflows/create_release_assets.yml 
new/topgrade-17.12.3/.github/workflows/create_release_assets.yml
--- old/topgrade-17.12.1/.github/workflows/create_release_assets.yml    
2026-09-21 20:30:21.000000000 +0200
+++ new/topgrade-17.12.3/.github/workflows/create_release_assets.yml    
2026-10-02 19:59:59.000000000 +0200
@@ -307,7 +307,7 @@
           persist-credentials: false
 
       - name: Start OpenBSD VM
-        uses: vmactions/openbsd-vm@86cdc08415d9d0865267e686561e276c52d62530 # 
v1.4.7
+        uses: vmactions/openbsd-vm@5f7b2c933b8846a138361d6843c52af4bef5d945 # 
v1.4.8
         with:
           arch: x86_64
           sync: nfs
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/topgrade-17.12.1/.github/workflows/scorecards.yml 
new/topgrade-17.12.3/.github/workflows/scorecards.yml
--- old/topgrade-17.12.1/.github/workflows/scorecards.yml       2026-09-21 
20:30:21.000000000 +0200
+++ new/topgrade-17.12.3/.github/workflows/scorecards.yml       2026-10-02 
19:59:59.000000000 +0200
@@ -71,6 +71,6 @@
 
       # Upload the results to GitHub's code scanning dashboard.
       - name: "Upload to code-scanning"
-        uses: 
github/codeql-action/upload-sarif@1c5b675653bb5c22dbe9b12b556ec555138e09fd # 
v4.38.1
+        uses: 
github/codeql-action/upload-sarif@2892aa5e19bbd11bc0cff5427e3b750a04d9e3c2 # 
v4.38.2
         with:
           sarif_file: results.sarif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/topgrade-17.12.1/.pre-commit-config.yaml 
new/topgrade-17.12.3/.pre-commit-config.yaml
--- old/topgrade-17.12.1/.pre-commit-config.yaml        2026-09-21 
20:30:21.000000000 +0200
+++ new/topgrade-17.12.3/.pre-commit-config.yaml        2026-10-02 
19:59:59.000000000 +0200
@@ -17,7 +17,7 @@
   - id: trailing-whitespace
 
 - repo: https://github.com/adhtruong/mirrors-typos
-  rev: v1.50.1
+  rev: v1.50.3
   hooks:
   - id: typos
     args:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/topgrade-17.12.1/CHANGELOG.md 
new/topgrade-17.12.3/CHANGELOG.md
--- old/topgrade-17.12.1/CHANGELOG.md   2026-09-21 20:30:21.000000000 +0200
+++ new/topgrade-17.12.3/CHANGELOG.md   2026-10-02 19:59:59.000000000 +0200
@@ -7,6 +7,19 @@
 
 ## [Unreleased]
 
+## 
[17.12.3](https://github.com/topgrade-rs/topgrade/compare/v17.12.2...v17.12.3) 
- 2026-10-02
+
+### Fixed
+- restore old working directory when opening a shell 
([#2391](https://github.com/topgrade-rs/topgrade/pull/2391))
+- *(mise)* skip self-update when disabled by the package manager 
([#2374](https://github.com/topgrade-rs/topgrade/pull/2374))
+
+## 
[17.12.2](https://github.com/topgrade-rs/topgrade/compare/v17.12.1...v17.12.2) 
- 2026-09-26
+
+### Fixed
+- *(hyprpm)* run hyprpm at the end to avoid dropping cached sudo credentials 
for other steps
+- *(brew)* run brew at the end to avoid dropping cached sudo credentials for 
other steps
+- *(zed)* support preview channel 
([#2372](https://github.com/topgrade-rs/topgrade/pull/2372))
+
 ## 
[17.12.1](https://github.com/topgrade-rs/topgrade/compare/v17.12.0...v17.12.1) 
- 2026-09-21
 
 ### Fixed
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/topgrade-17.12.1/Cargo.lock 
new/topgrade-17.12.3/Cargo.lock
--- old/topgrade-17.12.1/Cargo.lock     2026-09-21 20:30:21.000000000 +0200
+++ new/topgrade-17.12.3/Cargo.lock     2026-10-02 19:59:59.000000000 +0200
@@ -412,9 +412,9 @@
 
 [[package]]
 name = "cc"
-version = "1.4.7"
+version = "1.5.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "54413ede23c2daf518f35156dfde027feb2374004d63bd497f983c8db9c0e313"
+checksum = "f360145194ee8e21db5ee7f3fcd4fe52210864c75c985dae33218202c8bbe040"
 dependencies = [
  "find-msvc-tools",
  "jobserver",
@@ -961,13 +961,12 @@
 
 [[package]]
 name = "encoding_rs"
-version = "0.8.41"
+version = "0.8.42"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "7b5ef0006ac9ab233c38522f5ae99cae3625151de8f706cacee1cba4b8e2832a"
+checksum = "8e985e0451871ad22fb8d2b6b076e2028a502a0d3950998c2c5c0a4f9b5d9679"
 dependencies = [
  "cfg-if",
  "core_detect",
- "multiversion",
  "multiversion_no_op",
  "rustversion",
  "scopeguard",
@@ -1102,9 +1101,9 @@
 
 [[package]]
 name = "find-msvc-tools"
-version = "0.1.13"
+version = "0.1.14"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "ef25905e51abafe4dcea6c15fec58c57b601cdbd0ee53d22ea1d3016c587d39b"
+checksum = "aedcfb3409746eddb02b9e19ebda1c3394f759a152e48ee875a0844d1b955484"
 
 [[package]]
 name = "flate2"
@@ -1141,7 +1140,7 @@
  "bstr",
  "log",
  "memchr",
- "thiserror 2.0.20",
+ "thiserror 2.0.21",
  "unicase",
  "xdg",
 ]
@@ -1485,16 +1484,17 @@
 
 [[package]]
 name = "hyper-util"
-version = "0.1.20"
+version = "0.1.21"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0"
+checksum = "ddc03d96684f9226b8a787cdb71488417b53ab5ea8fdb1dac946cb9431cc8bff"
 dependencies = [
- "base64 0.22.1",
+ "base64 0.23.1",
  "bytes",
  "futures-channel",
  "futures-util",
  "http",
  "http-body",
+ "httparse",
  "hyper",
  "ipnet",
  "libc",
@@ -1753,7 +1753,7 @@
  "jni-sys",
  "log",
  "simd_cesu8",
- "thiserror 2.0.20",
+ "thiserror 2.0.21",
  "walkdir",
  "windows-link 0.2.1",
 ]
@@ -1802,9 +1802,9 @@
 
 [[package]]
 name = "js-sys"
-version = "0.3.105"
+version = "0.3.106"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "ce57d20d1ea864ce2ac172ab472d409214f4fd359f0b2a2775abdf522e2af99e"
+checksum = "7883d941dae510fb2d978fc3fe018c71c9e2892fd38854de3e8b92c2e5ad9cc5"
 dependencies = [
  "cfg-if",
  "futures-util",
@@ -1825,9 +1825,9 @@
 
 [[package]]
 name = "libredox"
-version = "0.1.24"
+version = "0.1.25"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "6480ccc157a1389bb2e4891b24751b0f798ba640d22386f23143fbcc89da195a"
+checksum = "61ff90caf6077a803a240f62fdbe88645a890bbca49ef8174c3cb0404362171d"
 dependencies = [
  "libc",
 ]
@@ -1997,27 +1997,6 @@
 ]
 
 [[package]]
-name = "multiversion"
-version = "0.9.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "b4ca4bea16ffc3f443cf7d866912118196bfef4c6a1556ca00f9f9b00bb43f7c"
-dependencies = [
- "multiversion-macros",
-]
-
-[[package]]
-name = "multiversion-macros"
-version = "0.9.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "0d416831a7317ef4b08bee00b69cbbb9c8763da7959a7026244d6266869f9c83"
-dependencies = [
- "proc-macro2",
- "quote",
- "rustversion",
- "syn 3.0.6",
-]
-
-[[package]]
 name = "multiversion_no_op"
 version = "1.0.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
@@ -2384,7 +2363,7 @@
  "rustc-hash",
  "rustls",
  "socket2",
- "thiserror 2.0.20",
+ "thiserror 2.0.21",
  "tokio",
  "tracing",
  "web-time",
@@ -2407,7 +2386,7 @@
  "rustls",
  "rustls-pki-types",
  "slab",
- "thiserror 2.0.20",
+ "thiserror 2.0.21",
  "tinyvec",
  "tracing",
  "web-time",
@@ -2499,7 +2478,7 @@
 checksum = "60dc65c0ff1a7ae1294b0c67b9f14baf70b644404010370171787bfac1038fc0"
 dependencies = [
  "libredox",
- "thiserror 2.0.20",
+ "thiserror 2.0.21",
 ]
 
 [[package]]
@@ -2746,9 +2725,9 @@
 
 [[package]]
 name = "rustls-platform-verifier"
-version = "0.7.0"
+version = "0.7.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "26d1e2536ce4f35f4846aa13bff16bd0ff40157cdb14cc056c7b14ba41233ba0"
+checksum = "1167586491e2b18b8bfbb293e8180ec17c201c4f076d7cb3070ca964e7598f98"
 dependencies = [
  "core-foundation 0.10.1",
  "core-foundation-sys",
@@ -2767,9 +2746,9 @@
 
 [[package]]
 name = "rustls-platform-verifier-android"
-version = "0.1.1"
+version = "0.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f"
+checksum = "eec689c0bc40ff2458a5977b6619cb718087084a18e02a131c599b62d05e1a5f"
 
 [[package]]
 name = "rustls-webpki"
@@ -3076,9 +3055,9 @@
 
 [[package]]
 name = "siphasher"
-version = "1.0.3"
+version = "1.0.4"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "8ee5873ec9cce0195efcb7a4e9507a04cd49aec9c83d0389df45b1ef7ba2e649"
+checksum = "33f4fe9184a62d842c9ef383018f3306d8ba224fd9d836f56d7288308847c256"
 
 [[package]]
 name = "slab"
@@ -3275,7 +3254,7 @@
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "9ed071c670382e85fc2f48ae706492d8c338f4f89bf72520d32f8abfe880aade"
 dependencies = [
- "thiserror 2.0.20",
+ "thiserror 2.0.21",
  "windows 0.61.3",
  "windows-version",
 ]
@@ -3304,11 +3283,11 @@
 
 [[package]]
 name = "thiserror"
-version = "2.0.20"
+version = "2.0.21"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "ec86235f5fcc2a73650310756d2ac5b138a5780bbbdfae3eeccec992c435ba4f"
+checksum = "09e52cb86a36cede5cb101bf8908837b3e4c6e5e59fe7fd85c23fb56200d189e"
 dependencies = [
- "thiserror-impl 2.0.20",
+ "thiserror-impl 2.0.21",
 ]
 
 [[package]]
@@ -3324,9 +3303,9 @@
 
 [[package]]
 name = "thiserror-impl"
-version = "2.0.20"
+version = "2.0.21"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "bc04cd3e1236dd4a98afca4569f2deb3f120e5422a4023be2cb683f8486292af"
+checksum = "fe5197923287db20a58125f0bc85c062f7f2c892de97b18c356f9efb14b28524"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -3530,7 +3509,7 @@
 
 [[package]]
 name = "topgrade"
-version = "17.12.1"
+version = "17.12.3"
 dependencies = [
  "chrono",
  "clap",
@@ -3570,7 +3549,7 @@
  "sysinfo",
  "system_shutdown",
  "tempfile",
- "thiserror 2.0.20",
+ "thiserror 2.0.21",
  "tokio",
  "toml 1.1.6+spec-1.1.0",
  "tracing",
@@ -3894,9 +3873,9 @@
 
 [[package]]
 name = "wasm-bindgen"
-version = "0.2.128"
+version = "0.2.129"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "aecb87a33d3b0c5e3b7aa46336eaf486cffafbd281b195e4c8b80d50df2351bf"
+checksum = "9bb54f33acc68fd454578d9820b0bde1a1a3d17aa17bb7b6595806d02886d409"
 dependencies = [
  "cfg-if",
  "once_cell",
@@ -3907,19 +3886,20 @@
 
 [[package]]
 name = "wasm-bindgen-futures"
-version = "0.4.78"
+version = "0.4.79"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "6ef4c5d3d2cdf5c54f4231181768f5510842e350db025faf1f7163b1030ed928"
+checksum = "3cbab34de2d982e9b48e18d216d04c4a6f641066ff19ffb699980f591ee3610e"
 dependencies = [
  "js-sys",
+ "tokio",
  "wasm-bindgen",
 ]
 
 [[package]]
 name = "wasm-bindgen-macro"
-version = "0.2.128"
+version = "0.2.129"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "a690d511e3c1a8b3a55e33511e3c2c00c78415cd23650f32b808627f5696b9ed"
+checksum = "2e29d0c35b16e224a7eeb5cd2d25e3e1968fbd65604117b44d3b789d00ee8535"
 dependencies = [
  "quote",
  "wasm-bindgen-macro-support",
@@ -3927,9 +3907,9 @@
 
 [[package]]
 name = "wasm-bindgen-macro-support"
-version = "0.2.128"
+version = "0.2.129"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "411e4887f0071ef2d2164a9d5fdf2d20efbef78fccd3a78b0c10a1dc5295e48a"
+checksum = "6f501a8bc3719dba86ef8ae4728879c08001bea749eb1333ac5b91e040e2a6b7"
 dependencies = [
  "bumpalo",
  "proc-macro2",
@@ -3940,18 +3920,18 @@
 
 [[package]]
 name = "wasm-bindgen-shared"
-version = "0.2.128"
+version = "0.2.129"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "81941cd78d0c92026c33e5e01312845a4cb1e9af3407f9134b100dd03144103e"
+checksum = "23f0c9c52aa7cd7d77769a4cfe2a9adb1b331f489a41d912ce14513d5ab995c6"
 dependencies = [
  "unicode-ident",
 ]
 
 [[package]]
 name = "web-sys"
-version = "0.3.105"
+version = "0.3.106"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "9fbddc4a036f00ec4f18c83445bd3115cb306a91da554919a099d9222fe4a7f8"
+checksum = "88261b9deccee56594c11a3460c462c41f58d148598fe70ad77070126a68aba4"
 dependencies = [
  "js-sys",
  "wasm-bindgen",
@@ -4500,18 +4480,18 @@
 
 [[package]]
 name = "zerocopy"
-version = "0.8.57"
+version = "0.8.59"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "d35102a9f36d089ccae9e4c6802bc118be4487b80aaffc0ab4e0cf5ce92d2873"
+checksum = "6df92bf3d9227be3d53173901ddbffac2babc27ae50f397776ffd6dc33f800cb"
 dependencies = [
  "zerocopy-derive",
 ]
 
 [[package]]
 name = "zerocopy-derive"
-version = "0.8.57"
+version = "0.8.59"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "146c01f5ab44258da43cf276c74a2763db2ff3969c9c652c3f2de07041d0b2bc"
+checksum = "ac4f328cf2f05d084e496c3e9c3f33ed0a183656a16e1fcec4d464d8373aec82"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -4601,7 +4581,7 @@
 dependencies = [
  "base64 0.22.1",
  "ed25519-dalek",
- "thiserror 2.0.20",
+ "thiserror 2.0.21",
 ]
 
 [[package]]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/topgrade-17.12.1/Cargo.toml 
new/topgrade-17.12.3/Cargo.toml
--- old/topgrade-17.12.1/Cargo.toml     2026-09-21 20:30:21.000000000 +0200
+++ new/topgrade-17.12.3/Cargo.toml     2026-10-02 19:59:59.000000000 +0200
@@ -6,7 +6,7 @@
 license = "GPL-3.0-or-later"
 repository = "https://github.com/topgrade-rs/topgrade";
 rust-version = "1.88.0"
-version = "17.12.1"
+version = "17.12.3"
 exclude = ["doc/screenshot.gif", "BREAKINGCHANGES_dev.md"]
 edition = "2024"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/topgrade-17.12.1/locales/app.yml 
new/topgrade-17.12.3/locales/app.yml
--- old/topgrade-17.12.1/locales/app.yml        2026-09-21 20:30:21.000000000 
+0200
+++ new/topgrade-17.12.3/locales/app.yml        2026-10-02 19:59:59.000000000 
+0200
@@ -1554,3 +1554,19 @@
   zh_CN: "已删除已废弃的扩展目录:%{path}"
   zh_TW: "已刪除已淘汰的擴充功能目錄:%{path}"
   de: "Veraltetes Erweiterungsverzeichnis entfernt: %{path}"
+"Updates unsupported for the Zed {channel} channel":
+  en: "Updates unsupported for the Zed %{channel} channel"
+  lt: "Zed %{channel} kanalo atnaujinimai nepalaikomi"
+  es: "No se admiten actualizaciones para el canal %{channel} de Zed"
+  fr: "Les mises à jour ne sont pas prises en charge pour le canal %{channel} 
de Zed"
+  zh_CN: "不支持更新 Zed %{channel} 渠道"
+  zh_TW: "不支援更新 Zed %{channel} 通道"
+  de: "Updates für den Zed-Kanal %{channel} werden nicht unterstützt"
+"No Zed preview release found on GitHub":
+  en: "No Zed preview release found on GitHub"
+  lt: "GitHub'e nerasta Zed preview leidimo"
+  es: "No se encontró ninguna versión preview de Zed en GitHub"
+  fr: "Aucune version preview de Zed trouvée sur GitHub"
+  zh_CN: "在 GitHub 上找不到 Zed preview 版本"
+  zh_TW: "在 GitHub 上找不到 Zed preview 版本"
+  de: "Keine Zed-Preview-Version auf GitHub gefunden"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/topgrade-17.12.1/rust-toolchain.toml 
new/topgrade-17.12.3/rust-toolchain.toml
--- old/topgrade-17.12.1/rust-toolchain.toml    2026-09-21 20:30:21.000000000 
+0200
+++ new/topgrade-17.12.3/rust-toolchain.toml    2026-10-02 19:59:59.000000000 
+0200
@@ -1,2 +1,2 @@
 [toolchain]
-channel = "1.98.1"
+channel = "1.99.0"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/topgrade-17.12.1/src/command.rs 
new/topgrade-17.12.3/src/command.rs
--- old/topgrade-17.12.1/src/command.rs 2026-09-21 20:30:21.000000000 +0200
+++ new/topgrade-17.12.3/src/command.rs 2026-10-02 19:59:59.000000000 +0200
@@ -115,9 +115,6 @@
     ///
     /// Returns an `Err` if the command failed to execute, if `succeeded` 
returns an `Err`, or if
     /// the output contains invalid UTF-8.
-    // This function is currently unused, but is useful and makes sense with 
`output_checked_with`
-    //  and `output_checked_utf8` existing.
-    #[allow(dead_code)]
     #[track_caller]
     fn output_checked_with_utf8(
         &mut self,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/topgrade-17.12.1/src/main.rs 
new/topgrade-17.12.3/src/main.rs
--- old/topgrade-17.12.1/src/main.rs    2026-09-21 20:30:21.000000000 +0200
+++ new/topgrade-17.12.3/src/main.rs    2026-10-02 19:59:59.000000000 +0200
@@ -17,7 +17,7 @@
 #[cfg(unix)]
 use etcetera::base_strategy::Xdg;
 use rust_i18n::{i18n, t};
-use std::sync::LazyLock;
+use std::sync::{LazyLock, OnceLock};
 use tempfile::{TempDir, tempdir};
 use tracing::debug;
 
@@ -59,6 +59,8 @@
 // Init and load the i18n files
 i18n!("locales", fallback = "en");
 
+pub(crate) static OLD_CWD: OnceLock<PathBuf> = OnceLock::new();
+
 struct TempCwd {
     #[allow(unused)]
     temp_dir: TempDir,
@@ -154,7 +156,8 @@
 
     // Some steps (like mise or pi) have different behavior when ran in a 
project directory.
     //  Since Topgrade only handles global updates, run all commands in a 
temporary directory.
-    let _temp_cwd = TempCwd::new()?;
+    let temp_cwd = TempCwd::new()?;
+    OLD_CWD.set(temp_cwd.old_cwd.clone()).unwrap();
 
     let elevated = is_elevated();
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/topgrade-17.12.1/src/step.rs 
new/topgrade-17.12.3/src/step.rs
--- old/topgrade-17.12.1/src/step.rs    2026-09-21 20:30:21.000000000 +0200
+++ new/topgrade-17.12.3/src/step.rs    2026-10-02 19:59:59.000000000 +0200
@@ -827,8 +827,6 @@
         Winget,
         System,
         MicrosoftStore,
-        BrewFormula,
-        BrewCask,
         Zerobrew,
         Macports,
         Xcodes,
@@ -880,7 +878,6 @@
         Rcm,
         Maza,
         Adless,
-        Hyprpm,
         Atuin,
         Atom,
         Fossil,
@@ -1003,6 +1000,11 @@
         AntigravityCli,
         Zed,
         // Steps that should run last
+        // Runs `sudo -k` at startup, which drops cached sudo credentials for 
every later step
+        BrewFormula,
+        BrewCask,
+        // Runs `sudo -k` at the end, which drops cached sudo credentials for 
every later step
+        Hyprpm,
         // Last out of convention
         CustomCommands,
         // Last because it prompts for restart
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/topgrade-17.12.1/src/steps/generic.rs 
new/topgrade-17.12.3/src/steps/generic.rs
--- old/topgrade-17.12.1/src/steps/generic.rs   2026-09-21 20:30:21.000000000 
+0200
+++ new/topgrade-17.12.3/src/steps/generic.rs   2026-10-02 19:59:59.000000000 
+0200
@@ -2827,6 +2827,38 @@
     pull_result
 }
 
+#[derive(Deserialize)]
+struct MiseDoctor {
+    // Added in mise 2025.7.2
+    self_update_available: Option<bool>,
+}
+
+/// Packagers can disable `mise self-update` without removing the subcommand 
(e.g. the APT package
+/// ships a `mise-self-update-instructions.toml`), in which case it still 
shows up in `mise --help`
+/// but fails when run. `mise doctor` reports whether self-update is actually 
available.
+fn mise_supports_self_update(ctx: &ExecutionContext, mise: &Path) -> 
Result<bool> {
+    // `mise doctor` exits with 1 when it finds problems, so don't check the 
exit code.
+    let output = ctx
+        .execute(mise)
+        .always()
+        .args(["doctor", "--json"])
+        .output_checked_with_utf8(|_| Ok(()))?;
+    let doctor: MiseDoctor = serde_json::from_str(&output.stdout)
+        .wrap_err_with(|| output_changed_message!("mise doctor --json", "json 
output invalid"))?;
+    if let Some(available) = doctor.self_update_available {
+        return Ok(available);
+    }
+
+    // Older versions don't report it, but omit the subcommand when built 
without self-update.
+    Ok(ctx
+        .execute(mise)
+        .always()
+        .arg("--help")
+        .output_checked_utf8()?
+        .stdout
+        .contains("self-update"))
+}
+
 pub fn run_mise(ctx: &ExecutionContext) -> Result<()> {
     let mise = require("mise")?;
 
@@ -2839,15 +2871,7 @@
     } else {
         // This used to run self-update and check for exit code 1 and the 
string 'cannot update' in stderr.
         //  However, this caused issues with mise's y/n prompt 
(https://github.com/topgrade-rs/topgrade/issues/2307).
-        let supports_self_update = ctx
-            .execute(&mise)
-            .always()
-            .arg("--help")
-            .output_checked_utf8()?
-            .stdout
-            .contains("self-update");
-
-        if supports_self_update {
+        if mise_supports_self_update(ctx, &mise)? {
             ctx.execute(&mise)
                 .args(["self-update"])
                 .arg_if(ctx.config().yes(Step::Mise), "--yes")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/topgrade-17.12.1/src/steps/os/linux.rs 
new/topgrade-17.12.3/src/steps/os/linux.rs
--- old/topgrade-17.12.1/src/steps/os/linux.rs  2026-09-21 20:30:21.000000000 
+0200
+++ new/topgrade-17.12.3/src/steps/os/linux.rs  2026-10-02 19:59:59.000000000 
+0200
@@ -1209,47 +1209,71 @@
 
     print_separator("Zed");
 
-    let version = Version::parse(
-        ctx.execute(zed)
-            .always()
-            .arg("--version")
-            .output_checked_utf8()?
-            .stdout
-            .split(' ')
-            .nth(1)
-            .ok_or_else(|| {
-                eyre!(output_changed_message!(
-                    "zed --version",
-                    "Should be in 'Zed x.y.z <...>' format"
-                ))
-            })?,
-    )
-    .wrap_err_with(|| output_changed_message!("zed --version", "Should be a 
valid version"))?;
+    let output = 
ctx.execute(zed).always().arg("--version").output_checked_utf8()?.stdout;
+    let mut words = output.split_whitespace();
+    // Stable prints `Zed x.y.z <...>`, other channels print `Zed <channel> 
x.y.z <...>`
+    let (channel, version) = match (words.next(), words.next(), words.next()) {
+        (Some("Zed"), Some(channel @ ("preview" | "nightly" | "dev")), 
Some(version)) => (channel, version),
+        (Some("Zed"), Some(version), _) => ("stable", version),
+        _ => {
+            return Err(eyre!(output_changed_message!(
+                "zed --version",
+                "Should be in 'Zed [channel] x.y.z <...>' format"
+            )));
+        }
+    };
+    let version = Version::parse(version)
+        .wrap_err_with(|| output_changed_message!("zed --version", "Should be 
a valid version"))?;
+
+    if channel != "stable" && channel != "preview" {
+        return Err(
+            SkipStep(t!("Updates unsupported for the Zed {channel} channel", 
channel = channel).to_string()).into(),
+        );
+    }
 
     let client = 
reqwest::blocking::Client::builder().user_agent("Topgrade").build()?;
 
     #[derive(Deserialize)]
     struct Response {
         tag_name: String,
+        prerelease: bool,
     }
 
-    let latest = Version::parse(
+    let release = if channel == "stable" {
         client
             
.get("https://api.github.com/repos/zed-industries/zed/releases/latest";)
             .send()
             .wrap_err("Failed to get latest version")?
             .json::<Response>()?
-            .tag_name
-            .strip_prefix('v')
-            .ok_or_eyre("Tag on GitHub doesn't start with 'v'")?,
-    )?;
+    } else {
+        // Preview releases are GitHub prereleases tagged `vx.y.z-pre`; the 
list is sorted newest first
+        client
+            .get("https://api.github.com/repos/zed-industries/zed/releases";)
+            .send()
+            .wrap_err("Failed to fetch releases")?
+            .json::<Vec<Response>>()?
+            .into_iter()
+            .find(|release| release.prerelease && 
release.tag_name.ends_with("-pre"))
+            .ok_or_else(|| eyre!(t!("No Zed preview release found on 
GitHub")))?
+    };
+
+    let tag = release
+        .tag_name
+        .strip_prefix('v')
+        .ok_or_eyre("Tag on GitHub doesn't start with 'v'")?;
+    // The installed preview reports `x.y.z` without the `-pre` suffix
+    let latest = Version::parse(tag.strip_suffix("-pre").unwrap_or(tag))?;
 
     if version < latest {
         let mut response = client
             .get("https://zed.dev/install.sh";)
             .send()
             .wrap_err("Failed to download install script")?;
-        let child = ctx.execute("sh").stdin(Stdio::piped()).spawn()?;
+        let child = ctx
+            .execute("sh")
+            .env("ZED_CHANNEL", channel)
+            .stdin(Stdio::piped())
+            .spawn()?;
         let mut child = match child {
             ExecutorChild::Wet(child) => child,
             ExecutorChild::Dry => return Ok(()),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/topgrade-17.12.1/src/terminal.rs 
new/topgrade-17.12.3/src/terminal.rs
--- old/topgrade-17.12.1/src/terminal.rs        2026-09-21 20:30:21.000000000 
+0200
+++ new/topgrade-17.12.3/src/terminal.rs        2026-10-02 19:59:59.000000000 
+0200
@@ -17,6 +17,7 @@
 #[cfg(windows)]
 use which_crate::which;
 
+use crate::OLD_CWD;
 use crate::command::CommandExt;
 use crate::runner::StepResult;
 
@@ -34,7 +35,10 @@
 
 #[expect(clippy::disallowed_methods)]
 pub fn run_shell() -> eyre::Result<()> {
-    Command::new(shell()).env("IN_TOPGRADE", "1").status_checked()
+    Command::new(shell())
+        .env("IN_TOPGRADE", "1")
+        .current_dir(OLD_CWD.get().expect("OLD_CWD should be set at this 
point"))
+        .status_checked()
 }
 
 struct Terminal {

++++++ vendor.tar.zst ++++++
/work/SRC/openSUSE:Factory/topgrade/vendor.tar.zst 
/work/SRC/openSUSE:Factory/.topgrade.new.3698736/vendor.tar.zst differ: char 7, 
line 1

Reply via email to