Skip to content

chore: release#109

Closed
QaidVoid wants to merge 2 commits intomainfrom
release-plz-2025-11-23T05-29-05Z
Closed

chore: release#109
QaidVoid wants to merge 2 commits intomainfrom
release-plz-2025-11-23T05-29-05Z

Conversation

@QaidVoid
Copy link
Member

@QaidVoid QaidVoid commented Nov 23, 2025

🤖 New release

  • soar-core: 0.8.1 -> 0.9.0 (⚠ API breaking changes)
  • soar-cli: 0.8.1 -> 0.8.2

soar-core breaking changes

--- failure constructible_struct_adds_field: externally-constructible struct adds field ---

Description:
A pub struct constructible with a struct literal has a new pub field. Existing struct literals must be updated to include the new field.
        ref: https://doc.rust-lang.org/reference/expressions/struct-expr.html
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.45.0/src/lints/constructible_struct_adds_field.ron

Failed in:
  field InstallTarget.pinned in /tmp/.tmpAy1SkS/soar/crates/soar-core/src/package/install.rs:50
  field Package.recurse_provides in /tmp/.tmpAy1SkS/soar/crates/soar-core/src/database/models.rs:69

--- failure enum_missing: pub enum removed or renamed ---

Description:
A publicly-visible enum cannot be imported by its prior path. A `pub use` may have been removed, or the enum itself may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.45.0/src/lints/enum_missing.ron

Failed in:
  enum soar_core::package::formats::PackageFormat, previously in file /tmp/.tmpFN1x2o/soar-core/src/package/formats/mod.rs:17
  enum soar_core::database::packages::FilterCondition, previously in file /tmp/.tmpFN1x2o/soar-core/src/database/packages/models.rs:6
  enum soar_core::error::ConfigError, previously in file /tmp/.tmpFN1x2o/soar-core/src/error.rs:5
  enum soar_core::database::packages::LogicalOp, previously in file /tmp/.tmpFN1x2o/soar-core/src/database/packages/models.rs:31
  enum soar_core::database::packages::SortDirection, previously in file /tmp/.tmpFN1x2o/soar-core/src/database/packages/models.rs:24
  enum soar_core::database::migration::DbKind, previously in file /tmp/.tmpFN1x2o/soar-core/src/database/migration.rs:16
  enum soar_core::database::packages::ProvideStrategy, previously in file /tmp/.tmpFN1x2o/soar-core/src/database/packages/models.rs:53

--- failure enum_variant_added: enum variant added on exhaustive enum ---

Description:
A publicly-visible enum without #[non_exhaustive] has a new variant.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#enum-variant-new
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.45.0/src/lints/enum_variant_added.ron

Failed in:
  variant SoarError:FileSystemError in /tmp/.tmpAy1SkS/soar/crates/soar-core/src/error.rs:30
  variant SoarError:HashError in /tmp/.tmpAy1SkS/soar/crates/soar-core/src/error.rs:34
  variant SoarError:PathError in /tmp/.tmpAy1SkS/soar/crates/soar-core/src/error.rs:38
  variant SoarError:UreqError in /tmp/.tmpAy1SkS/soar/crates/soar-core/src/error.rs:68
  variant SoarError:PackageError in /tmp/.tmpAy1SkS/soar/crates/soar-core/src/error.rs:76
  variant SoarError:RegexError in /tmp/.tmpAy1SkS/soar/crates/soar-core/src/error.rs:137

--- failure enum_variant_missing: pub enum variant removed or renamed ---

Description:
A publicly-visible enum has at least one variant that is no longer available under its prior name. It may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.45.0/src/lints/enum_variant_missing.ron

Failed in:
  variant SoarError::RusqliteError, previously in file /tmp/.tmpFN1x2o/soar-core/src/error.rs:64
  variant SoarError::ReqwestError, previously in file /tmp/.tmpFN1x2o/soar-core/src/error.rs:70
  variant SoarError::PlatformError, previously in file /tmp/.tmpFN1x2o/soar-core/src/error.rs:76
  variant SoarError::SquishyError, previously in file /tmp/.tmpFN1x2o/soar-core/src/error.rs:79
  variant SoarError::ImageError, previously in file /tmp/.tmpFN1x2o/soar-core/src/error.rs:82
  variant SoarError::ConfigAlreadyExists, previously in file /tmp/.tmpFN1x2o/soar-core/src/error.rs:103
  variant SoarError::InvalidProfile, previously in file /tmp/.tmpFN1x2o/soar-core/src/error.rs:112

--- failure function_missing: pub fn removed or renamed ---

Description:
A publicly-visible function cannot be imported by its prior path. A `pub use` may have been removed, or the function itself may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.45.0/src/lints/function_missing.ron

