Skip to content

Conversation

VaclavElias
Copy link
Contributor

@VaclavElias VaclavElias commented Feb 2, 2024

PR Details

Implement automated Release Notes generation, well semi-automated, we have to manually create the comparison, which will generate the content, but at least we can test it. Maybe TeamCity will automate/trigger this process fully in the future.

Description

This PR introduces an automated process for generating release notes using a release.yml GitHub Actions configuration. This workflow is tailored to categorize changes into sections such as Breaking Changes, New Features, Bug Fixes, and more, based on the labels assigned to merged PRs. It also excludes specific labels and authors (e.g., dependabot) from the changelog to streamline the release notes.

Once it is merged, we can test it and correct the categorisation according our needs.

Workflow

Who ever merges PRs:

  1. Must/should categorise each PR with a label.

Related Issue

N/A - This is an improvement to our CI/CD process, not directly related to an existing issue.

Motivation and Context

The primary goal of automating release notes generation is to enhance the efficiency and accuracy of our release process. Manually compiling release notes is time-consuming and prone to omissions. By leveraging GitHub Actions, we ensure that all significant changes are automatically documented in each release, providing clear and consistent communication to our users about what has changed.

Types of changes

  • Docs change / refactoring / dependency upgrade
  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)

Checklist

  • My change requires a change to the documentation.
  • I have added tests to cover my changes.
  • All new and existing tests passed.
  • I have built and run the editor to try this change out.

@VaclavElias
Copy link
Contributor Author

Example
image

@Eideren
Copy link
Collaborator

Eideren commented Feb 2, 2024

Looks good but PRs can only be within one category right ? If we were to mark one PR with both new feature and rendering it would only be included in the first OR the second.
If that's the case, how should we classify things, either bug fix or new features then have a prefix Rendering: for bug fixes or new features related to rendering ?
Or should we do the opposite, and have Bug Fix:/new Feature: as prefix ?

@VaclavElias
Copy link
Contributor Author

Looks good but PRs can only be within one category right ? If we were to mark one PR with both new feature and rendering it would only be included in the first OR the second.

Let me test in locally and find out..

If that's the case, how should we classify things, either bug fix or new features then have a prefix Rendering: for bug fixes or new features related to rendering ?

That is exactly what we need to figure out, some guidiance, how we are going to catogorise it and mainly, how we want to communicate it.

Maybe we should categorise it in the first place, where it belongs to, with the game related terminology, regardless it is a bug or new feature, maybe people more relate to these game terms?:

  • categories: Physics, Audio, Rendering, Graphics, GameStudio, Docs, Engine, ..

And if we think that in some cases, it is better to communicate it as a bug fix, then we could use "Bug Fixes" category as well if needed.

