|
| 1 | +# Changelog |
| 2 | + |
| 3 | +All notable changes to this project will be documented in this file. |
| 4 | + |
| 5 | +## [Unreleased] (v4) |
| 6 | + |
| 7 | +### Added |
| 8 | + |
| 9 | +- **PR deduplication for `update_from_source` mode.** When `auto_merge` is `false`, the action now checks for an existing open PR on the branch before creating a new one. Subsequent runs push new commits to the existing PR instead of creating duplicates. |
| 10 | +- **Push fallback with rebase retry.** If a regular push is rejected (e.g., branch has diverged), the action attempts `git pull --rebase` and retries. If rebase fails due to merge conflicts, a detailed comment is left on the PR with the full git error output and resolution steps, and the action fails. |
| 11 | +- **Default branch name.** The `branch` input now defaults to `fern/sync-openapi`. Customers can still override it. |
| 12 | +- **Release workflow.** Publishing a GitHub Release (e.g., `v4.1.0`) automatically force-updates the major (`v4`) and minor (`v4.1`) version tags so consumers on `@v4` or `@v4.1` stay up to date. |
| 13 | +- **CI workflow.** Runs lint (Biome), tests (Vitest), build, and `dist/` verification on every PR and push to main. |
| 14 | +- **E2E test script** (`e2e/run-e2e.ts`) that validates happy path (PR reuse) and conflict path (error comment) against a real test repo. |
| 15 | +- **Biome.js** for linting and formatting, replacing ESLint. Configured with 4-space indentation, double quotes, recommended lint rules, and import sorting. |
| 16 | +- **12 unit tests** covering PR creation, PR reuse, no-op on no changes, push without `--force`, rebase retry, PR comment on conflict, error path separation, rebase abort error handling, `setFailed` on all failure paths, and auto-merge bypass. |
| 17 | + |
| 18 | +### Changed |
| 19 | + |
| 20 | +- **Node runtime bumped to `node20`** (from deprecated `node16`) in `action.yml`. |
| 21 | +- **Vitest 4** replaces Jest as the test framework. |
| 22 | +- **CI actions updated** to `actions/checkout@v6` and `actions/setup-node@v6` with Node 20. |
| 23 | +- **Non-null assertions replaced** with runtime guards in `syncChanges` for safer error handling. |
| 24 | +- **Caught errors are now logged** via `core.debug()` instead of being silently ignored, aiding debugging when `ACTIONS_STEP_DEBUG` is enabled. |
| 25 | +- **`--force` removed from `git push`** in the `updateFromSourceSpec` path so commits accumulate naturally. |
| 26 | + |
| 27 | +### Fixed |
| 28 | + |
| 29 | +- **Duplicate PRs.** The `updateFromSourceSpec` function previously created a new PR on every run that detected changes, even if an open PR already existed for the same branch. |
| 30 | +- **Error messages in PR comments.** Multi-line git error output now uses fenced code blocks instead of inline code spans, fixing broken Markdown rendering on GitHub. |
| 31 | +- **Error path separation.** `pushWithFallback` now correctly distinguishes between "rebase failed" (merge conflicts) and "rebase succeeded but push failed" (push rejection), providing accurate diagnostic labels in PR comments. |
| 32 | + |
| 33 | +## v3 |
| 34 | + |
| 35 | +### Added |
| 36 | + |
| 37 | +- Removed `addTimestamp` from branch names. |
| 38 | +- Small cleanup and reformatting. |
| 39 | + |
| 40 | +### Changed |
| 41 | + |
| 42 | +- Updated `glob` and `js-yaml` dependencies. |
| 43 | + |
| 44 | +## v2.1 |
| 45 | + |
| 46 | +### Fixed |
| 47 | + |
| 48 | +- Fixed branch logic and `--force` tag handling. |
| 49 | +- Removed date from branch names. |
| 50 | + |
| 51 | +## v2 |
| 52 | + |
| 53 | +### Added |
| 54 | + |
| 55 | +- Option to run `fern api upgrade`. |
| 56 | +- Branch name formatting. |
| 57 | +- Upstream remote support. |
| 58 | + |
| 59 | +### Changed |
| 60 | + |
| 61 | +- Updated actions and token handling. |
| 62 | + |
| 63 | +## v1 |
| 64 | + |
| 65 | +### Added |
| 66 | + |
| 67 | +- Directory and file mapping with `from`/`to` fields. |
| 68 | +- Glob-based `exclude` patterns via `minimatch`. |
| 69 | +- Better error messages for fetch failures. |
| 70 | + |
| 71 | +## v0 |
| 72 | + |
| 73 | +- Initial release with basic OpenAPI spec syncing between repositories. |
0 commit comments