Objective
Synchronize funding metadata between .github/FUNDING.yml and the Composer funding property during dev-tools:sync.
Current Limitation
Fast Forward repositories can declare sponsorship information in GitHub's .github/FUNDING.yml file or in composer.json under funding, but dev-tools:sync does not currently reconcile these sources. When only one file is updated, the other can become stale or incomplete.
Proposed Work
Add sync support that reads funding entries from both .github/FUNDING.yml and composer.json, merges the supported entries, and writes the missing values back to both files while preserving the expected format for each file.
Scope
- Support at least GitHub Sponsors entries from
github in .github/FUNDING.yml.
- Support custom funding links from
custom in .github/FUNDING.yml.
- Support Composer
funding entries that correspond to GitHub Sponsors and custom funding URLs.
- If only
.github/FUNDING.yml exists, populate missing composer.json funding entries from it.
- If only
composer.json has funding, create or update .github/FUNDING.yml from it.
- If both exist, merge all supported entries so both files contain the same logical records.
- Preserve existing unsupported funding providers without deleting them.
- Avoid duplicate entries when sync runs repeatedly.
Non-goals
- Supporting every GitHub Funding provider in the first implementation.
- Removing existing funding entries.
- Changing package metadata unrelated to funding.
- Reformatting
composer.json beyond the funding property update required for sync.
Acceptance Criteria
Delivery Criteria
Architectural / Isolation Criteria
Objective
Synchronize funding metadata between
.github/FUNDING.ymland the Composerfundingproperty duringdev-tools:sync.Current Limitation
Fast Forward repositories can declare sponsorship information in GitHub's
.github/FUNDING.ymlfile or incomposer.jsonunderfunding, butdev-tools:syncdoes not currently reconcile these sources. When only one file is updated, the other can become stale or incomplete.Proposed Work
Add sync support that reads funding entries from both
.github/FUNDING.ymlandcomposer.json, merges the supported entries, and writes the missing values back to both files while preserving the expected format for each file.Scope
githubin.github/FUNDING.yml.customin.github/FUNDING.yml.fundingentries that correspond to GitHub Sponsors and custom funding URLs..github/FUNDING.ymlexists, populate missingcomposer.jsonfundingentries from it.composer.jsonhasfunding, create or update.github/FUNDING.ymlfrom it.Non-goals
composer.jsonbeyond the funding property update required for sync.Acceptance Criteria
Delivery Criteria
dev-tools:syncsynchronizes GitHub Sponsors entries between.github/FUNDING.ymlgithuband Composerfundingrecords.dev-tools:syncsynchronizes custom funding URLs between.github/FUNDING.ymlcustomand Composerfundingrecords.Architectural / Isolation Criteria
SyncCommandremains orchestration-focused and delegates funding synchronization to dedicated services or commands.