diff --git a/.changelog/adopt-fast-forward-changelog.md b/.changelog/adopt-fast-forward-changelog.md new file mode 100644 index 0000000..dbd7975 --- /dev/null +++ b/.changelog/adopt-fast-forward-changelog.md @@ -0,0 +1,6 @@ +--- +category: changed +type: patch +--- + +Automate changelog checks, version pull requests and approved releases with Fast Forward Changelog, with the project skill available to contributors. diff --git a/.changelog/composer-dependency-skills.md b/.changelog/composer-dependency-skills.md new file mode 100644 index 0000000..5e53781 --- /dev/null +++ b/.changelog/composer-dependency-skills.md @@ -0,0 +1,6 @@ +--- +category: changed +type: patch +--- + +Synchronize the Config and Container consumer skills from the installed Composer dependencies through an explicit trusted-package list instead of independent GitHub sources. diff --git a/.changelog/container-1-10.md b/.changelog/container-1-10.md new file mode 100644 index 0000000..d51616f --- /dev/null +++ b/.changelog/container-1-10.md @@ -0,0 +1,6 @@ +--- +category: changed +type: patch +--- + +Require fast-forward/container ^1.10 so installed Composer dependencies supply the supported Container consumer skill alongside the runtime library. diff --git a/.changelog/container-consumer-skill.md b/.changelog/container-consumer-skill.md new file mode 100644 index 0000000..04fe24d --- /dev/null +++ b/.changelog/container-consumer-skill.md @@ -0,0 +1,6 @@ +--- +category: added +type: patch +--- + +Restores the Fast Forward Container consumer skill through the existing development-only Composer skill manager, alongside the configured contributor skills, without changing runtime dependencies. diff --git a/.changelog/manage-changelog-skill-through-composer.md b/.changelog/manage-changelog-skill-through-composer.md new file mode 100644 index 0000000..92c78b9 --- /dev/null +++ b/.changelog/manage-changelog-skill-through-composer.md @@ -0,0 +1,6 @@ +--- +category: changed +type: patch +--- + +Restore the Changelog skill from its GitHub source during Composer installation instead of committing a generated copy and separate installation receipt. diff --git a/.gitattributes b/.gitattributes index 78b68b2..84ffdce 100755 --- a/.gitattributes +++ b/.gitattributes @@ -1,4 +1,7 @@ * text=auto +/.agents/ export-ignore +/.changelog/ export-ignore +/CONTRIBUTING.md export-ignore /.github/ export-ignore /tests/ export-ignore /.docheader export-ignore @@ -13,3 +16,4 @@ /phpunit.xml export-ignore /docs/ export-ignore /README*.md export-ignore +/skills.json export-ignore diff --git a/.github/workflows/changelog.yml b/.github/workflows/changelog.yml new file mode 100644 index 0000000..192ddd5 --- /dev/null +++ b/.github/workflows/changelog.yml @@ -0,0 +1,43 @@ +name: Changelog + +on: + pull_request: + branches: + - main + types: + - opened + - synchronize + - reopened + - ready_for_review + - labeled + - unlabeled + pull_request_target: + branches: + - main + types: + - opened + - synchronize + - reopened + - ready_for_review + - labeled + - unlabeled + - closed + push: + branches: + - main + workflow_dispatch: null + +permissions: {} + +jobs: + changelog: + permissions: + contents: write + pull-requests: write + issues: read + statuses: write + uses: php-fast-forward/changelog/.github/workflows/changelog.yml@v0 + with: + source: github + version-pr-title: 'chore(release): fast-forward/http-client v{current_version} → v{next_version}' + base-branch: main diff --git a/.gitignore b/.gitignore index e2856dd..774e249 100755 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ tmp/ vendor/ composer.lock *.cache +/.agents/ diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..129f444 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,22 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [1.1.0] - 2026-03-29 + +**Full Changelog**: https://github.com/php-fast-forward/http-client/compare/v1.0.1...v1.1.0 + +## [1.0.1] - 2025-08-01 + +Release notes are unavailable for this version. + +## [1.0.0] - 2025-06-12 + +Release notes are unavailable for this version. + +[1.1.0]: https://github.com/php-fast-forward/http-client/compare/v1.0.1...v1.1.0 +[1.0.1]: https://github.com/php-fast-forward/http-client/compare/v1.0.0...v1.0.1 +[1.0.0]: https://github.com/php-fast-forward/http-client/releases/tag/v1.0.0 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..8dd0b10 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,51 @@ +# Contributing + +Add one independent `.changelog/*.md` fragment for each observable change. +Use [Fast Forward Changelog](https://github.com/php-fast-forward/changelog) +through CPX with PHP 8.5 or newer; the package's PHP requirements stay unchanged. + +```sh +cpx --skip-local fast-forward/changelog help add +cpx --skip-local fast-forward/changelog add "Describe the change." --category=fixed --no-interaction +cpx --skip-local fast-forward/changelog check --no-interaction +``` + +Choose the category and semantic impact that describe the change. Commit the +fragment with the contribution; leave published history intact and do not add +an `Unreleased` section to `CHANGELOG.md`. After committing, validate the PR delta +with `check --since=origin/main --source=github --no-interaction` using the same CLI. + +Run `composer install` to fetch the project skill into +`.agents/skills/fast-forward-changelog`. The committed `skills.json` selects its +GitHub source through `llm/skills`; generated `.agents` files stay out of Git. +This does not install Changelog's runtime dependencies into the library. +Inspect the copy with `composer skills:show` and refresh compatible versions with +`composer skills:update --from=github`. Keep the skill under this manager's +ownership; do not run the legacy Changelog skill installer on it. + +The GitHub workflow checks fragments, maintains PR feedback and prepares a +version PR from stable ancestral tags, existing GitHub Release notes and committed +history. Historical GitHub Release bodies are preserved in `CHANGELOG.md`; empty +release bodies are identified explicitly without invented change descriptions. +New entries can link to their originating PR automatically when GitHub evidence +is available. +Version PR titles use `chore(release): fast-forward/http-client v → v`. +Review that PR's version, history and fragment deletions before merging it. +It never merges itself; +its approved merge publishes the version tag and GitHub Release. Installing the +workflow or merging an ordinary contribution does not publish a release. + +## Composer dependency skills + +The development-only manager restores `fast-forward-container` and +`fast-forward-config` from the installed Composer packages, including Config as +a transitive dependency. `skills.json` explicitly trusts only those two Composer +donors; dependency trust does not extend to other installed packages. No separate +GitHub source or version pin is used for either library. + +Inspect donors with `composer skills:show` and refresh their payloads with +`composer skills:update --from=composer`. The existing GitHub source continues +to manage the Changelog contributor skill independently. Generated copies remain +ignored. Synchronization does not upgrade runtime dependencies; an installed +version without a bundled skill contributes no skill. Check installed versions +and the bundled skill's supported contract before using its instructions. diff --git a/composer.json b/composer.json index 7558b4f..4610599 100644 --- a/composer.json +++ b/composer.json @@ -16,13 +16,14 @@ }, "require": { "php": "^8.3", - "fast-forward/container": "^1.4", + "fast-forward/container": "^1.10", "psr/http-client": "^1.0", "psr/http-factory": "^1.1", "symfony/http-client": "^7.3" }, "require-dev": { - "fast-forward/dev-tools": "dev-main" + "fast-forward/dev-tools": "dev-main", + "llm/skills": "^1.15" }, "minimum-stability": "stable", "autoload": { @@ -41,7 +42,8 @@ "fast-forward/dev-tools": true, "phpdocumentor/shim": true, "phpro/grumphp": true, - "pyrech/composer-changelogs": true + "pyrech/composer-changelogs": true, + "llm/skills": true }, "platform": { "php": "8.3.0" diff --git a/skills.json b/skills.json new file mode 100644 index 0000000..87f8ea0 --- /dev/null +++ b/skills.json @@ -0,0 +1,27 @@ +{ + "$schema": "https://raw.githubusercontent.com/roxblnfk/skills/master/resources/skills.schema.json", + "target": ".agents/skills", + "aliases": [], + "discovery": false, + "auto-sync": true, + "vendor-sources": false, + "dependencies": { + "composer": { + "trusted": [ + "fast-forward/config", + "fast-forward/container" + ], + "trusted-replace": true + } + }, + "sources": [ + { + "from": "github", + "package": "php-fast-forward/changelog", + "ref": "^0.3.0", + "skills": [ + "fast-forward-changelog" + ] + } + ] +}