Conversation
There was a problem hiding this comment.
Pull request overview
Adds Keep a Changelog support to Giraffe’s packaging/release workflow by introducing a repository CHANGELOG.md and wiring Ionide.KeepAChangelog.Tasks into the main library project, with corresponding release-process documentation updates.
Changes:
- Add
CHANGELOG.mdin Keep a Changelog format (historic entries included). - Configure
src/Giraffe/Giraffe.fsprojto useIonide.KeepAChangelog.Tasksand point it atCHANGELOG.md(also removes the hard-coded<Version>). - Update
DEVGUIDE.mdrelease steps to include updatingCHANGELOG.md.
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated 9 comments.
| File | Description |
|---|---|
| src/Giraffe/Giraffe.fsproj | Removes explicit versioning and adds KeepAChangelog task + configuration to source metadata from CHANGELOG.md. |
| DEVGUIDE.md | Updates release process steps to maintain both RELEASE_NOTES.md and CHANGELOG.md. |
| CHANGELOG.md | Introduces a Keep a Changelog formatted changelog with prior release history. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| <PropertyGroup> | ||
| <!-- Configuration for Ionide.KeepAChangelog.Tasks --> | ||
| <ChangelogFile>$(MSBuildThisFileDirectory)../../CHANGELOG.md</ChangelogFile> | ||
| </PropertyGroup> |
There was a problem hiding this comment.
Ionide.KeepAChangelog.Tasks is being added/configured here, but this project file still hard-codes PackageReleaseNotes earlier to the RELEASE_NOTES.md URL. If the goal is to let KeepAChangelog populate PackageReleaseNotes (and/or Version/PackageVersion) from CHANGELOG.md, the explicit PackageReleaseNotes value should be removed or made conditional so the generated value isn’t ignored/overridden.
| 1. Checkout `master` branch. | ||
| 1. `git checkout master`. | ||
| 2. Add a new entry at the top of the **RELEASE_NOTES.md** and **CHANGELOG.md** with a version and a date. |
There was a problem hiding this comment.
The git checkout master command includes a trailing period inside the inline code block, which will break copy/paste. Move punctuation outside the backticks (same applies to any other commands in this section).
|
|
||
| ### Security | ||
|
|
||
| - [Some security fixes for Giraffe](https://github.com/giraffe-fsharp/Giraffe/pull/691) - Credits @ |
There was a problem hiding this comment.
This changelog entry has an incomplete credit (Credits @) which will leak into generated release notes. Fill in the author handle (or remove the credits suffix if unknown) to avoid publishing malformed metadata.
| - [Some security fixes for Giraffe](https://github.com/giraffe-fsharp/Giraffe/pull/691) - Credits @ | |
| - [Some security fixes for Giraffe](https://github.com/giraffe-fsharp/Giraffe/pull/691) |
| ### Fixed | ||
|
|
||
| - `routeBind` works when nested in a `subRoute` handler now | ||
| - `routeBind` doesn't crate a model object any more if the route arguments do not match the provided model |
There was a problem hiding this comment.
Typo in changelog text: "doesn't crate" should be "doesn't create".
| - `routeBind` doesn't crate a model object any more if the route arguments do not match the provided model | |
| - `routeBind` doesn't create a model object any more if the route arguments do not match the provided model |
| ### Added | ||
|
|
||
| - Added three additional `HttpContext` extension methods in the `Giraffe.HttpContextExtensions` module: `WriteJson`, `WriteXml` and `WriteText`. These three methods can be used for direct HttpReponse writing from within a custom handler without having to sub-call the `json`, `xml` or `text` http handlers. | ||
| - Changed the `UseGiraffeErrorHandler` method to return an `IApplicationBuilder` now. This change allows [middleware chaining](https://github.com/dustinmoris/Giraffe/pull/118). This is a breaking change and you'll either have to chain middleware or append an `|> ignore` in your application set up. |
There was a problem hiding this comment.
Typo in changelog text: "HttpReponse" should be "HttpResponse".
| ### Added | ||
|
|
||
| - Added a new programmatic view engine called `Giraffe.HtmlEngine` | ||
| - Addd a new `HttpHandler` named `renderHtml` to return views from the new view engine |
There was a problem hiding this comment.
Typo in changelog text: "Addd" should be "Added".
| - Addd a new `HttpHandler` named `renderHtml` to return views from the new view engine | |
| - Added a new `HttpHandler` named `renderHtml` to return views from the new view engine |
|
|
||
| ### Changed | ||
|
|
||
| - Deprecated `Griaffe.Tasks`. Giraffe uses the original [TaskBuilder.fs](https://github.com/rspeele/TaskBuilder.fs) library now. |
There was a problem hiding this comment.
Typo in changelog text: "Griaffe.Tasks" should be "Giraffe.Tasks".
| - Deprecated `Griaffe.Tasks`. Giraffe uses the original [TaskBuilder.fs](https://github.com/rspeele/TaskBuilder.fs) library now. | |
| - Deprecated `Giraffe.Tasks`. Giraffe uses the original [TaskBuilder.fs](https://github.com/rspeele/TaskBuilder.fs) library now. |
| ### Changed | ||
|
|
||
| - Changed the default json serializer to use camel case for serialization (this change prevents users from being able to change the default serializer through the `JsonConvert.DefaultSettings` object - use `customJson` instead if customization is required) | ||
| - Changed the `serializeJson`, `deserializeJson` methods to accept an aditional parameter of type `JsonSerializerSettings` |
There was a problem hiding this comment.
Typo in changelog text: "aditional" should be "additional".
| - Changed the `serializeJson`, `deserializeJson` methods to accept an aditional parameter of type `JsonSerializerSettings` | |
| - Changed the `serializeJson`, `deserializeJson` methods to accept an additional parameter of type `JsonSerializerSettings` |
| 3. Create a new commit: | ||
| 1. `git add RELEASE_NOTES.md`, and `git add CHANGELOG.md`. | ||
| 2. `git commit -m "Release 6.0.0-beta001"`. Notice that the pre-release versioning scheme is semantic versioning (SemVer), so each section of the pre-release part is compared separately, and purely-numeric sections are compared as integers. For example, if you eventually release `v6.4.1-alpha-9` and `v6.4.1-alpha-10`, the `alpha-9` version will be ranked higher on Nuget. Keep this in mind and prefer the alphaXXX/betaXXX structure, where XXX are integers starting from 001 to 999. First mentioned at this PR comment: [link](https://github.com/giraffe-fsharp/Giraffe/pull/596#issuecomment-2111097042). | ||
| 5. Make a new tag | ||
| 1. `git tag v6.0.0-beta001` | ||
| 6. Push changes | ||
| 1. `git push --atomic origin master v6.0.0-beta001` | ||
| 7. Create a [new pre-release](https://github.com/giraffe-fsharp/Giraffe/releases) on GitHub | ||
| 1. Choose the tag you just pushed | ||
| 2. Title the pre-release the same as the version | ||
| 3. Copy the pre-release notes from RELEASE_NOTES.md | ||
| 4. This will trigger a github action to build and publish the nuget package | ||
| 8. Do any additional testing or tell certain people to try it out | ||
| 9. Once satisfied repeat the process but without any alpha/beta/rc suffixes. | ||
| 1. Run through steps 2-7, creating a **release** instead of a pre-release | ||
| 10. Tell the internet about it | ||
| 1. Tweet about it | ||
| 2. Post in F# Slack | ||
| 3. Post in F# Discord | ||
| 11. Celebrate 🎉 | ||
| 4. Make a new tag. | ||
| 1. Example: `git tag v6.0.0-beta001`. | ||
| 5. Push changes. | ||
| 1. Example: `git push --atomic origin master v6.0.0-beta001` |
There was a problem hiding this comment.
Several example commands include trailing punctuation inside inline code blocks (e.g., git commit ...". and git tag ....); this will break copy/paste. Keep the command inside backticks without the trailing . and put punctuation outside the code span.
nojaf
left a comment
There was a problem hiding this comment.
As you have multiple projects which you submit to NuGet, you could consider having some of this stuff in Build.Directory.props.
Description
With this PR, I'm:
How to test
dotnet pack -v normal -c Release --include-symbols --include-source -o nupkg src/Giraffe/Giraffe.*projThen, inspect the package.
Related issues