Additionally, I like prefixes so we could use (https://www.conventionalcommits.org/en/v1.0.0/):

  • fix, feat, build, chore, docs, refactor,..

So that would mean that a person who is merging would need to assign a only one label and correct the prefix, or add if missing.

And then fix or feat can be in any category obviously.

Any other thoughts, anyone?

Once you merge it, we can actually test it, we would need to label last 10-20 PRs, and probably if we can, also add prefixes.

If it is going to work, then we can decide properly on categories and prefixes we would like to have.

@manio143
Copy link
Member

manio143 commented Feb 3, 2024

If this is based on PRs then we can rename them even after merging. If it were based on commits that's a different story.

We've generally tried to prefix PRs with the area [Core]/[Rendering]/[Editor] etc. I'm personally not a big fan of conventional commits, because you need to align to their convention rather than coming up with one that suits you.

For this release notes split, would be good to make some sort of poll maybe on Discord and ask people whether they prefer this or the other split.

But I would say something like below 3 categories would be enough to communicate the important bits.

  1. Breaking changes
  2. New features
  3. Bug fixes

Having anything more is just for people to be aware other work is being done, but usually they are interested in what's going to break, what was fixed and what is new.

@VaclavElias
Copy link
Contributor Author

Hello. Thank you, everyone, for your feedback. After conducting a few tests, here are the findings:

  1. The GitHub release notes are generated based on PRs, not individual commits.
  2. PR titles can be renamed at any time.
  3. The categories in Release.yml can encompass multiple labels under a single category.
  4. While a PR can possess multiple labels, the release workflow generates only one entry per PR for each category, prioritized from top to bottom. This means a PR will appear under only one category in the release notes, even if it has multiple applicable labels.
  5. Updates to categories/labels in Release.yml will take effect starting from the subsequent release tag.

Given these insights, we should consider discussing in Discord our preferred approach to PR categorization.

Option 1, as suggested by @manio143, includes the following categories (subject to refinement):

  1. Breaking Changes
  2. New Features
  3. Bug Fixes
  4. XML Docs
  5. Other

Furthermore, we should prefix each PR for easier referencing and searching within the release notes, e.g., "Physics:" related PRs.

Prefixes: Physics, Engine, Performance, Graphics, Input, Launcher, Shaders, Audio, etc.—essentially, any relevant category.

Option 2 involves using our existing label areas or any other existing labels:

  1. Asset
  2. Audio
  3. Build
  4. Docs
  5. GameStudio
  6. Graphics
  7. Input
  8. Launcher
  9. ...
  10. Other

Moreover, we should adopt prefixes as per Conventional Commits 1.0.0:

Prefixes: feat:, refactor:, fix:, chore:, build:, docs:, perf:, test:, etc.

A breaking change can be denoted by adding an exclamation mark, e.g., feat!:, chore!:.

Regardless of the chosen option, the person merging a PR would need to:

  1. Label the PR, which requires just a few clicks. Some of us can label the PRs ourselves.
  2. Check and update the PR's prefix if incorrect or missing. Often, this might already be done by the PR creator.

What do you think now, with this additional input?

@manio143
Copy link
Member

manio143 commented Feb 5, 2024

IMO it makes sense for the person merging PR to ensure it's categorized and named correctly.

@VaclavElias VaclavElias changed the title Release.yml added for PR categorisation feat: Release.yml added for PR categorisation Feb 9, 2024
@VaclavElias
Copy link
Contributor Author

This PR was updated according the discussion we had on Discord, and then summarised here https://discord.com/channels/500285081265635328/707563402482024488. We can further fine-tune as desired.

@VaclavElias
Copy link
Contributor Author

If no further questions, can this be merged?

@Eideren Eideren merged commit e8ddbd5 into stride3d:master Mar 3, 2024
@Eideren
Copy link
Collaborator

Eideren commented Mar 3, 2024

Thanks @VaclavElias !

Eideren added a commit to Eideren/xenko that referenced this pull request Apr 9, 2024
* Remove docs, has been moved to Stride docs repo

* [OpenXR] Fixes build on graphics APIs other than D3D11

This build regression was introduced by previous commit d72aef5

* Update samples to Stride 4.2 (stride3d#2132)

* [Samples] Update to 4.2

* [Samples] Remove Newtonsoft.Json dependency in CSharpIntermediate

* [Tests] Fixes random test failures (stride3d#2133)

* [Tests] Fixes random test failures

Some of the tests in Stride.GameStudio.Tests must not run in parallel as they access a shared class which is not thread safe.

* Sets wait time in TestFileVersionManager to 500ms (from 200)

Should make it less likely that unit tests on teamcity fail.

* Repair projectwatcher (stride3d#2106)

* use positive 77

* repair projectwatcher

* remove unused line

* undo -77 change

* undo -77

* order usings

* fix formatting

* remove unused solution

* remove unused async

* use previous cancelation method

* remove extra task

* add check to not throw assembly changes away

* rework distribution of assemblychanges

* remove unused using

* add broadcast back in

* remove assembly broadcast

* add cancelation

* replace cancelation location

* improve if nesting

* improve naming, fix reload on new references

* fix loading chain of assets

* refactor

* [Editor] Refactor initialization of CodeViewModel

---------

Co-authored-by: IXLLEGACYIXL <ixllegacy123@outlook.com>
Co-authored-by: Nicolas Musset <musset.nicolas@gmail.com>

* [OpenVR] Adds a minimal API to request and control Passthrough (supported by OpenXR)

https://registry.khronos.org/OpenXR/specs/1.0/html/xrspec.html#XR_FB_passthrough

* [OpenXR] Makes device construction internal and improves exception messages of new StartPassthrough method

* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* [Assets] Prevent crash of the assets compiler when an assembly cannot be fully loaded. (stride3d#2144)

Fixes stride3d#2140

* [Build] Remove stylecop (stride3d#2105)

Co-authored-by: IXLLEGACYIXL <ixllegacy123@outlook.com>

* [Presentation] Rework AssetViewModelAttribute

* [Editor] Cleanup

* [Assets] Mark Editor as obsolete on AssetViewModel

* [Editor] Make Asset property public on all editors

* [Editor] Make IAssetEditorsManager a service

* [Editor] Keep track of asset/editor association in AssetEditorsManager

* [Editor] Add a method to find an opened editor

* [Editor] Change binding logic in editor views

The default DataContext is now the editor instead of the asset

* [Editor] Update sprite editor bindings

* [Editor] Update UI editor bindings

* [Editor] Update entity hierarchy editor bindings

* [Editor] Update script editor bindings

* [Editor] Update graphics compositor editor bindings

* [Editor] Removed pointless constraint on column width

Which is also spamming the console with binding errors.

* [Editor] Remove editor-related properties from AssetViewModel

* [Editor] Rework AssetEditorViewModelAttribute

- add AssetEditorViewAttribute
- rework view creation and initialization

* [Editor] Make AssetEditorViewModel.Asset property virtual

C# has covariant return types since version 9

* [Editor] Rework plugins initialization

* [Editor] Rework AssetPreviewViewModelAttribute & AssetPreviewAttribute

- add AssetPreviewViewAttribute to break the dependency between a preview and its UI-dependent view

* [Editor] Fix initialization of SpriteSheetEditorViewModel returning false

* [Editor] Make Stride.Core.Presentation.Quantum cross-platform

* [Editor] Make Stride.Core.Assets.Quantum cross-platform

* [Editor] Do not load StrideDefaultAssetsPlugin from module.

It currently hardcodes loading the templates from a package which causes some tests to fail.

Partially reverts c98c72e

* feat: Release.yml added for PR categorisation (stride3d#2137)

* feat: Release.yml added for PR categorisation

* Categories updated

* [Editor] Fix scene editor loading screen

* [VR] feat: Add haptic support to OpenVR and Oculus runtimes (stride3d#2169)

Co-authored-by: Eideren <contact@eideren.com>

* [Audio] Audio emitter multiple references to same asset bugfix (stride3d#2176)

Co-authored-by: Eideren <contact@eideren.com>

* Use correct destination path in asset import overwrite dialog

* Use GetFullPath to correct directory seperator for display

* fix: File GraphicsResourceMap.cs without references removed (stride3d#2181)

* feat: Update samples/template to top-level statements (stride3d#2187)

* Update README.md (prerequisites)

* Update README.md (VSIX prerequisites)

* [VSPackage] Revert a few package upgrades so that VSIX builds properly

* [Presentation] Fix issue with binding quantum nodes when associated name is not found (stride3d#2195)

Note: the solution is rather hackish at the moment. To be revisited once we have an Avalonia version.
Should we then introduce a service for setting/retrieving the Unset value

* fix: [Asset] Unified 3D asset importer (on behalf of Noa7/Noah7071) (stride3d#2163)

Co-authored-by: noa7 <noahwdv@gmail.com>
Co-authored-by: noa7707 <157441788+noa7707@users.noreply.github.com>
Co-authored-by: Noah7071 <157886157+Noah7071@users.noreply.github.com>

---------

Co-authored-by: JornosDesktop <aggror.jorn@gmail.com>
Co-authored-by: Elias Holzer <elias@vvvv.org>
Co-authored-by: Nicolas Musset <nicolas@color-rise.xyz>
Co-authored-by: IXLLEGACYIXL <107197024+IXLLEGACYIXL@users.noreply.github.com>
Co-authored-by: IXLLEGACYIXL <ixllegacy123@outlook.com>
Co-authored-by: Nicolas Musset <musset.nicolas@gmail.com>
Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
Co-authored-by: Jorn Theunissen <aggror.jorn@stride3d.net>
Co-authored-by: Marian Dziubiak <marian.dziubiak@gmail.com>
Co-authored-by: Vaclav Elias <vaclavelias@gmail.com>
Co-authored-by: Addison Schmidt <addison@assurancefamily.com>
Co-authored-by: Eideren <contact@eideren.com>
Co-authored-by: Tim Conner <tim@timconner.com>
Co-authored-by: Jakub Ławreszuk <31008367+Jklawreszuk@users.noreply.github.com>
Co-authored-by: xen2 <virgile@stride3d.net>
Co-authored-by: noa7 <noahwdv@gmail.com>
Co-authored-by: noa7707 <157441788+noa7707@users.noreply.github.com>
Co-authored-by: Noah7071 <157886157+Noah7071@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants