Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package topgrade for openSUSE:Factory checked in at 2025-11-26 18:51:03 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/topgrade (Old) and /work/SRC/openSUSE:Factory/.topgrade.new.14147 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "topgrade" Wed Nov 26 18:51:03 2025 rev:14 rq:1320204 version:16.5.0 Changes: -------- --- /work/SRC/openSUSE:Factory/topgrade/topgrade.changes 2025-11-19 14:54:54.754616538 +0100 +++ /work/SRC/openSUSE:Factory/.topgrade.new.14147/topgrade.changes 2025-11-26 18:51:05.160948803 +0100 @@ -1,0 +2,36 @@ +Wed Nov 26 14:04:57 UTC 2025 - [email protected] + +- Update to version 16.5.0: + * chore: release v16.5.0 (#1547) + * fix(auto-cpufreq): fix skipping on systems with merged bin/sbin (#1556) + * chore(pre-commit): autoupdate (#1560) + * chore(deps): update release-plz/action digest to 1efcf74 (#1561) + * chore(deps): lock file maintenance (#1555) + * chore(deps): update github/codeql-action action to v4.31.5 (#1559) + * feat: add colors to --help/-h (#1553) + * feat(mise): add support for parallel job configuration in mise (#1548) + * feat(brew): add Homebrew cask support for Linux (#1539) + * chore(deps): update rust crate indexmap to v2.12.1 (#1550) + * chore(deps): update actions/checkout action to v6 (#1551) + * docs: Add metadata to Python package for PyPI (#1549) + * docs(installation): update copr repo info in readme (#1545) + * feat(mise): add mise configuration options for bump and interactive modes (#1546) +- Update to version 16.4.2: + * chore: release v16.4.2 (#1544) + * chore(deps): update dawidd6/action-homebrew-bump-formula action to v6 (#1543) + * chore: release v16.4.1 (#1542) + * refactor: refactor run_containers error handling (#1541) + * chore: release v16.4.0 (#1528) + * chore(deps): update clap, clap_builder, clap_complete (#1540) + * chore(deps): update github/codeql-action action to v4.31.4 (#1531) + * test(config): add custom commands order test (#1536) + * fix(deps): restore custom commands order (#1535) + * refactor: make Config methods more consistent by utilizing `#[derive(Default)]` (#1534) + * docs(issue templates): use issue types (#1533) + * feat(os): add Origami Linux support (#1530) + * chore(deps): lock file maintenance (#1505) + * chore(deps): update actions/checkout digest to 93cb6ef (#1526) + * chore(deps): update actions/checkout action to v5.0.1 (#1527) + * feat(containers): add option to run `system prune` (#1523) + +------------------------------------------------------------------- Old: ---- topgrade-16.3.0.tar.zst New: ---- topgrade-16.5.0.tar.zst ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ topgrade.spec ++++++ --- /var/tmp/diff_new_pack.2Qnb4I/_old 2025-11-26 18:51:08.221078441 +0100 +++ /var/tmp/diff_new_pack.2Qnb4I/_new 2025-11-26 18:51:08.221078441 +0100 @@ -17,7 +17,7 @@ Name: topgrade -Version: 16.3.0 +Version: 16.5.0 Release: 0 Summary: Upgrade all the things License: GPL-3.0-only ++++++ _service ++++++ --- /var/tmp/diff_new_pack.2Qnb4I/_old 2025-11-26 18:51:08.269080474 +0100 +++ /var/tmp/diff_new_pack.2Qnb4I/_new 2025-11-26 18:51:08.273080644 +0100 @@ -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">v16.3.0</param> + <param name="revision">v16.5.0</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.2Qnb4I/_old 2025-11-26 18:51:08.301081830 +0100 +++ /var/tmp/diff_new_pack.2Qnb4I/_new 2025-11-26 18:51:08.305081999 +0100 @@ -1,7 +1,7 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/topgrade-rs/topgrade.git</param> - <param name="changesrevision">f9735f3b3187d55b80deb749e93bfaacccb14d7a</param></service><service name="tar_scm"> + <param name="changesrevision">eb68a2d8034364b2cba64b22aea11d3bda1a8b12</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-16.3.0.tar.zst -> topgrade-16.5.0.tar.zst ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/topgrade-16.3.0/.github/ISSUE_TEMPLATE/bug_report.md new/topgrade-16.5.0/.github/ISSUE_TEMPLATE/bug_report.md --- old/topgrade-16.3.0/.github/ISSUE_TEMPLATE/bug_report.md 2025-11-17 16:39:39.000000000 +0100 +++ new/topgrade-16.5.0/.github/ISSUE_TEMPLATE/bug_report.md 2025-11-26 14:27:49.000000000 +0100 @@ -2,7 +2,7 @@ name: Bug report about: Topgrade is misbehaving title: '' -labels: 'C-bug' +type: Bug assignees: '' --- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/topgrade-16.3.0/.github/ISSUE_TEMPLATE/feature_request.md new/topgrade-16.5.0/.github/ISSUE_TEMPLATE/feature_request.md --- old/topgrade-16.3.0/.github/ISSUE_TEMPLATE/feature_request.md 2025-11-17 16:39:39.000000000 +0100 +++ new/topgrade-16.5.0/.github/ISSUE_TEMPLATE/feature_request.md 2025-11-26 14:27:49.000000000 +0100 @@ -2,7 +2,7 @@ name: General feature request about: Suggest a general feature, or feature within an already existing step title: '' -labels: C-feature request +type: Feature assignees: '' --- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/topgrade-16.3.0/.github/ISSUE_TEMPLATE/step_request.md new/topgrade-16.5.0/.github/ISSUE_TEMPLATE/step_request.md --- old/topgrade-16.3.0/.github/ISSUE_TEMPLATE/step_request.md 2025-11-17 16:39:39.000000000 +0100 +++ new/topgrade-16.5.0/.github/ISSUE_TEMPLATE/step_request.md 2025-11-26 14:27:49.000000000 +0100 @@ -2,7 +2,8 @@ name: New step request about: Suggest a new step/package manager to update title: '' -labels: C-feature request, request step +type: Feature +labels: request step assignees: '' --- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/topgrade-16.3.0/.github/workflows/check_config_creation_if_not_exists.yml new/topgrade-16.5.0/.github/workflows/check_config_creation_if_not_exists.yml --- old/topgrade-16.3.0/.github/workflows/check_config_creation_if_not_exists.yml 2025-11-17 16:39:39.000000000 +0100 +++ new/topgrade-16.5.0/.github/workflows/check_config_creation_if_not_exists.yml 2025-11-26 14:27:49.000000000 +0100 @@ -15,7 +15,7 @@ runs-on: ubuntu-latest steps: - - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 with: persist-credentials: false diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/topgrade-16.3.0/.github/workflows/check_i18n.yml new/topgrade-16.5.0/.github/workflows/check_i18n.yml --- old/topgrade-16.3.0/.github/workflows/check_i18n.yml 2025-11-17 16:39:39.000000000 +0100 +++ new/topgrade-16.5.0/.github/workflows/check_i18n.yml 2025-11-26 14:27:49.000000000 +0100 @@ -14,7 +14,7 @@ runs-on: ubuntu-latest steps: - name: Checkout code - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 with: persist-credentials: false diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/topgrade-16.3.0/.github/workflows/check_security_vulnerability.yml new/topgrade-16.5.0/.github/workflows/check_security_vulnerability.yml --- old/topgrade-16.3.0/.github/workflows/check_security_vulnerability.yml 2025-11-17 16:39:39.000000000 +0100 +++ new/topgrade-16.5.0/.github/workflows/check_security_vulnerability.yml 2025-11-26 14:27:49.000000000 +0100 @@ -24,7 +24,7 @@ security-events: write steps: - name: Checkout code - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 with: persist-credentials: false @@ -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@014f16e7ab1402f30e7c3329d33797e7948572db # v4.31.3 + uses: github/codeql-action/upload-sarif@fdbfb4d2750291e159f0156def62b853c2798ca2 # v4.31.5 with: sarif_file: devskim-results.sarif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/topgrade-16.3.0/.github/workflows/ci.yml new/topgrade-16.5.0/.github/workflows/ci.yml --- old/topgrade-16.3.0/.github/workflows/ci.yml 2025-11-17 16:39:39.000000000 +0100 +++ new/topgrade-16.5.0/.github/workflows/ci.yml 2025-11-26 14:27:49.000000000 +0100 @@ -23,7 +23,7 @@ runs-on: ubuntu-latest steps: - name: Checkout code - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 with: persist-credentials: false @@ -39,7 +39,7 @@ runs-on: ubuntu-latest steps: - name: Checkout code - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 with: persist-credentials: false @@ -135,7 +135,7 @@ matrix_target: ${{ matrix.target }} steps: - name: Checkout code - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 with: persist-credentials: false diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/topgrade-16.3.0/.github/workflows/create_release_assets.yml new/topgrade-16.5.0/.github/workflows/create_release_assets.yml --- old/topgrade-16.3.0/.github/workflows/create_release_assets.yml 2025-11-17 16:39:39.000000000 +0100 +++ new/topgrade-16.5.0/.github/workflows/create_release_assets.yml 2025-11-26 14:27:49.000000000 +0100 @@ -33,7 +33,7 @@ env: tag: ${{ github.event.client_payload.tag }} steps: - - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 with: persist-credentials: false @@ -169,7 +169,7 @@ matrix_target: ${{ matrix.target }} tag: ${{ github.event.client_payload.tag }} steps: - - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 with: persist-credentials: false diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/topgrade-16.3.0/.github/workflows/dependency-review.yml new/topgrade-16.5.0/.github/workflows/dependency-review.yml --- old/topgrade-16.3.0/.github/workflows/dependency-review.yml 2025-11-17 16:39:39.000000000 +0100 +++ new/topgrade-16.5.0/.github/workflows/dependency-review.yml 2025-11-26 14:27:49.000000000 +0100 @@ -17,7 +17,7 @@ runs-on: ubuntu-latest steps: - name: 'Checkout Repository' - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 with: persist-credentials: false diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/topgrade-16.3.0/.github/workflows/release-plz.yml new/topgrade-16.5.0/.github/workflows/release-plz.yml --- old/topgrade-16.3.0/.github/workflows/release-plz.yml 2025-11-17 16:39:39.000000000 +0100 +++ new/topgrade-16.5.0/.github/workflows/release-plz.yml 2025-11-26 14:27:49.000000000 +0100 @@ -17,7 +17,7 @@ id-token: write # For trusted publishing steps: - name: Checkout repository - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5 + uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6 with: fetch-depth: 0 persist-credentials: false @@ -25,7 +25,7 @@ uses: dtolnay/rust-toolchain@stable - name: Run release-plz id: release-plz - uses: release-plz/action@d529f731ae3e89610ada96eda34e5c6ba3b12214 # v0.5 + uses: release-plz/action@1efcf74dfcd6e500990dad806e286899ae384064 # v0.5 with: command: release env: @@ -53,14 +53,14 @@ cancel-in-progress: false steps: - name: Checkout repository - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5 + uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6 with: fetch-depth: 0 persist-credentials: false - name: Install Rust toolchain uses: dtolnay/rust-toolchain@stable - name: Run release-plz - uses: release-plz/action@d529f731ae3e89610ada96eda34e5c6ba3b12214 # v0.5 + uses: release-plz/action@1efcf74dfcd6e500990dad806e286899ae384064 # v0.5 with: command: release-pr env: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/topgrade-16.3.0/.github/workflows/release_to_homebrew.yml new/topgrade-16.5.0/.github/workflows/release_to_homebrew.yml --- old/topgrade-16.3.0/.github/workflows/release_to_homebrew.yml 2025-11-17 16:39:39.000000000 +0100 +++ new/topgrade-16.5.0/.github/workflows/release_to_homebrew.yml 2025-11-26 14:27:49.000000000 +0100 @@ -12,7 +12,7 @@ runs-on: ubuntu-latest steps: - name: Bump formulae - uses: dawidd6/action-homebrew-bump-formula@3428a0601bba3173ec0bdcc945be23fa27aa4c31 # v5 + uses: dawidd6/action-homebrew-bump-formula@c5ddc585e75f0f750a8b4f610688b4bec9e80915 # v6 with: # Custom GitHub access token with only the 'public_repo' scope enabled token: ${{secrets.HOMEBREW_ACCESS_TOKEN}} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/topgrade-16.3.0/.github/workflows/release_to_pypi.yml new/topgrade-16.5.0/.github/workflows/release_to_pypi.yml --- old/topgrade-16.3.0/.github/workflows/release_to_pypi.yml 2025-11-17 16:39:39.000000000 +0100 +++ new/topgrade-16.5.0/.github/workflows/release_to_pypi.yml 2025-11-26 14:27:49.000000000 +0100 @@ -15,7 +15,7 @@ matrix: target: [x86_64, x86, aarch64] steps: - - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 with: persist-credentials: false @@ -37,7 +37,7 @@ matrix: target: [x64, x86] steps: - - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 with: persist-credentials: false @@ -58,7 +58,7 @@ matrix: target: [x86_64, aarch64] steps: - - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 with: persist-credentials: false @@ -76,7 +76,7 @@ sdist: runs-on: ubuntu-latest steps: - - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 with: persist-credentials: false diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/topgrade-16.3.0/.github/workflows/scorecards.yml new/topgrade-16.5.0/.github/workflows/scorecards.yml --- old/topgrade-16.3.0/.github/workflows/scorecards.yml 2025-11-17 16:39:39.000000000 +0100 +++ new/topgrade-16.5.0/.github/workflows/scorecards.yml 2025-11-26 14:27:49.000000000 +0100 @@ -36,7 +36,7 @@ steps: - name: "Checkout code" - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 with: persist-credentials: false @@ -71,6 +71,6 @@ # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@014f16e7ab1402f30e7c3329d33797e7948572db # v4.31.3 + uses: github/codeql-action/upload-sarif@fdbfb4d2750291e159f0156def62b853c2798ca2 # v4.31.5 with: sarif_file: results.sarif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/topgrade-16.3.0/.pre-commit-config.yaml new/topgrade-16.5.0/.pre-commit-config.yaml --- old/topgrade-16.3.0/.pre-commit-config.yaml 2025-11-17 16:39:39.000000000 +0100 +++ new/topgrade-16.5.0/.pre-commit-config.yaml 2025-11-26 14:27:49.000000000 +0100 @@ -1,6 +1,6 @@ repos: - repo: https://github.com/gitleaks/gitleaks - rev: v8.29.0 + rev: v8.29.1 hooks: - id: gitleaks diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/topgrade-16.3.0/CHANGELOG.md new/topgrade-16.5.0/CHANGELOG.md --- old/topgrade-16.3.0/CHANGELOG.md 2025-11-17 16:39:39.000000000 +0100 +++ new/topgrade-16.5.0/CHANGELOG.md 2025-11-26 14:27:49.000000000 +0100 @@ -7,6 +7,64 @@ ## [Unreleased] +## [16.5.0](https://github.com/topgrade-rs/topgrade/compare/v16.4.2...v16.5.0) - 2025-11-26 + +### Added + +- add colors to --help/-h ([#1553](https://github.com/topgrade-rs/topgrade/pull/1553)) +- *(mise)* add support for parallel job configuration in mise ([#1548](https://github.com/topgrade-rs/topgrade/pull/1548)) +- *(brew)* add Homebrew cask support for Linux ([#1539](https://github.com/topgrade-rs/topgrade/pull/1539)) +- *(mise)* add mise configuration options for bump and interactive modes ([#1546](https://github.com/topgrade-rs/topgrade/pull/1546)) + +### Fixed + +- *(auto-cpufreq)* fix skipping on systems with merged bin/sbin ([#1556](https://github.com/topgrade-rs/topgrade/pull/1556)) + +### Other + +- *(pre-commit)* autoupdate ([#1560](https://github.com/topgrade-rs/topgrade/pull/1560)) +- *(deps)* update release-plz/action digest to 1efcf74 ([#1561](https://github.com/topgrade-rs/topgrade/pull/1561)) +- *(deps)* lock file maintenance ([#1555](https://github.com/topgrade-rs/topgrade/pull/1555)) +- *(deps)* update github/codeql-action action to v4.31.5 ([#1559](https://github.com/topgrade-rs/topgrade/pull/1559)) +- *(deps)* update rust crate indexmap to v2.12.1 ([#1550](https://github.com/topgrade-rs/topgrade/pull/1550)) +- *(deps)* update actions/checkout action to v6 ([#1551](https://github.com/topgrade-rs/topgrade/pull/1551)) +- Add metadata to Python package for PyPI ([#1549](https://github.com/topgrade-rs/topgrade/pull/1549)) +- *(installation)* update copr repo info in readme ([#1545](https://github.com/topgrade-rs/topgrade/pull/1545)) + +## [16.4.2](https://github.com/topgrade-rs/topgrade/compare/v16.4.1...v16.4.2) - 2025-11-20 + +### Other + +- *(deps)* update dawidd6/action-homebrew-bump-formula action to v6 ([#1543](https://github.com/topgrade-rs/topgrade/pull/1543)) + +## [16.4.1](https://github.com/topgrade-rs/topgrade/compare/v16.4.0...v16.4.1) - 2025-11-20 + +### Other + +- refactor run_containers error handling ([#1541](https://github.com/topgrade-rs/topgrade/pull/1541)) + +## [16.4.0](https://github.com/topgrade-rs/topgrade/compare/v16.3.0...v16.4.0) - 2025-11-20 + +### Added + +- *(os)* add Origami Linux support ([#1530](https://github.com/topgrade-rs/topgrade/pull/1530)) +- *(containers)* add option to run `system prune` ([#1523](https://github.com/topgrade-rs/topgrade/pull/1523)) + +### Fixed + +- *(deps)* restore custom commands order ([#1535](https://github.com/topgrade-rs/topgrade/pull/1535)) + +### Other + +- *(deps)* update clap, clap_builder, clap_complete ([#1540](https://github.com/topgrade-rs/topgrade/pull/1540)) +- *(deps)* update github/codeql-action action to v4.31.4 ([#1531](https://github.com/topgrade-rs/topgrade/pull/1531)) +- *(config)* add custom commands order test ([#1536](https://github.com/topgrade-rs/topgrade/pull/1536)) +- make Config methods more consistent by utilizing `#[derive(Default)]` ([#1534](https://github.com/topgrade-rs/topgrade/pull/1534)) +- *(issue templates)* use issue types ([#1533](https://github.com/topgrade-rs/topgrade/pull/1533)) +- *(deps)* lock file maintenance ([#1505](https://github.com/topgrade-rs/topgrade/pull/1505)) +- *(deps)* update actions/checkout digest to 93cb6ef ([#1526](https://github.com/topgrade-rs/topgrade/pull/1526)) +- *(deps)* update actions/checkout action to v5.0.1 ([#1527](https://github.com/topgrade-rs/topgrade/pull/1527)) + ## [16.3.0](https://github.com/topgrade-rs/topgrade/compare/v16.2.1...v16.3.0) - 2025-11-16 ### Added diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/topgrade-16.3.0/Cargo.lock new/topgrade-16.5.0/Cargo.lock --- old/topgrade-16.3.0/Cargo.lock 2025-11-17 16:39:39.000000000 +0100 +++ new/topgrade-16.5.0/Cargo.lock 2025-11-26 14:27:49.000000000 +0100 @@ -193,7 +193,7 @@ dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -228,7 +228,7 @@ dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -350,9 +350,9 @@ [[package]] name = "cc" -version = "1.2.46" +version = "1.2.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97463e1064cb1b1c1384ad0a0b9c8abd0988e2a91f52606c80ef14aadb63e36" +checksum = "cd405d82c84ff7f35739f175f67d8b9fb7687a0e84ccdc78bd3568839827cf07" dependencies = [ "find-msvc-tools", "shlex", @@ -385,19 +385,29 @@ [[package]] name = "clap" -version = "4.5.51" +version = "4.5.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c26d721170e0295f191a69bd9a1f93efcdb0aff38684b61ab5750468972e5f5" +checksum = "c9e340e012a1bf4935f5282ed1436d1489548e8f72308207ea5df0e23d2d03f8" dependencies = [ "clap_builder", "clap_derive", ] [[package]] +name = "clap-cargo" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d546f0e84ff2bfa4da1ce9b54be42285767ba39c688572ca32412a09a73851e5" +dependencies = [ + "anstyle", + "clap", +] + +[[package]] name = "clap_builder" -version = "4.5.51" +version = "4.5.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75835f0c7bf681bfd05abe44e965760fea999a5286c6eb2d59883634fd02011a" +checksum = "d76b5d13eaa18c901fd2f7fca939fefe3a0727a953561fefdf3b2922b8569d00" dependencies = [ "anstream", "anstyle", @@ -407,9 +417,9 @@ [[package]] name = "clap_complete" -version = "4.5.60" +version = "4.5.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e602857739c5a4291dfa33b5a298aeac9006185229a700e5810a3ef7272d971" +checksum = "39615915e2ece2550c0149addac32fb5bd312c657f43845bb9088cb9c8a7c992" dependencies = [ "clap", ] @@ -423,7 +433,7 @@ "heck", "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -625,7 +635,7 @@ dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -655,7 +665,7 @@ dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -707,7 +717,7 @@ dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -780,7 +790,7 @@ dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -985,7 +995,7 @@ dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -1118,9 +1128,9 @@ [[package]] name = "hashbrown" -version = "0.16.0" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" [[package]] name = "heck" @@ -1402,12 +1412,12 @@ [[package]] name = "indexmap" -version = "2.12.0" +version = "2.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6717a8d2a5a929a1a2eb43a12812498ed141a0bcfb7e8f7844fbdbe4303bba9f" +checksum = "0ad4bb2b565bca0645f4d68c5c9af97fba094e9791da685bf83cb5f3ce74acf2" dependencies = [ "equivalent", - "hashbrown 0.16.0", + "hashbrown 0.16.1", "serde", "serde_core", ] @@ -2204,7 +2214,7 @@ "serde", "serde_json", "serde_yaml", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -2398,7 +2408,7 @@ dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -2422,7 +2432,7 @@ dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -2511,9 +2521,9 @@ [[package]] name = "signal-hook-registry" -version = "1.4.6" +version = "1.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" +checksum = "7664a098b8e616bdfcc2dc0e9ac44eb231eedf41db4e9fe95d8d32ec728dedad" dependencies = [ "libc", ] @@ -2608,7 +2618,7 @@ "heck", "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -2630,9 +2640,9 @@ [[package]] name = "syn" -version = "2.0.110" +version = "2.0.111" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a99801b5bd34ede4cf3fc688c5919368fea4e4814a4664359503e6015b280aea" +checksum = "390cc9a294ab71bdb1aa2e99d13be9c753cd2d7bd6560c77118597410c4d2e87" dependencies = [ "proc-macro2", "quote", @@ -2656,7 +2666,7 @@ dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -2744,7 +2754,7 @@ dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -2755,7 +2765,7 @@ dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -2964,11 +2974,12 @@ [[package]] name = "topgrade" -version = "16.3.0" +version = "16.5.0" dependencies = [ "base64ct", "chrono", "clap", + "clap-cargo", "clap_complete", "clap_mangen", "color-eyre", @@ -3076,7 +3087,7 @@ dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -3325,7 +3336,7 @@ "bumpalo", "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", "wasm-bindgen-shared", ] @@ -3520,7 +3531,7 @@ dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -3531,7 +3542,7 @@ dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -3867,7 +3878,7 @@ dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", "synstructure", ] @@ -3914,7 +3925,7 @@ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", "zbus_names", "zvariant", "zvariant_utils", @@ -3934,22 +3945,22 @@ [[package]] name = "zerocopy" -version = "0.8.27" +version = "0.8.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" +checksum = "43fa6694ed34d6e57407afbccdeecfa268c470a7d2a5b0cf49ce9fcc345afb90" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.27" +version = "0.8.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" +checksum = "c640b22cd9817fae95be82f0d2f90b11f7605f6c319d16705c459b27ac2cbc26" dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -3969,7 +3980,7 @@ dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", "synstructure", ] @@ -4009,7 +4020,7 @@ dependencies = [ "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", ] [[package]] @@ -4076,7 +4087,7 @@ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.110", + "syn 2.0.111", "zvariant_utils", ] @@ -4089,6 +4100,6 @@ "proc-macro2", "quote", "serde", - "syn 2.0.110", + "syn 2.0.111", "winnow", ] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/topgrade-16.3.0/Cargo.toml new/topgrade-16.5.0/Cargo.toml --- old/topgrade-16.3.0/Cargo.toml 2025-11-17 16:39:39.000000000 +0100 +++ new/topgrade-16.5.0/Cargo.toml 2025-11-26 14:27:49.000000000 +0100 @@ -6,7 +6,7 @@ license = "GPL-3.0-or-later" repository = "https://github.com/topgrade-rs/topgrade" rust-version = "1.84.1" -version = "16.3.0" +version = "16.5.0" authors = ["Roey Darwish Dror <[email protected]>", "Thomas Schönauer <[email protected]>"] exclude = ["doc/screenshot.gif", "BREAKINGCHANGES_dev.md"] edition = "2021" @@ -17,7 +17,7 @@ home = "=0.5.11" etcetera = "=0.10.0" serde = { version = "~1.0", features = ["derive"] } -toml = "=0.9.8" +toml = { version = "=0.9.8", features = ["preserve_order"] } which_crate = { version = "~8.0", package = "which" } shellexpand = "~3.1" clap = { version = "~4.5", features = ["cargo", "derive"] } @@ -51,6 +51,7 @@ ignore = "=0.4.23" globset = "=0.4.16" base64ct = "<1.8.0" +clap-cargo = "0.15.2" [patch.crates-io] mac-notification-sys = { git = "https://github.com/h4llow3En/mac-notification-sys" } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/topgrade-16.3.0/README.md new/topgrade-16.5.0/README.md --- old/topgrade-16.3.0/README.md 2025-11-17 16:39:39.000000000 +0100 +++ new/topgrade-16.5.0/README.md 2025-11-26 14:27:49.000000000 +0100 @@ -3,10 +3,10 @@ <img alt="Topgrade" src="doc/topgrade_transparent.png" width="850px"> </h1> - <a href="https://github.com/topgrade-rs/topgrade/releases"><img alt="GitHub Release" src="https://img.shields.io/github/release/topgrade-rs/topgrade.svg"></a> - <a href="https://crates.io/crates/topgrade"><img alt="crates.io" src="https://img.shields.io/crates/v/topgrade.svg"></a> - <a href="https://aur.archlinux.org/packages/topgrade"><img alt="AUR" src="https://img.shields.io/aur/version/topgrade.svg"></a> - <a href="https://formulae.brew.sh/formula/topgrade"><img alt="Homebrew" src="https://img.shields.io/homebrew/v/topgrade.svg"></a> +<a href="https://github.com/topgrade-rs/topgrade/releases"><img alt="GitHub Release" src="https://img.shields.io/github/release/topgrade-rs/topgrade.svg"></a> +<a href="https://crates.io/crates/topgrade"><img alt="crates.io" src="https://img.shields.io/crates/v/topgrade.svg"></a> +<a href="https://aur.archlinux.org/packages/topgrade"><img alt="AUR" src="https://img.shields.io/aur/version/topgrade.svg"></a> +<a href="https://formulae.brew.sh/formula/topgrade"><img alt="Homebrew" src="https://img.shields.io/homebrew/v/topgrade.svg"></a> <img alt="Demo" src="doc/topgrade_demo.gif"> </div> @@ -37,6 +37,8 @@ - Windows ([Winget](https://learn.microsoft.com/en-us/windows/package-manager/winget/)): [ `winget install --id=topgrade-rs.topgrade -e`](https://winstall.app/apps/topgrade-rs.topgrade) - macOS or Linux ([Homebrew](https://brew.sh/)): [`brew install topgrade`](https://formulae.brew.sh/formula/topgrade) +- Fedora/RHEL/AlmaLinux/CentOS-Stream ([Copr](https://copr.fedorainfracloud.org/)): [ + `sudo dnf copr enable lilay/topgrade && sudo dnf install topgrade`](https://copr.fedorainfracloud.org/coprs/lilay/topgrade/) ### Community-maintained @@ -46,8 +48,6 @@ `scoop bucket add main && scoop install main/topgrade`](https://scoop.sh/#/apps?q=topgrade) - macOS ([MacPorts](https://www.macports.org/)): [ `sudo port install topgrade`](https://ports.macports.org/port/topgrade/) -- Fedora ([Copr](https://copr.fedorainfracloud.org/)): [ - `dnf copr enable lilay/topgrade && dnf install topgrade`](https://copr.fedorainfracloud.org/coprs/lilay/topgrade/) - NixOS or Nix (nixpkgs): [topgrade](https://search.nixos.org/packages?show=topgrade) - Void Linux: [`sudo xbps-install -S topgrade`](https://voidlinux.org/packages/?arch=x86_64&q=topgrade) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/topgrade-16.3.0/config.example.toml new/topgrade-16.5.0/config.example.toml --- old/topgrade-16.3.0/config.example.toml 2025-11-17 16:39:39.000000000 +0100 +++ new/topgrade-16.5.0/config.example.toml 2025-11-26 14:27:49.000000000 +0100 @@ -291,6 +291,20 @@ # (default: false) # exclude_encrypted = false +[mise] +# Upgrades to the latest version available, bumping the version in mise.toml +# (default: false) +# bump = false + +# Number of jobs to run in parallel +# (default: 4) +# jobs = 4 + +# Run interactively +# (default: false) +# interactive = false + + [npm] # Use sudo if the NPM directory isn't owned by the current user # use_sudo = true @@ -342,6 +356,10 @@ # Specify the runtime to use for containers (default: "docker", allowed values: "docker", "podman") # runtime = "podman" +# Run 'docker system prune' to clean up unused containers, networks, and build cache +# (default: false) +# system_prune = false + [lensfun] # If disabled, Topgrade invokes `lensfun‑update‑data` without root privilege, # then the update will be only available to you. Otherwise, `sudo` is required, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/topgrade-16.3.0/locales/app.yml new/topgrade-16.5.0/locales/app.yml --- old/topgrade-16.3.0/locales/app.yml 2025-11-17 16:39:39.000000000 +0100 +++ new/topgrade-16.5.0/locales/app.yml 2025-11-26 14:27:49.000000000 +0100 @@ -694,6 +694,14 @@ zh_CN: "不是专用的 macOS brew" zh_TW: "不是專門的 macOS brew" de: "Kein angepasstes Brew für macOS" +"Homebrew cask support on Linux requires Homebrew 4.5.0 or later (found {version})": + en: "Homebrew cask support on Linux requires Homebrew 4.5.0 or later (found %{version})" + lt: "Homebrew cask palaikymas Linux sistemoje reikalauja Homebrew 4.5.0 arba naujesnes versijos (rasta %{version})" + es: "El soporte de cask de Homebrew en Linux requiere Homebrew 4.5.0 o posterior (encontrado %{version})" + fr: "Le support de cask Homebrew sur Linux nécessite Homebrew 4.5.0 ou supérieur (trouvé %{version})" + zh_CN: "Linux 上的 Homebrew cask 支持需要 Homebrew 4.5.0 或更高版本(找到 %{version})" + zh_TW: "Linux 上的 Homebrew cask 支援需要 Homebrew 4.5.0 或更高版本(找到 %{version})" + de: "Homebrew-Cask-Unterstützung unter Linux erfordert Homebrew 4.5.0 oder höher (gefunden %{version})" "Guix Pull Failed, Skipping": en: "Guix Pull Failed, Skipping" lt: "Guix traukti nepavyko, praleidžiama" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/topgrade-16.3.0/pyproject.toml new/topgrade-16.5.0/pyproject.toml --- old/topgrade-16.3.0/pyproject.toml 2025-11-17 16:39:39.000000000 +0100 +++ new/topgrade-16.5.0/pyproject.toml 2025-11-26 14:27:49.000000000 +0100 @@ -5,13 +5,20 @@ [project] name = "topgrade" dynamic = ["version"] +description = "Upgrade all the things" +readme = "README.md" +license = "GPL-3.0-or-later" requires-python = ">=3.7" classifiers = [ + "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", "Programming Language :: Rust", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", ] +urls.bugs = "https://github.com/topgrade-rs/topgrade/issues" +urls.homepage = "https://github.com/topgrade-rs/topgrade" + [tool.maturin] bindings = "bin" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/topgrade-16.3.0/src/config.rs new/topgrade-16.5.0/src/config.rs --- old/topgrade-16.3.0/src/config.rs 2025-11-17 16:39:39.000000000 +0100 +++ new/topgrade-16.5.0/src/config.rs 2025-11-26 14:27:49.000000000 +0100 @@ -60,6 +60,7 @@ #[merge(strategy = crate::utils::merge_strategies::vec_prepend_opt)] ignored_containers: Option<Vec<String>>, runtime: Option<ContainerRuntime>, + system_prune: Option<bool>, } #[derive(Deserialize, Default, Debug, Merge)] @@ -175,6 +176,15 @@ #[derive(Deserialize, Default, Debug, Merge)] #[serde(deny_unknown_fields)] #[allow(clippy::upper_case_acronyms)] +pub struct Mise { + bump: Option<bool>, + interactive: Option<bool>, + jobs: Option<u32>, +} + +#[derive(Deserialize, Default, Debug, Merge)] +#[serde(deny_unknown_fields)] +#[allow(clippy::upper_case_acronyms)] pub struct Firmware { upgrade: Option<bool>, } @@ -203,9 +213,10 @@ fetch_head: Option<bool>, } -#[derive(Debug, Deserialize, Clone, Copy)] +#[derive(Debug, Deserialize, Clone, Copy, Default)] #[serde(rename_all = "snake_case")] pub enum ArchPackageManager { + #[default] Autodetect, Aura, GarudaUpdate, @@ -217,9 +228,10 @@ Yay, } -#[derive(Clone, Copy, Debug, Deserialize)] +#[derive(Clone, Copy, Debug, Deserialize, Default)] #[serde(rename_all = "snake_case")] pub enum ContainerRuntime { + #[default] // defaults to a popular choice Docker, Podman, } @@ -357,10 +369,11 @@ show_distribution_summary: Option<bool>, } -#[derive(Clone, Copy, Debug, Deserialize, ValueEnum)] +#[derive(Clone, Copy, Debug, Deserialize, ValueEnum, Default)] #[clap(rename_all = "snake_case")] #[serde(rename_all = "snake_case")] pub enum TmuxSessionMode { + #[default] AttachIfNotInSession, AttachAlways, } @@ -468,6 +481,9 @@ chezmoi: Option<Chezmoi>, #[merge(strategy = crate::utils::merge_strategies::inner_merge_opt)] + mise: Option<Mise>, + + #[merge(strategy = crate::utils::merge_strategies::inner_merge_opt)] yarn: Option<Yarn>, #[merge(strategy = crate::utils::merge_strategies::inner_merge_opt)] @@ -713,7 +729,7 @@ // TODO: i18n of clap currently not easily possible. Waiting for https://github.com/clap-rs/clap/issues/380 // Tracking issue for i18n: https://github.com/topgrade-rs/topgrade/issues/859 #[derive(Parser, Debug)] -#[command(name = "topgrade", version)] +#[command(name = "topgrade", version, styles = clap_cargo::style::CLAP_STYLING)] pub struct CommandLineArgs { /// Edit the configuration file #[arg(long = "edit-config")] @@ -955,7 +971,16 @@ .containers .as_ref() .and_then(|containers| containers.runtime) - .unwrap_or(ContainerRuntime::Docker) // defaults to a popular choice + .unwrap_or_default() + } + + /// Whether to run system prune for containers. + pub fn containers_system_prune(&self) -> bool { + self.config_file + .containers + .as_ref() + .and_then(|containers| containers.system_prune) + .unwrap_or(false) } /// Tell whether the specified step should run. @@ -1027,7 +1052,7 @@ .misc .as_ref() .and_then(|misc| misc.tmux_session_mode) - .unwrap_or(TmuxSessionMode::AttachIfNotInSession) + .unwrap_or_default() } /// Tell whether we should perform cleanup steps. @@ -1281,7 +1306,7 @@ .vim .as_ref() .and_then(|c| c.force_plug_update) - .unwrap_or_default() + .unwrap_or(false) } /// Whether to send a desktop notification at the beginning of every step @@ -1354,7 +1379,7 @@ .linux .as_ref() .and_then(|s| s.arch_package_manager) - .unwrap_or(ArchPackageManager::Autodetect) + .unwrap_or_default() } /// Extra yay arguments @@ -1791,6 +1816,26 @@ .unwrap_or(false) } + pub fn mise_bump(&self) -> bool { + self.config_file + .mise + .as_ref() + .and_then(|mise| mise.bump) + .unwrap_or(false) + } + + pub fn mise_jobs(&self) -> u32 { + self.config_file.mise.as_ref().and_then(|mise| mise.jobs).unwrap_or(4) + } + + pub fn mise_interactive(&self) -> bool { + self.config_file + .mise + .as_ref() + .and_then(|mise| mise.interactive) + .unwrap_or(false) + } + pub fn vscode_profile(&self) -> Option<&str> { let vscode_cfg = self.config_file.vscode.as_ref()?; let profile = vscode_cfg.profile.as_ref()?; @@ -1879,4 +1924,24 @@ config.opt = CommandLineArgs::parse_from(["topgrade", "--remote-host-limit", "other_hostname"]); assert!(!config.should_execute_remote(Ok("hostname".to_string()), "user@remote_hostname")); } + + /// Ensure that custom commands are stored in insertion order. + #[test] + fn test_custom_commands_order() { + let toml_str = r#" +[commands] +z = "cmd_z" +y = "cmd_y" +x = "cmd_x" +"#; + let order: Vec<_> = toml::from_str::<ConfigFile>(toml_str) + .expect("toml parse error") + .commands + .expect("commands field missing") + .keys() + .cloned() + .collect(); + + assert_eq!(order, vec!["z", "y", "x"]); + } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/topgrade-16.3.0/src/step.rs new/topgrade-16.5.0/src/step.rs --- old/topgrade-16.3.0/src/step.rs 2025-11-17 16:39:39.000000000 +0100 +++ new/topgrade-16.5.0/src/step.rs 2025-11-26 14:27:49.000000000 +0100 @@ -225,7 +225,7 @@ Bin => runner.execute(*self, "bin", || generic::bin_update(ctx))?, Bob => runner.execute(*self, "Bob", || generic::run_bob(ctx))?, BrewCask => { - #[cfg(target_os = "macos")] + #[cfg(any(target_os = "linux", target_os = "macos"))] runner.execute(*self, "Brew Cask", || unix::run_brew_cask(ctx, unix::BrewVariant::Path))?; #[cfg(target_os = "macos")] runner.execute(*self, "Brew Cask (Intel)", || { @@ -750,6 +750,7 @@ Restarts, Flatpak, BrewFormula, + BrewCask, Lure, Waydroid, AutoCpufreq, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/topgrade-16.3.0/src/steps/containers.rs new/topgrade-16.5.0/src/steps/containers.rs --- old/topgrade-16.3.0/src/steps/containers.rs 2025-11-17 16:39:39.000000000 +0100 +++ new/topgrade-16.5.0/src/steps/containers.rs 2025-11-26 14:27:49.000000000 +0100 @@ -11,7 +11,7 @@ use wildmatch::WildMatch; use crate::command::CommandExt; -use crate::error::{self, SkipStep, TopgradeError}; +use crate::error::{SkipStep, TopgradeError}; use crate::terminal::print_separator; use crate::{execution_context::ExecutionContext, utils::require}; use rust_i18n::t; @@ -185,7 +185,6 @@ )); } - let mut success = true; let containers = list_containers(&crt, ctx.config().containers_ignored_tags()).context("Failed to list Docker containers")?; debug!("Containers to inspect: {:?}", containers); @@ -220,22 +219,21 @@ continue; } - success = false; + return Err(e); } } - if ctx.config().cleanup() { + if ctx.config().containers_system_prune() { + // Run system prune to clean up unused containers, networks, and build cache + ctx.execute(&crt) + .args(["system", "prune", "--force"]) + .status_checked()? + // Only run `image prune` if we don't run `system prune` + } else if ctx.config().cleanup() { // Remove dangling images debug!("Removing dangling images"); - if let Err(e) = ctx.execute(&crt).args(["image", "prune", "-f"]).status_checked() { - error!("Removing dangling images failed: {}", e); - success = false; - } + ctx.execute(&crt).args(["image", "prune", "-f"]).status_checked()? } - if success { - Ok(()) - } else { - Err(eyre!(error::StepFailed)) - } + Ok(()) } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/topgrade-16.3.0/src/steps/os/linux.rs new/topgrade-16.5.0/src/steps/os/linux.rs --- old/topgrade-16.3.0/src/steps/os/linux.rs 2025-11-17 16:39:39.000000000 +0100 +++ new/topgrade-16.5.0/src/steps/os/linux.rs 2025-11-26 14:27:49.000000000 +0100 @@ -78,6 +78,8 @@ Some("neon") => Distribution::KDENeon, Some("openmandriva") => Distribution::OpenMandriva, Some("pclinuxos") => Distribution::PCLinuxOS, + Some(id) if id.starts_with("origami") => Distribution::FedoraImmutable, + _ => { if let Some(name) = name { if name.contains("Vanilla") { @@ -1121,7 +1123,8 @@ } pub fn run_auto_cpufreq(ctx: &ExecutionContext) -> Result<()> { - let auto_cpu_freq = require("auto-cpufreq")?; + let auto_cpu_freq = require("auto-cpufreq")?.canonicalize()?; + if auto_cpu_freq != PathBuf::from("/usr/local/bin/auto-cpufreq") { return Err(SkipStep(String::from( "`auto-cpufreq` was not installed by the official installer, but presumably by a package manager.", @@ -1341,4 +1344,11 @@ fn test_cachyos() { test_template(include_str!("os_release/cachyos"), Distribution::Arch); } + + #[test] + fn test_origami() { + test_template(include_str!("os_release/origami"), Distribution::FedoraImmutable); + test_template(include_str!("os_release/origami-nvidia"), Distribution::FedoraImmutable); + test_template(include_str!("os_release/origami-test"), Distribution::FedoraImmutable); + } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/topgrade-16.3.0/src/steps/os/os_release/origami new/topgrade-16.5.0/src/steps/os/os_release/origami --- old/topgrade-16.3.0/src/steps/os/os_release/origami 1970-01-01 01:00:00.000000000 +0100 +++ new/topgrade-16.5.0/src/steps/os/os_release/origami 2025-11-26 14:27:49.000000000 +0100 @@ -0,0 +1,23 @@ +NAME="Origami Linux" +VERSION="43.20251117.0 (COSMIC Atomic)" +RELEASE_TYPE="stable" +ID="origami-linux" +VERSION_ID="43" +VERSION_CODENAME="" +PRETTY_NAME="Origami 折り紙" +ANSI_COLOR="0;38;2;60;110;180" +LOGO="fedora-logo-icon" +CPE_NAME="cpe:/o:fedoraproject:fedora:43" +DEFAULT_HOSTNAME="origami" +HOME_URL="https://origami.wf/" +DOCUMENTATION_URL="https://docs.fedoraproject.org/en-US/fedora/f43/" +SUPPORT_URL="https://ask.fedoraproject.org/" +BUG_REPORT_URL="https://gitlab.com/groups/origami-linux/-/issues" +REDHAT_BUGZILLA_PRODUCT="Fedora" +REDHAT_BUGZILLA_PRODUCT_VERSION="43" +REDHAT_SUPPORT_PRODUCT="Fedora" +REDHAT_SUPPORT_PRODUCT_VERSION="43" +SUPPORT_END="2026-12-02" +VARIANT="COSMIC Atomic" +VARIANT_ID="cosmic-atomic" +OSTREE_VERSION="43.20251117.0" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/topgrade-16.3.0/src/steps/os/os_release/origami-nvidia new/topgrade-16.5.0/src/steps/os/os_release/origami-nvidia --- old/topgrade-16.3.0/src/steps/os/os_release/origami-nvidia 1970-01-01 01:00:00.000000000 +0100 +++ new/topgrade-16.5.0/src/steps/os/os_release/origami-nvidia 2025-11-26 14:27:49.000000000 +0100 @@ -0,0 +1,23 @@ +NAME="Origami Linux Nvidia" +VERSION="43.20251117.0 (COSMIC Atomic)" +RELEASE_TYPE="stable" +ID="origami-linux-nvidia" +VERSION_ID="43" +VERSION_CODENAME="" +PRETTY_NAME="Origami 折り紙" +ANSI_COLOR="0;38;2;60;110;180" +LOGO="fedora-logo-icon" +CPE_NAME="cpe:/o:fedoraproject:fedora:43" +DEFAULT_HOSTNAME="origami" +HOME_URL="https://origami.wf/" +DOCUMENTATION_URL="https://docs.fedoraproject.org/en-US/fedora/f43/" +SUPPORT_URL="https://ask.fedoraproject.org/" +BUG_REPORT_URL="https://gitlab.com/groups/origami-linux/-/issues" +REDHAT_BUGZILLA_PRODUCT="Fedora" +REDHAT_BUGZILLA_PRODUCT_VERSION="43" +REDHAT_SUPPORT_PRODUCT="Fedora" +REDHAT_SUPPORT_PRODUCT_VERSION="43" +SUPPORT_END="2026-12-02" +VARIANT="COSMIC Atomic" +VARIANT_ID="cosmic-atomic" +OSTREE_VERSION="43.20251117.0" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/topgrade-16.3.0/src/steps/os/os_release/origami-test new/topgrade-16.5.0/src/steps/os/os_release/origami-test --- old/topgrade-16.3.0/src/steps/os/os_release/origami-test 1970-01-01 01:00:00.000000000 +0100 +++ new/topgrade-16.5.0/src/steps/os/os_release/origami-test 2025-11-26 14:27:49.000000000 +0100 @@ -0,0 +1,23 @@ +NAME="Origami Linux Test" +VERSION="43.20251117.0 (COSMIC Atomic)" +RELEASE_TYPE="stable" +ID="origami-linux-test" +VERSION_ID="43" +VERSION_CODENAME="" +PRETTY_NAME="Origami 折り紙" +ANSI_COLOR="0;38;2;60;110;180" +LOGO="fedora-logo-icon" +CPE_NAME="cpe:/o:fedoraproject:fedora:43" +DEFAULT_HOSTNAME="origami" +HOME_URL="https://origami.wf/" +DOCUMENTATION_URL="https://docs.fedoraproject.org/en-US/fedora/f43/" +SUPPORT_URL="https://ask.fedoraproject.org/" +BUG_REPORT_URL="https://gitlab.com/groups/origami-linux/-/issues" +REDHAT_BUGZILLA_PRODUCT="Fedora" +REDHAT_BUGZILLA_PRODUCT_VERSION="43" +REDHAT_SUPPORT_PRODUCT="Fedora" +REDHAT_SUPPORT_PRODUCT_VERSION="43" +SUPPORT_END="2026-12-02" +VARIANT="COSMIC Atomic" +VARIANT_ID="cosmic-atomic" +OSTREE_VERSION="43.20251117.0" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/topgrade-16.3.0/src/steps/os/unix.rs new/topgrade-16.5.0/src/steps/os/unix.rs --- old/topgrade-16.3.0/src/steps/os/unix.rs 2025-11-17 16:39:39.000000000 +0100 +++ new/topgrade-16.5.0/src/steps/os/unix.rs 2025-11-26 14:27:49.000000000 +0100 @@ -81,7 +81,6 @@ /// Execute an "internal" brew command, i.e. one that should always be run /// even when dry-running. Basically just a wrapper around [`Command::new`] /// that uses `arch` to run using the correct architecture if needed. - #[cfg(target_os = "macos")] fn execute_internal(self) -> Command { match self { BrewVariant::MacIntel if cfg!(target_arch = "aarch64") => { @@ -365,12 +364,48 @@ Ok(()) } -#[cfg(target_os = "macos")] +#[cfg(any(target_os = "linux", target_os = "macos"))] pub fn run_brew_cask(ctx: &ExecutionContext, variant: BrewVariant) -> Result<()> { let binary_name = require(variant.binary_name())?; + + #[cfg(target_os = "macos")] if variant.is_path() && !BrewVariant::is_macos_custom(binary_name) { return Err(SkipStep(t!("Not a custom brew for macOS").to_string()).into()); } + + #[cfg(target_os = "linux")] + { + // Homebrew cask support was added in version 4.5.0 + let version_output = Command::new(&binary_name).arg("--version").output_checked_utf8()?; + + let version_line = version_output + .stdout + .lines() + .next() + .ok_or_else(|| eyre!(output_changed_message!("brew --version", "no output lines")))?; + + let version_str = version_line.split_whitespace().nth(1).ok_or_else(|| { + eyre!(output_changed_message!( + "brew --version", + "Expected version after 'Homebrew'" + )) + })?; + + let version = Version::parse(version_str) + .wrap_err_with(|| output_changed_message!("brew --version", "Invalid version"))?; + + if version < Version::new(4, 5, 0) { + return Err(SkipStep( + t!( + "Homebrew cask support on Linux requires Homebrew 4.5.0 or later (found {version})", + version = version + ) + .to_string(), + ) + .into()); + } + } + print_separator(format!("{} - Cask", variant.step_title())); let cask_upgrade_exists = variant @@ -824,7 +859,23 @@ } } - ctx.execute(&mise).arg("upgrade").status_checked() + let mut cmd = ctx.execute(&mise); + + cmd.arg("upgrade"); + + if ctx.config().mise_interactive() { + cmd.arg("--interactive"); + } + + if ctx.config().mise_bump() { + cmd.arg("--bump"); + } + + if ctx.config().mise_jobs() != 4 { + cmd.args(["--jobs", &ctx.config().mise_jobs().to_string()]); + } + + cmd.status_checked() } pub fn run_home_manager(ctx: &ExecutionContext) -> Result<()> { ++++++ vendor.tar.zst ++++++ /work/SRC/openSUSE:Factory/topgrade/vendor.tar.zst /work/SRC/openSUSE:Factory/.topgrade.new.14147/vendor.tar.zst differ: char 7, line 1
