Commit 7364c82
Moving Shared Code to BushelKit (#5)
* docs: add gradual migration plan for moving code to BushelKit
- 7-week phased approach with BushelCloudData intermediate target
- Deprecation warnings and incremental migration strategy
- Complete implementation details for each phase
* docs: update migration plan to use BushelKit v3.0.0-alpha.2
- Change target version from v3.1.0 to v3.0.0-alpha.2
- Update all version references throughout migration plan (7 locations)
- Maintain alpha release within v3.0.0 series
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* refactoring modules
* fix: resolve compilation errors by using MistKit's CloudKitRecord protocol
This commit fixes all compilation errors by addressing the duplicate CloudKitRecord protocol definition and missing imports.
Changes:
- Remove duplicate CloudKitRecord protocol in BushelCloudKit
- Project now uses MistKit's CloudKitRecord protocol exclusively
- All extensions already conform to the complete protocol (Codable, Sendable, recordName)
- Fix SyncEngine DataSourcePipeline initialization
- Remove invalid cloudKitService parameter
- DataSourcePipeline constructor only takes configuration parameter
- Add missing BushelCloudData imports to all CLI commands
- Required for types like RestoreImageRecord, DataSourceMetadata, FetchConfiguration, ConsoleOutput
The root cause was a duplicate CloudKitRecord protocol definition that conflicted with MistKit's version. MistKit's protocol requires Codable, Sendable conformance and a recordName property, while the local duplicate did not. This caused the compiler to see types as not conforming to the protocol that MistKit's generic methods required.
Build now succeeds with only deprecation warnings (types moving to BushelKit in future release).
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* fix: add missing BushelCloudData imports to test files
All test files were missing the BushelCloudData import, causing compilation errors when trying to access types like RestoreImageRecord, XcodeVersionRecord, SwiftVersionRecord, FetchConfiguration, DataSourceMetadata, and ConsoleOutput.
Changes:
- Add @testable import BushelCloudData to all test files
- Tests now compile and pass successfully
Test results: 122 tests in 20 suites all passing
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* git subrepo clone --branch=bushelcloud git@github.com:brightdigit/BushelKit.git Packages/BushelKit
subrepo:
subdir: "Packages/BushelKit"
merged: "f811a28"
upstream:
origin: "git@github.com:brightdigit/BushelKit.git"
branch: "bushelcloud"
commit: "f811a28"
git-subrepo:
version: "0.4.9"
origin: "https://github.com/Homebrew/brew"
commit: "e8b7739de9"
* feat: migrate selected BushelCloudData code from BushelCloud
Add models, core fetchers, and utilities from BushelCloud's deprecated
BushelCloudData target (20 files) to BushelFoundation and BushelUtilities.
BushelFoundation (19 files):
- Models (4): RestoreImageRecord, XcodeVersionRecord, SwiftVersionRecord, DataSourceMetadata
- Configuration (1): FetchConfiguration
- DataSources (14):
- DataSourcePipeline with deduplication logic
- DataSourceFetcher protocol, HTTPHeaderHelpers
- AppleDBFetcher + AppleDB support (9 files)
- MESUFetcher, XcodeReleasesFetcher
BushelUtilities (2 files):
- FormattingHelpers, ConsoleOutput
Note: BushelHub is deprecated. Web scraping fetchers (IPSWFetcher,
MrMacintoshFetcher, SwiftVersionFetcher, TheAppleWikiFetcher) remain
in BushelCloud.
* refactor: remove DataSourcePipeline from BushelFoundation [skip ci]
DataSourcePipeline orchestrates all fetchers including web scraping ones
that depend on SwiftSoup/IPSWDownloads. Keep it in BushelCloud's
BushelCloudData target instead of migrating to BushelKit.
* refactor: migrate to local BushelKit subrepo [skip ci]
- Use local path dependency (Packages/BushelKit)
- Add BushelFoundation and BushelUtilities to BushelCloudKit
- Add BushelFoundation to BushelCloudData for model access
- Remove BushelCloudData from BushelCloudCLI (deprecated)
- Keep IPSWDownloads/SwiftSoup for remaining fetchers
* refactor: cleanup BushelCloudData after migration [skip ci]
Removed 20 files migrated to BushelKit:
- Models (4): RestoreImageRecord, XcodeVersionRecord, SwiftVersionRecord, DataSourceMetadata
- Configuration (1): FetchConfiguration
- DataSources (13): DataSourceFetcher, HTTPHeaderHelpers, MESUFetcher, XcodeReleasesFetcher, AppleDB/*
- Utilities (2): FormattingHelpers, ConsoleOutput
Kept 8 web scraping fetchers:
- IPSWFetcher, MrMacintoshFetcher, SwiftVersionFetcher, TheAppleWikiFetcher
- TheAppleWiki support files
Updated all remaining files to import BushelFoundation for model types.
* refactor: update BushelCloudKit for BushelFoundation migration [skip ci]
- Replace BushelCloudData imports with BushelFoundation
- Add BushelUtilities import for FormattingHelpers/ConsoleOutput
- Delete custom CloudKitRecord protocol (use MistKit's instead)
- Add recordName property to CloudKitRecord extensions
- Change BushelCloudData import to public in SyncEngine
- Qualify ConsoleOutput calls to avoid ambiguity
Note: Build errors remain due to incomplete migration, will be fixed in follow-up.
* refactor: update BushelCloudCLI for migration [skip ci]
- Qualify ConsoleOutput calls with full module path
- Remove direct BushelCloudData dependency (now via BushelCloudKit)
Note: Build errors remain, will be fixed in follow-up.
* fixing some compilation errors [skip ci]
* fixing dependencies
* fixing builds and tests
* git subrepo push Packages/BushelKit
subrepo:
subdir: "Packages/BushelKit"
merged: "eef7536"
upstream:
origin: "git@github.com:brightdigit/BushelKit.git"
branch: "bushelcloud"
commit: "eef7536"
git-subrepo:
version: "0.4.9"
origin: "https://github.com/Homebrew/brew"
commit: "1383417817"
* Update BushelCloud.yml
* Update BushelCloud.yml
* moving fetchers back to BushelCLoudKit
* git subrepo push Packages/BushelKit
subrepo:
subdir: "Packages/BushelKit"
merged: "d0695b2"
upstream:
origin: "git@github.com:brightdigit/BushelKit.git"
branch: "bushelcloud"
commit: "d0695b2"
git-subrepo:
version: "0.4.9"
origin: "https://github.com/Homebrew/brew"
commit: "1383417817"
* Fixing Ubunutu tests
* Fix BushelKit subrepo parent commit reference
* git subrepo pull (merge) Packages/BushelKit
subrepo:
subdir: "Packages/BushelKit"
merged: "15cb101"
upstream:
origin: "git@github.com:brightdigit/BushelKit.git"
branch: "bushelcloud"
commit: "3487928"
git-subrepo:
version: "0.4.9"
origin: "https://github.com/Homebrew/brew"
commit: "e8b7739de9"
* git subrepo push --force Packages/BushelKit
subrepo:
subdir: "Packages/BushelKit"
merged: "3255ba9"
upstream:
origin: "git@github.com:brightdigit/BushelKit.git"
branch: "bushelcloud"
commit: "3255ba9"
git-subrepo:
version: "0.4.9"
origin: "https://github.com/Homebrew/brew"
commit: "e8b7739de9"
* Change downloadURL from String to URL type in all record models
Update RestoreImageRecord, XcodeVersionRecord, and SwiftVersionRecord
to use URL instead of String for downloadURL fields. This improves
type safety and prevents invalid URLs at compile time.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* Add FieldValue+URL extension and update all fetchers for URL type
- Create FieldValue+URL extension following MistKit's boolean pattern
- Update all CloudKit extensions to use FieldValue(url:) and .urlValue
- Update all fetchers to construct URL objects with validation
- Update all test fixtures to use URL type
- Add comprehensive FieldValue+URL tests (15 tests)
All 137 tests passing. Type safety improved - invalid URLs caught at
compile time instead of runtime.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* git subrepo push Packages/BushelKit
subrepo:
subdir: "Packages/BushelKit"
merged: "674acc0"
upstream:
origin: "git@github.com:brightdigit/BushelKit.git"
branch: "bushelcloud"
commit: "674acc0"
git-subrepo:
version: "0.4.9"
origin: "https://github.com/Homebrew/brew"
commit: "e8b7739de9"
* Address PR review comments: remove duplicate, add documentation
- Remove duplicate FormattingHelpers from BushelCloudKit
- Add comprehensive BushelKit architecture documentation to CLAUDE.md
- Add git subrepo workflow and type design decisions to CLAUDE.md
- Add BushelKit integration section to README.md
- Enhance code documentation for fileSize fields
Addresses review comments from:
- User review on brightdigit/BushelKit#122
- Claude bot review on #5
All tests passing (137 tests in 21 suites)
* git subrepo push Packages/BushelKit
subrepo:
subdir: "Packages/BushelKit"
merged: "eb5bb24"
upstream:
origin: "git@github.com:brightdigit/BushelKit.git"
branch: "bushelcloud"
commit: "eb5bb24"
git-subrepo:
version: "0.4.9"
origin: "https://github.com/Homebrew/brew"
commit: "1383417817"
* Replace FormattingHelpers with FormatStyle-based Formatters
- Add modern FormatStyle properties to Formatters enum (dateFormat, dateTimeFormat, fileSizeFormat)
- Replace FormattingHelpers static methods with Swift's modern .formatted() API
- Update and rename FormattingHelpersTests to FormattersTests
- Remove deprecated FormattingHelpers utility class
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* git subrepo push Packages/BushelKit
subrepo:
subdir: "Packages/BushelKit"
merged: "6968872"
upstream:
origin: "git@github.com:brightdigit/BushelKit.git"
branch: "bushelcloud"
commit: "6968872"
git-subrepo:
version: "0.4.9"
origin: "https://github.com/Homebrew/brew"
commit: "e8b7739de9"
* Fix BushelKit unit test build issues
- Remove duplicate FormattersTests.swift from BushelUtlitiesTests
- Merge formatter tests into BushelFoundationTests where they belong
- Update test expectations for ByteCountFormatStyle output format
- Fix URL type usage in RestoreImageRecordTests (use URL instead of String)
- Fix URL type usage in XcodeVersionRecordTests (use URL instead of String)
- Fix URL type usage in SwiftVersionRecordTests (use URL instead of String)
All 129 BushelKit tests now pass successfully.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* Replace FormattingHelpers with FormatStyle-based Formatters
- Update DataSourceMetadata+CloudKit to use Formatters.dateTimeFormat
- Update XcodeVersionRecord+CloudKit to use Formatters.dateFormat and fileSizeFormat
- Update RestoreImageRecord+CloudKit (no FormattingHelpers usage)
- Update SwiftVersionRecord+CloudKit (no FormattingHelpers usage)
Fixes compilation errors after FormattingHelpers was removed in commit 991a95a.
All 137 BushelCloud tests pass successfully.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* git subrepo push Packages/BushelKit
subrepo:
subdir: "Packages/BushelKit"
merged: "b28ba54"
upstream:
origin: "git@github.com:brightdigit/BushelKit.git"
branch: "bushelcloud"
commit: "b28ba54"
git-subrepo:
version: "0.4.9"
origin: "https://github.com/Homebrew/brew"
commit: "e8b7739de9"
* git subrepo pull Packages/BushelKit
subrepo:
subdir: "Packages/BushelKit"
merged: "9224ceb"
upstream:
origin: "git@github.com:brightdigit/BushelKit.git"
branch: "bushelcloud"
commit: "9224ceb"
git-subrepo:
version: "0.4.9"
origin: "https://github.com/Homebrew/brew"
commit: "1383417817"
* fixing BushelKit updates
* Fix BushelKit subrepo parent reference
* fixing Linux builds
* Removing SubRepo
---------
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>1 parent c16b972 commit 7364c82
File tree
45 files changed
+1581
-853
lines changed- .claude
- .github/workflows
- Sources
- BushelCloudCLI/Commands
- BushelCloudKit
- CloudKit
- Configuration
- DataSources
- AppleDB
- TheAppleWiki
- Extensions
- Utilities
- Tests/BushelCloudTests
- CloudKit
- Configuration
- DataSources
- Extensions
- Mocks
- Models
- Utilities
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
45 files changed
+1581
-853
lines changedLarge diffs are not rendered by default.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
37 | 37 | | |
38 | 38 | | |
39 | 39 | | |
40 | | - | |
41 | | - | |
42 | | - | |
43 | | - | |
44 | | - | |
45 | | - | |
46 | | - | |
47 | | - | |
48 | | - | |
49 | | - | |
50 | | - | |
51 | | - | |
52 | | - | |
53 | | - | |
54 | | - | |
55 | | - | |
56 | | - | |
57 | | - | |
58 | | - | |
59 | | - | |
60 | | - | |
61 | | - | |
62 | | - | |
63 | | - | |
64 | | - | |
65 | | - | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
66 | 66 | | |
67 | 67 | | |
68 | 68 | | |
| |||
143 | 143 | | |
144 | 144 | | |
145 | 145 | | |
146 | | - | |
| 146 | + | |
147 | 147 | | |
148 | 148 | | |
149 | 149 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
116 | 116 | | |
117 | 117 | | |
118 | 118 | | |
119 | | - | |
| 119 | + | |
120 | 120 | | |
121 | 121 | | |
122 | 122 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
54 | 54 | | |
55 | 55 | | |
56 | 56 | | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
57 | 83 | | |
58 | 84 | | |
59 | 85 | | |
| |||
81 | 107 | | |
82 | 108 | | |
83 | 109 | | |
84 | | - | |
85 | | - | |
86 | | - | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
87 | 113 | | |
88 | | - | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
89 | 122 | | |
90 | 123 | | |
91 | 124 | | |
| |||
122 | 155 | | |
123 | 156 | | |
124 | 157 | | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
125 | 211 | | |
126 | 212 | | |
127 | 213 | | |
| |||
135 | 221 | | |
136 | 222 | | |
137 | 223 | | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
| 252 | + | |
| 253 | + | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
| 275 | + | |
| 276 | + | |
| 277 | + | |
| 278 | + | |
138 | 279 | | |
139 | 280 | | |
140 | 281 | | |
| |||
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
91 | 91 | | |
92 | 92 | | |
93 | 93 | | |
94 | | - | |
| 94 | + | |
| 95 | + | |
95 | 96 | | |
96 | | - | |
97 | 97 | | |
98 | 98 | | |
99 | 99 | | |
| |||
102 | 102 | | |
103 | 103 | | |
104 | 104 | | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
105 | 108 | | |
106 | | - | |
107 | | - | |
| 109 | + | |
108 | 110 | | |
109 | 111 | | |
110 | 112 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
97 | 97 | | |
98 | 98 | | |
99 | 99 | | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
100 | 119 | | |
101 | 120 | | |
102 | 121 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
29 | 29 | | |
30 | 30 | | |
31 | 31 | | |
| 32 | + | |
| 33 | + | |
32 | 34 | | |
33 | 35 | | |
34 | 36 | | |
| |||
69 | 71 | | |
70 | 72 | | |
71 | 73 | | |
72 | | - | |
| 74 | + | |
73 | 75 | | |
74 | 76 | | |
75 | 77 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
29 | 29 | | |
30 | 30 | | |
31 | 31 | | |
| 32 | + | |
32 | 33 | | |
33 | 34 | | |
34 | 35 | | |
| |||
0 commit comments