Failed in:
  function soar_core::utils::home_path, previously in file /tmp/.tmpFN1x2o/soar-core/src/utils.rs:31
  function soar_core::metadata::fetch_public_key, previously in file /tmp/.tmpFN1x2o/soar-core/src/metadata.rs:193
  function soar_core::utils::calculate_dir_size, previously in file /tmp/.tmpFN1x2o/soar-core/src/utils.rs:270
  function soar_core::toml::annotate_toml_table, previously in file /tmp/.tmpFN1x2o/soar-core/src/toml.rs:55
  function soar_core::package::formats::common::symlink_desktop, previously in file /tmp/.tmpFN1x2o/soar-core/src/package/formats/common.rs:97
  function soar_core::utils::home_data_path, previously in file /tmp/.tmpFN1x2o/soar-core/src/utils.rs:49
  function soar_core::package::formats::appimage::integrate_appimage, previously in file /tmp/.tmpFN1x2o/soar-core/src/package/formats/appimage.rs:12
  function soar_core::config::set_current_profile, previously in file /tmp/.tmpFN1x2o/soar-core/src/config.rs:259
  function soar_core::package::formats::common::setup_portable_dir, previously in file /tmp/.tmpFN1x2o/soar-core/src/package/formats/common.rs:225
  function soar_core::utils::parse_size, previously in file /tmp/.tmpFN1x2o/soar-core/src/utils.rs:100
  function soar_core::utils::icons_dir, previously in file /tmp/.tmpFN1x2o/soar-core/src/utils.rs:258
  function soar_core::toml::append_docs_as_toml_comments, previously in file /tmp/.tmpFN1x2o/soar-core/src/toml.rs:18
  function soar_core::package::formats::wrappe::setup_wrappe_portable_dir, previously in file /tmp/.tmpFN1x2o/soar-core/src/package/formats/wrappe.rs:7
  function soar_core::utils::calc_magic_bytes, previously in file /tmp/.tmpFN1x2o/soar-core/src/utils.rs:160
  function soar_core::utils::home_config_path, previously in file /tmp/.tmpFN1x2o/soar-core/src/utils.rs:41
  function soar_core::database::migration::run_nests, previously in file /tmp/.tmpFN1x2o/soar-core/src/database/migration.rs:107
  function soar_core::utils::parse_duration, previously in file /tmp/.tmpFN1x2o/soar-core/src/utils.rs:294
  function soar_core::config::get_config, previously in file /tmp/.tmpFN1x2o/soar-core/src/config.rs:238
  function soar_core::utils::process_dir, previously in file /tmp/.tmpFN1x2o/soar-core/src/utils.rs:201
  function soar_core::package::formats::common::integrate_remote, previously in file /tmp/.tmpFN1x2o/soar-core/src/package/formats/common.rs:146
  function soar_core::utils::build_path, previously in file /tmp/.tmpFN1x2o/soar-core/src/utils.rs:54
  function soar_core::database::nests::repository::list, previously in file /tmp/.tmpFN1x2o/soar-core/src/database/nests/repository.rs:15
  function soar_core::utils::apply_sig_variants, previously in file /tmp/.tmpFN1x2o/soar-core/src/utils.rs:325
  function soar_core::config::generate_default_config, previously in file /tmp/.tmpFN1x2o/soar-core/src/config.rs:581
  function soar_core::repositories::get_platform_repositories, previously in file /tmp/.tmpFN1x2o/soar-core/src/repositories.rs:15
  function soar_core::utils::calculate_checksum, previously in file /tmp/.tmpFN1x2o/soar-core/src/utils.rs:125
  function soar_core::utils::get_platform, previously in file /tmp/.tmpFN1x2o/soar-core/src/utils.rs:266
  function soar_core::config::init, previously in file /tmp/.tmpFN1x2o/soar-core/src/config.rs:224
  function soar_core::utils::create_symlink, previously in file /tmp/.tmpFN1x2o/soar-core/src/utils.rs:171
  function soar_core::package::formats::common::symlink_icon, previously in file /tmp/.tmpFN1x2o/soar-core/src/package/formats/common.rs:65
  function soar_core::utils::home_cache_path, previously in file /tmp/.tmpFN1x2o/soar-core/src/utils.rs:45
  function soar_core::database::nests::repository::add, previously in file /tmp/.tmpFN1x2o/soar-core/src/database/nests/repository.rs:7
  function soar_core::metadata::fetch_metadata, previously in file /tmp/.tmpFN1x2o/soar-core/src/metadata.rs:222
  function soar_core::utils::default_install_patterns, previously in file /tmp/.tmpFN1x2o/soar-core/src/utils.rs:313
  function soar_core::config::get_current_profile, previously in file /tmp/.tmpFN1x2o/soar-core/src/config.rs:252
  function soar_core::toml::annotate_toml_array_of_tables, previously in file /tmp/.tmpFN1x2o/soar-core/src/toml.rs:104
  function soar_core::package::formats::common::create_portable_link, previously in file /tmp/.tmpFN1x2o/soar-core/src/package/formats/common.rs:203
  function soar_core::package::formats::get_file_type, previously in file /tmp/.tmpFN1x2o/soar-core/src/package/formats/mod.rs:26
  function soar_core::utils::format_bytes, previously in file /tmp/.tmpFN1x2o/soar-core/src/utils.rs:87
  function soar_core::database::nests::repository::remove, previously in file /tmp/.tmpFN1x2o/soar-core/src/database/nests/repository.rs:30
  function soar_core::metadata::fetch_nest_metadata, previously in file /tmp/.tmpFN1x2o/soar-core/src/metadata.rs:38
  function soar_core::utils::desktop_dir, previously in file /tmp/.tmpFN1x2o/soar-core/src/utils.rs:254
  function soar_core::package::formats::common::integrate_package, previously in file /tmp/.tmpFN1x2o/soar-core/src/package/formats/common.rs:296

