Add dynamic feed sources for automatic pipeline synchronization #28
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR adds the ability to automatically import all pipelines from a CCTray XML feed URL and keep them synchronized as the feed changes.
Motivation
When monitoring a CI server with many pipelines, manually adding each one is tedious. Additionally, some CI servers have dynamic pipelines that are created and destroyed automatically (e.g., feature branch builds, ephemeral pipelines, or pipelines generated on-demand). Manually tracking these is impractical.
This feature allows users to point CCMenu at a CCTray feed URL and have all pipelines imported automatically. As projects are added or removed from the feed, CCMenu keeps the pipeline list in sync - adding new pipelines as they appear and optionally removing them when they're gone.
Features
Tests
DynamicFeedSourceTests- Source model serialization and propertiesDynamicFeedSourceModelTests- Model persistence and CRUD operationsDynamicFeedSyncServiceTests- Sync logic including add/remove detectionAll existing tests continue to pass.
Disclaimer: I'm not a Swift developer by trade. I used AI assistance to help implement this feature following TDD principles. I've tested it manually and all unit tests pass, but I welcome any feedback on Swift conventions or improvements to the implementation.