You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Release v2.0.30: PHP 8.1+, opt-in wrapper updates, and release docs
Document breaking PHP requirement and wrapper overwrite policy, align tests
with opt-in auto_update_wrapper behavior, and finalize changelog/upgrading
for the v2.0.30 tag.
Co-authored-by: Cursor <cursoragent@cursor.com>
Copy file name to clipboardExpand all lines: README.md
+13-1Lines changed: 13 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -50,7 +50,19 @@ After installation, two files will be copied to your project root:
50
50
51
51
**Note:** These files should be committed to your repository so they're available to all team members. The plugin will remove any old `.ignore.txt` entries from `.gitignore` if they exist.
52
52
53
-
**Auto-update:** The `generate-composer-require.sh` script is automatically updated when you run `composer update` if the content differs from the version in vendor. This ensures you always have the latest version of the script.
53
+
**Wrapper updates:** On first install, `generate-composer-require.sh` is copied to your project root. On later `composer update` runs, the plugin **does not overwrite** a local wrapper that differs from the package copy unless you opt in:
54
+
55
+
```json
56
+
{
57
+
"extra": {
58
+
"composer-update-helper": {
59
+
"auto_update_wrapper": true
60
+
}
61
+
}
62
+
}
63
+
```
64
+
65
+
When opt-in is disabled (default), Composer shows a comment with MD5 hashes if the wrapper differs. See [Configuration](docs/CONFIGURATION.md#composer-plugin-options).
Copy file name to clipboardExpand all lines: docs/CHANGELOG.md
+28-1Lines changed: 28 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -7,10 +7,37 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
8
8
## [Unreleased]
9
9
10
+
## [2.0.30] - 2026-07-09
11
+
12
+
### Breaking Changes
13
+
14
+
-**PHP requirement**: Minimum PHP version is now `>=8.1 <8.6` (previously `>=7.4`). Projects on PHP 7.4 or 8.0 must upgrade PHP before updating this package.
15
+
16
+
### Added
17
+
18
+
-**Opt-in wrapper auto-update**: New `extra.composer-update-helper.auto_update_wrapper` flag in the consuming project's `composer.json` to overwrite a customized `generate-composer-require.sh` when the package copy differs (disabled by default to protect local changes).
19
+
-**Static analysis and refactoring toolchain**: PHPStan and Rector added to `require-dev`, with `composer phpstan`, `composer rector`, and `composer rector-dry` scripts.
-**Documentation**: [INSTALLATION.md](INSTALLATION.md), [SECURITY.md](SECURITY.md), [SPEC-DRIVEN-DEVELOPMENT.md](SPEC-DRIVEN-DEVELOPMENT.md), and [SPEC-KIT.md](SPEC-KIT.md).
22
+
-**CI/CD integrations**: CodeRabbit workflow, PR lint, stale issue management, Scrutinizer configuration, and expanded GitHub Actions CI matrix.
23
+
-**Spec Kit / Specify**: Project scaffolding for spec-driven development (`.specify/`, baseline spec `specs/001-baseline/`).
24
+
-**Composer archive exclusions**: `demo/` and `.cursor/` excluded from distribution archives.
25
+
26
+
### Changed
27
+
28
+
-**Plugin wrapper install behavior**: The plugin installs the wrapper on first run; subsequent updates only overwrite when `auto_update_wrapper` is `true` or content already matches. When skipped, a comment explains how to enable overwrite.
29
+
-**Test layout**: PHPUnit tests reorganized into `tests/Unit/` and `tests/Integration/`.
-**Plugin and Installer**: Code quality pass (PHPStan/Rector/PHP-CS-Fixer), modern string checks (`str_starts_with`), and clearer PHPDoc.
32
+
-**composer.json**: Corrected GitHub homepage/support URLs; Symfony FrameworkBundle added as dev dependency for static analysis.
33
+
10
34
### Documentation
11
35
12
36
-**README** — Architecture: updated approximate line counts for `generate-composer-require.sh` and `process-updates.php` (and noted they can change between releases). Language list in the YAML example points to **CONFIGURATION.md** for the full locale set instead of a partial inline list.
13
-
-**Plugin.php** — `installFiles()` docblock now matches behavior (script is updated when vendor copy differs), not “first install only”.
Copy file name to clipboardExpand all lines: docs/CONFIGURATION.md
+25Lines changed: 25 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,6 +2,31 @@
2
2
3
3
This guide covers all configuration options for Composer Update Helper.
4
4
5
+
## Composer plugin options
6
+
7
+
These settings live in the **consuming project's**`composer.json` under `extra.composer-update-helper` (not in `generate-composer-require.yaml`).
8
+
9
+
### `auto_update_wrapper`
10
+
11
+
Controls whether `composer install` / `composer update` may overwrite an existing `generate-composer-require.sh` when it differs from the package copy.
12
+
13
+
| Value | Behavior |
14
+
|-------|----------|
15
+
|`false` (default) | Keep the local wrapper; show a comment with MD5 hashes when versions differ |
16
+
|`true`| Overwrite the local wrapper with the package version |
17
+
18
+
```json
19
+
{
20
+
"extra": {
21
+
"composer-update-helper": {
22
+
"auto_update_wrapper": true
23
+
}
24
+
}
25
+
}
26
+
```
27
+
28
+
Use `true` when you want the wrapper to track package updates automatically. Leave the default when you maintain local customizations to the shell script.
29
+
5
30
## Package Configuration
6
31
7
32
The script searches for configuration files in the current directory (where `composer.json` is located). It supports both `.yaml` and `.yml` extensions, with `.yaml` taking priority.
Copy file name to clipboardExpand all lines: docs/UPGRADING.md
+38Lines changed: 38 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -18,6 +18,44 @@ This guide will help you upgrade Composer Update Helper to newer versions.
18
18
19
19
## Version-Specific Upgrade Notes
20
20
21
+
### Upgrading to 2.0.30+ (2026-07-09)
22
+
23
+
#### Breaking Changes
24
+
25
+
-**PHP `>=8.1 <8.6` required**: Upgrade your runtime before updating the package. PHP 7.4 and 8.0 are no longer supported.
26
+
27
+
#### What's Changed
28
+
29
+
-**Wrapper auto-update is opt-in**: The plugin no longer silently overwrites a customized `generate-composer-require.sh` on `composer update`. By default, if your local wrapper differs from the package copy, Composer prints a comment with MD5 hashes and keeps your file.
30
+
31
+
To allow automatic overwrite again, add to your project's `composer.json`:
32
+
33
+
```json
34
+
{
35
+
"extra": {
36
+
"composer-update-helper": {
37
+
"auto_update_wrapper": true
38
+
}
39
+
}
40
+
}
41
+
```
42
+
43
+
-**Development tooling**: Maintainers and contributors can run `make release-check` (PHP-CS-Fixer, Rector dry-run, PHPStan, PHPUnit with coverage).
44
+
45
+
#### Migration Steps
46
+
47
+
1. Confirm PHP `>=8.1` on your machine and CI.
48
+
2. Update the package: `composer update nowo-tech/composer-update-helper`.
49
+
3. If you customized `generate-composer-require.sh`, decide whether to keep your version or enable `auto_update_wrapper`.
50
+
4. Review new docs: [INSTALLATION.md](INSTALLATION.md), [SECURITY.md](SECURITY.md).
51
+
52
+
#### Breaking Changes Summary
53
+
54
+
| Change | Action |
55
+
|--------|--------|
56
+
| PHP >=8.1 required | Upgrade PHP before updating the package |
57
+
| Wrapper overwrite opt-in | Set `auto_update_wrapper: true` if you want silent updates |
0 commit comments