--- failure inherent_method_missing: pub method removed or renamed ---

Description:
A publicly-visible method or associated fn is no longer available under its prior name. It may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.45.0/src/lints/inherent_method_missing.ron

Failed in:
  PackageQuery::apply_filters, previously in file /tmp/.tmpFN1x2o/soar-core/src/package/query.rs:19

--- failure module_missing: pub module removed or renamed ---

Description:
A publicly-visible module cannot be imported by its prior path. A `pub use` may have been removed, or the module may have been renamed, removed, or made non-public.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.45.0/src/lints/module_missing.ron

Failed in:
  mod soar_core::config, previously in file /tmp/.tmpFN1x2o/soar-core/src/config.rs:1
  mod soar_core::database::nests::repository, previously in file /tmp/.tmpFN1x2o/soar-core/src/database/nests/repository.rs:1
  mod soar_core::package::formats::common, previously in file /tmp/.tmpFN1x2o/soar-core/src/package/formats/common.rs:1
  mod soar_core::package::formats, previously in file /tmp/.tmpFN1x2o/soar-core/src/package/formats/mod.rs:1
  mod soar_core::database::statements, previously in file /tmp/.tmpFN1x2o/soar-core/src/database/statements.rs:1
  mod soar_core::database::nests::models, previously in file /tmp/.tmpFN1x2o/soar-core/src/database/nests/models.rs:1
  mod soar_core::package::formats::appimage, previously in file /tmp/.tmpFN1x2o/soar-core/src/package/formats/appimage.rs:1
  mod soar_core::database::repository, previously in file /tmp/.tmpFN1x2o/soar-core/src/database/repository.rs:1
  mod soar_core::toml, previously in file /tmp/.tmpFN1x2o/soar-core/src/toml.rs:1
  mod soar_core::metadata, previously in file /tmp/.tmpFN1x2o/soar-core/src/metadata.rs:1
  mod soar_core::database::nests, previously in file /tmp/.tmpFN1x2o/soar-core/src/database/nests/mod.rs:1
  mod soar_core::package::formats::wrappe, previously in file /tmp/.tmpFN1x2o/soar-core/src/package/formats/wrappe.rs:1
  mod soar_core::database::packages, previously in file /tmp/.tmpFN1x2o/soar-core/src/database/packages/mod.rs:1
  mod soar_core::database::migration, previously in file /tmp/.tmpFN1x2o/soar-core/src/database/migration.rs:1
  mod soar_core::repositories, previously in file /tmp/.tmpFN1x2o/soar-core/src/repositories.rs:1

--- failure pub_module_level_const_missing: pub module-level const is missing ---

Description:
A public const is missing or renamed
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.45.0/src/lints/pub_module_level_const_missing.ron

