Skip to content

Enable order preservation#50

Merged
martinemde merged 3 commits intorubyatscale:mainfrom
corsonknowles:main
Feb 5, 2026
Merged

Enable order preservation#50
martinemde merged 3 commits intorubyatscale:mainfrom
corsonknowles:main

Conversation

@corsonknowles
Copy link
Contributor

@corsonknowles corsonknowles commented Feb 4, 2026

Summary of Changes

  1. lib/parse_packwerk/package.rb
    Added original_key_order field to the Package struct to store the key order from the original YAML file
    Updated Package.from to capture and store the original key order when reading a package.yml file

  2. lib/parse_packwerk.rb
    Added preserve_key_order configuration option (defaults to false for backwards compatibility)
    Added sort_keys helper method that:
    When preserve_key_order is true and original order exists: preserves existing keys in their original order, appends new keys in canonical order
    When preserve_key_order is false (default): sorts keys according to key_sort_order (existing behavior)

  3. spec/parse_packwerk_spec.rb
    Added tests covering:

  • Default behavior (sorting) still works for backwards compatibility
  • Key order preservation when option is enabled
  • New keys are appended in canonical order at the end
  • Removed keys are handled gracefully
  • Falls back to canonical order for new packages without original_key_order
  • Original key order is stored correctly when reading packages

Usage

To enable key order preservation:
ParsePackwerk.preserve_key_order = true
This will cause write_package_yml! to preserve the original key order from the file, reducing diff churn when tools like packs move packages around. New keys added during write will be appended in the canonical sort order.

@martinemde martinemde merged commit 4c1b308 into rubyatscale:main Feb 5, 2026
6 checks passed
@github-project-automation github-project-automation bot moved this from Triage to Done in Modularity Feb 5, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

2 participants