Migrating Consumer Repositories
Use this guide when an existing PHP package repository is adopting
fast-forward/dev-tools
for the first time. The goal is to introduce the
shared Composer scripts, workflow stubs, wiki setup, skills, and repository
defaults in a reviewable pull request.
This page complements Syncing Consumer Projects; it focuses on the migration path instead of the full command reference.
Preflight Checks
Before installing DevTools, confirm the repository has:
- a committed
composer.jsonwith the package name, PHP constraint, license, and autoload settings already reviewed; - a clean working tree;
- a configured
originremote that points to the GitHub repository; - agreement on whether the repository should publish GitHub Pages reports and a GitHub Wiki;
- a maintainer who can review workflow, Dependabot, and branch protection changes.
If the repository already has custom workflows or generated documentation, list the files that must be preserved before running sync. The sync command protects many existing files by default, but maintainers should still review the outcome as infrastructure code.
Install DevTools
Install the package as a development dependency:
composer require --dev fast-forward/dev-tools
Commit the Composer changes separately only if the repository prefers very small review steps. For most migrations, it is reasonable to keep the Composer update and generated sync changes in the same pull request so reviewers can understand the complete automation model.
Run Sync Safely
Run the sync command from the repository root:
composer dev-tools:sync
Then inspect the result before staging anything:
git status --short
git diff
Expected changes can include:
| Area | Expected change | Review focus |
|---|---|---|
composer.json
|
Adds shared dev-tools
scripts and GrumPHP defaults. |
Keep existing package metadata, scripts, and project-specific settings. |
.github/workflows/*.yml
|
Adds thin workflow stubs that call reusable Fast Forward workflows. | Compare with any existing CI, release, docs, or Pages workflows. |
.editorconfig
|
Adds the shared editor defaults when missing. | Confirm indentation and line-ending expectations match the project. |
.github/dependabot.yml
|
Adds the shared Dependabot template when missing. | Confirm update cadence and ecosystem coverage. |
.github/wiki
|
Adds the wiki submodule when missing. | Confirm the wiki repository exists and branch protection is compatible. |
.agents/skills
|
Links packaged skills for issue, PR, tests, docs, README, and style work. | Preserve existing custom skills and non-symlink directories. |
.agents/agents
|
Links packaged project agents for issue, PR, docs, README, and AGENTS maintenance work. | Preserve existing custom agents and non-symlink directories. |
LICENSE
|
Adds the packaged license file when missing. | Confirm it matches the package metadata. |
.gitignore
and .gitattributes
|
Adds repository defaults when missing. | Keep existing project-specific ignores and export rules. |
Handling Existing Custom Files
When a target file already exists, treat the migration as a comparison exercise:
- keep the existing file in place;
- compare it with the corresponding packaged file or workflow stub;
- copy only the entries that make sense for the repository;
- leave a pull request note explaining any intentional divergence.
This is especially important for custom CI workflows, release automation,
repository-specific .gitignore
rules, and existing Dependabot policies.
Shared defaults are meant to reduce repeated maintenance, not erase local
constraints.
Branch Protection and Bot Commits
Consumer repositories commonly protect main
. That is compatible with the
Fast Forward model:
- pull requests receive generated previews and bot updates on the PR branch;
- report previews are published under PR-specific Pages paths;
- wiki previews use branches such as
pr-123before merge; - post-merge jobs publish final reports and wiki content from
main.
If branch protection blocks bot commits to pull request branches, either adjust the repository policy to allow workflow updates on PR branches or document that maintainers must refresh generated pointers manually before merge.
Suggested Pull Request Rollout
Use one migration pull request per consumer repository:
- install
fast-forward/dev-tools; - run
composer dev-tools:sync; - review and adapt generated files;
- run the smallest relevant local verification command;
- open the pull request and let GitHub Actions create previews;
- verify report and wiki preview links before merge;
- merge through the protected
mainbranch.
After merge, confirm that the final reports and wiki pages reflect the merged revision. If they do not, inspect the workflow logs before making follow-up changes.