Failed in:
  RUNIMAGE_MAGIC_BYTES in file /tmp/.tmpFN1x2o/soar-core/src/constants.rs:6
  CORE_MIGRATIONS in file /tmp/.tmpFN1x2o/soar-core/src/constants.rs:20
  SVG_MAGIC_BYTES in file /tmp/.tmpFN1x2o/soar-core/src/constants.rs:10
  ZST_MAGIC_BYTES in file /tmp/.tmpFN1x2o/soar-core/src/constants.rs:14
  APPIMAGE_MAGIC_BYTES in file /tmp/.tmpFN1x2o/soar-core/src/constants.rs:4
  METADATA_MIGRATIONS in file /tmp/.tmpFN1x2o/soar-core/src/constants.rs:19
  WRAPPE_MAGIC_BYTES in file /tmp/.tmpFN1x2o/soar-core/src/constants.rs:7
  NESTS_MIGRATIONS_DIR in file /tmp/.tmpFN1x2o/soar-core/src/constants.rs:21
  FLATIMAGE_MAGIC_BYTES in file /tmp/.tmpFN1x2o/soar-core/src/constants.rs:5
  PNG_MAGIC_BYTES in file /tmp/.tmpFN1x2o/soar-core/src/constants.rs:9
  SQLITE_MAGIC_BYTES in file /tmp/.tmpFN1x2o/soar-core/src/constants.rs:13
  ELF_MAGIC_BYTES in file /tmp/.tmpFN1x2o/soar-core/src/constants.rs:3

--- failure pub_static_missing: pub static is missing ---

Description:
A public static is missing, renamed, or made private.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.45.0/src/lints/pub_static_missing.ron

Failed in:
  CONFIG_PATH in file /tmp/.tmpFN1x2o/soar-core/src/config.rs:215
  CONFIG in file /tmp/.tmpFN1x2o/soar-core/src/config.rs:212
  CURRENT_PROFILE in file /tmp/.tmpFN1x2o/soar-core/src/config.rs:213

--- failure struct_missing: pub struct removed or renamed ---

Description:
A publicly-visible struct cannot be imported by its prior path. A `pub use` may have been removed, or the struct itself may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.45.0/src/lints/struct_missing.ron

Failed in:
  struct soar_core::database::repository::PackageRepository, previously in file /tmp/.tmpFN1x2o/soar-core/src/database/repository.rs:6
  struct soar_core::database::packages::PackageQueryBuilder, previously in file /tmp/.tmpFN1x2o/soar-core/src/database/packages/query.rs:14
  struct soar_core::database::connection::Database, previously in file /tmp/.tmpFN1x2o/soar-core/src/database/connection.rs:14
  struct soar_core::config::Repository, previously in file /tmp/.tmpFN1x2o/soar-core/src/config.rs:81
  struct soar_core::database::statements::DbStatements, previously in file /tmp/.tmpFN1x2o/soar-core/src/database/statements.rs:3
  struct soar_core::database::migration::MigrationManager, previously in file /tmp/.tmpFN1x2o/soar-core/src/database/migration.rs:11
  struct soar_core::database::packages::QueryFilter, previously in file /tmp/.tmpFN1x2o/soar-core/src/database/packages/models.rs:37
  struct soar_core::repositories::DefaultRepositoryInfo, previously in file /tmp/.tmpFN1x2o/soar-core/src/repositories.rs:2
  struct soar_core::config::Config, previously in file /tmp/.tmpFN1x2o/soar-core/src/config.rs:145
  struct soar_core::database::migration::Migration, previously in file /tmp/.tmpFN1x2o/soar-core/src/database/migration.rs:6
  struct soar_core::database::nests::models::Nest, previously in file /tmp/.tmpFN1x2o/soar-core/src/database/nests/models.rs:6
  struct soar_core::database::packages::PaginatedResponse, previously in file /tmp/.tmpFN1x2o/soar-core/src/database/packages/models.rs:44
  struct soar_core::database::packages::PackageProvide, previously in file /tmp/.tmpFN1x2o/soar-core/src/database/packages/models.rs:71
  struct soar_core::database::models::RemotePackage, previously in file /tmp/.tmpFN1x2o/soar-core/src/database/models.rs:302
  struct soar_core::config::Profile, previously in file /tmp/.tmpFN1x2o/soar-core/src/config.rs:30

--- failure struct_pub_field_missing: pub struct's pub field removed or renamed ---

Description:
A publicly-visible struct has at least one public field that is no longer available under its prior name. It may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.45.0/src/lints/struct_pub_field_missing.ron

Failed in:
  field rank of struct Package, previously in file /tmp/.tmpFN1x2o/soar-core/src/database/models.rs:37
  field pkg of struct Package, previously in file /tmp/.tmpFN1x2o/soar-core/src/database/models.rs:38
  field shasum of struct Package, previously in file /tmp/.tmpFN1x2o/soar-core/src/database/models.rs:57
  field download_count of struct Package, previously in file /tmp/.tmpFN1x2o/soar-core/src/database/models.rs:74
  field download_count_month of struct Package, previously in file /tmp/.tmpFN1x2o/soar-core/src/database/models.rs:75
  field download_count_week of struct Package, previously in file /tmp/.tmpFN1x2o/soar-core/src/database/models.rs:76
  field bundle of struct Package, previously in file /tmp/.tmpFN1x2o/soar-core/src/database/models.rs:79
  field bundle_type of struct Package, previously in file /tmp/.tmpFN1x2o/soar-core/src/database/models.rs:80
  field external of struct Package, previously in file /tmp/.tmpFN1x2o/soar-core/src/database/models.rs:84
  field installable of struct Package, previously in file /tmp/.tmpFN1x2o/soar-core/src/database/models.rs:85
  field trusted of struct Package, previously in file /tmp/.tmpFN1x2o/soar-core/src/database/models.rs:87
  field version_latest of struct Package, previously in file /tmp/.tmpFN1x2o/soar-core/src/database/models.rs:88
  field version_outdated of struct Package, previously in file /tmp/.tmpFN1x2o/soar-core/src/database/models.rs:89
  field pkg of struct InstalledPackage, previously in file /tmp/.tmpFN1x2o/soar-core/src/database/models.rs:188

--- failure trait_missing: pub trait removed or renamed ---

Description:
A publicly-visible trait cannot be imported by its prior path. A `pub use` may have been removed, or the trait itself may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.45.0/src/lints/trait_missing.ron

Failed in:
  trait soar_core::database::models::FromRow, previously in file /tmp/.tmpFN1x2o/soar-core/src/database/models.rs:27
  trait soar_core::database::models::PackageExt, previously in file /tmp/.tmpFN1x2o/soar-core/src/database/models.rs:20
Changelog

soar-core

0.9.0 - 2025-12-23

🚜 Refactor

  • (integration) Integrate soar with modular crates (#123) - (2d340e5)

⚙️ Miscellaneous Tasks

soar-cli

0.8.2 - 2025-12-23

⛰️ Features

  • (packages) Add declarative installation - (cfd0860)

🚜 Refactor

  • (integration) Integrate soar with modular crates (#123) - (2d340e5)

⚙️ Miscellaneous Tasks


This PR was generated with release-plz.

Summary by CodeRabbit

  • New Features

    • Added apply command to manage packages declaratively using configuration files, with support for dry-run and interactive confirmation modes.
    • Added def-packages command to generate a default package configuration template.
    • Introduced declarative package configuration with support for defaults, version pinning, portable configurations, and custom install patterns.
  • Refactor

    • Updated version numbers: soar-cli (0.8.2), soar-core (0.9.0).
    • Enhanced package update logic to support pinned packages.

✏️ Tip: You can customize this high-level summary in your review settings.

@QaidVoid QaidVoid added the release New Release (Probably Automated) label Nov 23, 2025
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Nov 23, 2025

Walkthrough

Adds declarative package management: new CLI commands (apply, def-packages), an apply implementation to compute and execute package diffs, a new soar-config::packages module with config loading/resolution and default generation, new config error variants, version bumps and changelog entries, and a relaxed DB update filter in repository core.

Changes

Cohort / File(s) Summary
CLI + apply flow
crates/soar-cli/src/apply.rs, crates/soar-cli/src/cli.rs, crates/soar-cli/src/main.rs
New apply implementation and CLI: ApplyDiff type, apply_packages(...) entry, compute/display/execute diff helpers; new Apply and DefPackages commands wired into main. Supports dry-run, interactive yes, prune, no-verify.
Configuration module
crates/soar-config/src/packages.rs, crates/soar-config/src/lib.rs, crates/soar-config/src/error.rs
New packages module: PackagesConfig, PackageSpec/PackageOptions, ResolvedPackage, config path, load/resolve/default/to_annotated_document, and generate_default_packages_config(). Adds PackagesConfigNotFound(String) and PackagesConfigAlreadyExists errors; exports pub mod packages.
Repository update logic
crates/soar-db/src/repository/core.rs
Removed prior filter preventing updates to pinned packages in CoreRepository::record_installation — updates no longer exclude pinned packages by that flag.
Version & changelogs
crates/soar-cli/Cargo.toml, crates/soar-core/Cargo.toml, CHANGELOG.md, crates/soar-core/CHANGELOG.md
Bumped soar-cli 0.8.1 → 0.8.2 and soar-core 0.8.1 → 0.9.0; added top-level v0.8.2 and crates/soar-core v0.9.0 changelog entries. No dependency changes.

Sequence Diagram(s)

mermaid
sequenceDiagram
participant CLI as CLI (user)
participant Apply as apply.rs
participant Config as soar-config
participant Metadata as Metadata/DB
participant Installer as Installer/Download
participant FS as Filesystem/Remove

CLI->>Apply: run apply_packages(prune,dry_run,yes,config,no_verify)
Note right of Apply: load & resolve declarations
Apply->>Config: PackagesConfig::load / resolved_packages
Config-->>Apply: Vec
Apply->>Metadata: fetch installed packages & metadata
Metadata-->>Apply: InstalledPackage metadata
Apply->>Apply: compute_diff(resolved, installed, prune)
alt dry_run == true
Apply->>CLI: display_diff (no actions)
else
Apply->>CLI: display_diff + confirm (if interactive)
CLI-->>Apply: confirmed
Apply->>Installer: install/update targets (concurrent)
Installer-->>Apply: install/update results
Apply->>FS: remove packages in to_remove
FS-->>Apply: removals done
Apply->>Metadata: record_installation / record_removal
Metadata-->>Apply: ack
Apply->>CLI: summary
end

Note left of Installer: style fill:#f2f8ff,stroke:#a6c8ff
Note left of Metadata: style fill:#fff7f2,stroke:#ffd4a6

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

Pre-merge checks and finishing touches

❌ Failed checks (1 inconclusive)
Check name Status Explanation Resolution
Title check ❓ Inconclusive The title 'chore: release' is overly vague and does not clearly convey the substantive changes in this PR, which involve major version bumps with API-breaking changes across multiple crates and significant new functionality for declarative package management. Consider using a more descriptive title that highlights the key changes, such as 'Release: soar-core 0.9.0 with declarative package management' or 'chore: release soar-core 0.9.0 and soar-cli 0.8.2 with new apply functionality'.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Docstring Coverage ✅ Passed Docstring coverage is 89.47% which is sufficient. The required threshold is 80.00%.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch release-plz-2025-11-23T05-29-05Z

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@codecov
Copy link

codecov bot commented Nov 23, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@QaidVoid QaidVoid changed the title chore: release v0.8.2 chore: release Dec 17, 2025
@QaidVoid QaidVoid force-pushed the release-plz-2025-11-23T05-29-05Z branch 6 times, most recently from 50b78d0 to b06d799 Compare December 23, 2025 03:34
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 3274742 and b06d799.

⛔ Files ignored due to path filters (1)
  • Cargo.lock is excluded by !**/*.lock
📒 Files selected for processing (4)
  • CHANGELOG.md
  • crates/soar-cli/Cargo.toml
  • crates/soar-core/CHANGELOG.md
  • crates/soar-core/Cargo.toml
✅ Files skipped from review due to trivial changes (2)
  • crates/soar-cli/Cargo.toml
  • crates/soar-core/Cargo.toml
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: coverage
  • GitHub Check: test
🔇 Additional comments (1)
CHANGELOG.md (1)

2-10: Unclear scope: soar-cli v0.8.2 changelog vs. soar-core integration.

The root CHANGELOG.md v0.8.2 entry lists the same changes as soar-core's v0.9.0 entry (modular crates integration, readme fix). However, soar-cli is a patch release, while soar-core is a minor release with breaking changes. The changelog should clarify whether the "integration" work primarily affects soar-core (making it a transitive dependency change for soar-cli) or if soar-cli has independent changes driving the patch bump.

If the integration is purely a soar-core refactor and soar-cli is bumped only as a dependent update, consider consolidating or clarifying the entry to avoid confusion about soar-cli's direct changes.

Comment on lines +2 to +10
## [0.9.0](https://github.com/pkgforge/soar/compare/soar-core-v0.8.1...soar-core-v0.9.0) - 2025-12-23

### 🚜 Refactor

- *(integration)* Integrate soar with modular crates ([#123](https://github.com/pkgforge/soar/pull/123)) - ([2d340e5](https://github.com/pkgforge/soar/commit/2d340e54ac79fd31087370712f4e189b3391bd16))

### ⚙️ Miscellaneous Tasks

- *(docs)* Fix readme - ([90d8abb](https://github.com/pkgforge/soar/commit/90d8abb9206a304be4c3d8cd5d11ae40584242d6))
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Missing breaking change documentation in v0.9.0 changelog.

The v0.9.0 entry lacks critical migration information. According to the PR objectives, cargo-semver-checks reports extensive API-breaking changes including removed/renamed enums, functions, modules, constants, traits, struct types, and struct fields. The generic refactoring description provides insufficient context for users to understand the upgrade impact.

Add a Breaking Changes section documenting the major API incompatibilities so users can plan migrations accordingly.

This changelog entry should explicitly list or reference:

  • Removed public enums (PackageFormat, FilterCondition, ConfigError, ProvideStrategy, DbKind, etc.)
  • Removed public functions (home_path, fetch_public_key, calculate_dir_size, etc.)
  • Removed public modules (config, toml, metadata, repositories, package::formats, database::nests, etc.)
  • Removed public structs (Config, Profile, Repository, Database, PackageRepository, MigrationManager, etc.)
  • Removed public traits (FromRow, PackageExt)
  • Removed SoarError variants
  • Other significant API removals/renames
🤖 Prompt for AI Agents
crates/soar-core/CHANGELOG.md around lines 2 to 10: the v0.9.0 entry lacks a
Breaking Changes section describing the API incompatibilities; add a "### ⚠️
Breaking Changes" subsection under the v0.9.0 header that enumerates or
references the removals/renames reported by cargo-semver-checks (explicitly list
removed public enums like PackageFormat, FilterCondition, ConfigError,
ProvideStrategy, DbKind; removed public functions such as home_path,
fetch_public_key, calculate_dir_size; removed public modules like config, toml,
metadata, repositories, package::formats, database::nests; removed public
structs such as Config, Profile, Repository, Database, PackageRepository,
MigrationManager; removed public traits FromRow, PackageExt; removed SoarError
variants; and any other major removals/renames), and include links to the
PR/commit and/or the cargo-semver-checks report to help users migrate. Ensure
the language is concise, uses bullet-style items or a compact list, and points
to migration guidance or the PR for details.

@QaidVoid QaidVoid force-pushed the release-plz-2025-11-23T05-29-05Z branch from b06d799 to 012789f Compare December 23, 2025 04:14
@QaidVoid QaidVoid force-pushed the release-plz-2025-11-23T05-29-05Z branch from 012789f to c8470d0 Compare December 23, 2025 06:36
@QaidVoid QaidVoid closed this Dec 23, 2025
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 012789f and c8470d0.

⛔ Files ignored due to path filters (1)
  • Cargo.lock is excluded by !**/*.lock
📒 Files selected for processing (11)
  • CHANGELOG.md
  • crates/soar-cli/Cargo.toml
  • crates/soar-cli/src/apply.rs
  • crates/soar-cli/src/cli.rs
  • crates/soar-cli/src/main.rs
  • crates/soar-config/src/error.rs
  • crates/soar-config/src/lib.rs
  • crates/soar-config/src/packages.rs
  • crates/soar-core/CHANGELOG.md
  • crates/soar-core/Cargo.toml
  • crates/soar-db/src/repository/core.rs
💤 Files with no reviewable changes (1)
  • crates/soar-db/src/repository/core.rs
✅ Files skipped from review due to trivial changes (1)
  • crates/soar-core/CHANGELOG.md
🚧 Files skipped from review as they are similar to previous changes (3)
  • crates/soar-cli/Cargo.toml
  • CHANGELOG.md
  • crates/soar-core/Cargo.toml
🧰 Additional context used
🧬 Code graph analysis (1)
crates/soar-cli/src/main.rs (2)
crates/soar-cli/src/apply.rs (1)
  • apply_packages (46-90)
crates/soar-config/src/packages.rs (1)
  • generate_default_packages_config (255-275)
🔇 Additional comments (17)
crates/soar-config/src/lib.rs (1)

5-5: LGTM!

Clean module export following the existing pattern. The new packages module is properly exposed for use by the CLI.

crates/soar-config/src/error.rs (1)

28-40: LGTM!

The new error variants follow the established pattern with appropriate diagnostic codes and helpful user-facing messages. The help text correctly references the soar defpackages command for generating the packages configuration.

crates/soar-cli/src/cli.rs (1)

403-430: LGTM!

The new Apply and DefPackages commands are well-structured and follow the established CLI patterns:

  • Flag naming is consistent with existing commands (--yes, --no-verify)
  • ValueHint::FilePath is appropriately used for the packages config path
  • The --prune flag clearly communicates its destructive behavior through the help text
crates/soar-cli/src/main.rs (2)

13-13: LGTM!

The module import and declaration follow existing patterns in the file.

Also applies to: 33-33


382-393: LGTM!

The new command handlers are properly integrated:

  • Apply forwards all CLI parameters to the async apply_packages function
  • DefPackages invokes the synchronous config generator with proper error propagation

Both follow the established dispatch pattern.

crates/soar-cli/src/apply.rs (6)

30-43: LGTM!

Well-structured diff representation with clear documentation. The Default derive enables clean initialization.


45-90: LGTM!

The entry point function has a clean flow:

  1. Load and resolve configuration
  2. Compute diff against installed state
  3. Display diff with summary
  4. Handle dry-run and confirmation prompts
  5. Execute changes

The confirmation defaults to abort on any read failure, which is safe behavior.


239-257: LGTM!

Clean helper function that correctly maps resolved package configuration to the installation target structure.


259-377: LGTM!

Well-structured display logic with:

  • Proper handling of empty diff states
  • Consistent color coding (green=install, yellow=update, red=remove)
  • Graceful fallback for non-icon terminals
  • Clear summary table with counts

462-471: LGTM!

Clear summary output with appropriate conditional display of the failure count.


444-459: No error handling issue exists with the chained async calls.

The PackageRemover::new() method returns Self directly, not a Result. The chained .await.remove().await pattern is correct: the first .await completes the async construction and returns the PackageRemover instance, then .remove() is called on it, and the second .await properly handles the Result returned by remove(). No errors are swallowed.

Likely an incorrect or invalid review comment.

crates/soar-config/src/packages.rs (6)

19-25: LGTM!

The config path initialization follows a sensible pattern with environment variable override and XDG-compliant default location.


27-130: LGTM!

Well-designed configuration model:

  • Box<PackageOptions> in the Detailed variant optimizes enum size
  • #[serde(untagged)] enables flexible TOML syntax (simple string vs table)
  • The Documented traits enable self-documenting config generation

132-182: LGTM!

The resolution logic correctly:

  • Treats "*" as "latest version" (None)
  • Implicitly pins packages with explicit versions
  • Falls back to defaults when package-specific options aren't set
  • Defaults binary_only to false when unspecified

184-252: LGTM!

The PackagesConfig implementation provides a complete lifecycle:

  • load() with proper error handling for missing files
  • resolved_packages() for applying defaults across all packages
  • default_config() for bootstrapping
  • to_annotated_document() for generating user-friendly, documented TOML output

254-275: LGTM!

The function properly:

  • Prevents overwriting existing configuration
  • Creates parent directories as needed
  • Generates an annotated, user-friendly configuration file
  • Logs the file location for user awareness

277-375: LGTM!

Good test coverage for the core functionality:

  • Simple and detailed package specifications
  • Default value application and overrides
  • Portable configuration parsing
  • Annotated document generation

The tests validate both TOML parsing and resolution logic.

let existing_install = installed_packages.into_iter().find(|ip| ip.is_installed);

if let Some(ref existing) = existing_install {
let version_matches = pkg.version.as_ref().is_none_or(|v| existing.version == *v);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash

# Find all Cargo.toml files and check for rust-version
echo "=== Searching for rust-version in Cargo.toml files ==="
fd -t f 'Cargo.toml' | while read file; do
  if grep -q 'rust-version' "$file" 2>/dev/null; then
    echo "File: $file"
    grep 'rust-version' "$file"
  fi
done

echo ""
echo "=== Checking for rust-toolchain files ==="
ls -la rust-toolchain* 2>/dev/null || echo "No rust-toolchain files found"

echo ""
echo "=== Checking line 180 of crates/soar-cli/src/apply.rs ==="
if [ -f "crates/soar-cli/src/apply.rs" ]; then
  sed -n '175,185p' "crates/soar-cli/src/apply.rs"
else
  echo "File crates/soar-cli/src/apply.rs not found"
fi

Repository: pkgforge/soar

Length of output: 735


🏁 Script executed:

#!/bin/bash

# Check for rustfmt configuration files (from learnings)
echo "=== Checking for rustfmt configuration ==="
find . -maxdepth 2 -name '*rustfmt*' -type f 2>/dev/null || echo "No rustfmt files found"

# Also check if there's a CI file that might use nightly
echo ""
echo "=== Checking .github/workflows for CI toolchain settings ==="
if [ -f ".github/workflows/ci.yaml" ]; then
  head -50 ".github/workflows/ci.yaml" | grep -i -A 3 -B 3 'toolchain\|rust-version'
else
  echo "No CI workflow file found"
fi

Repository: pkgforge/soar

Length of output: 793


Set MSRV to Rust 1.82 or use compatible alternative.

The code at line 180 uses is_none_or, which was stabilized in 1.82. The project currently has no declared MSRV in Cargo.toml. Add rust-version = "1.82" to the [package] section, or replace the is_none_or call with .as_ref().map_or(true, |v| existing.version == *v) for compatibility with earlier Rust versions.

🤖 Prompt for AI Agents
In crates/soar-cli/src/apply.rs around line 180, the code uses
Option::is_none_or which requires Rust 1.82; either declare the MSRV by adding
rust-version = "1.82" to the [package] section of Cargo.toml, or replace the
call with a compatible alternative such as using .as_ref().map_or(true, |v|
existing.version == *v) so the code compiles on older rust versions; pick one
approach and update the file (or Cargo.toml) accordingly and run cargo build to
verify.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

release New Release (Probably Automated)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant