Open ashwin-pc opened 1 year ago
I really like the ideal of PR labels to generate the change sets (or CHANGELOG). So could we avoid having the change set generation be added to the PR every time?
Assuming all pull requests are labeled and that we know what went into a release (baseline), I think a bot should be able to generate the change sets without having to append them to every PR.
The goal for appending them to the PR is so that the changeset is tracked with the code itself. so if we revert a change, the changeset also gets reverted automatically, and if we backport, the changeset gets backported too. Basically The changeset travels with the change itself keeping the two in sync and honest with each other
The changeset travels with the change itself keeping the two in sync and honest with each other
I really like this property of solutions like this. Cherry picking commits is the norm with our branching strategy, so ensuring the changeset is tied to the commit and goes with it (and is reverted with it) makes this strategy work really well with our existing processes.
General feedback:
I'm super excited about the idea that the atomic "change entries" don't require a second commit, and can be written as part of the PR template. I also think the question is presented at the correct time (in the automated proposal), which is as part of submitting the PR and filling out the description.
Questions and comments:
How do you envision change entry collaborartion and editing in the PR review lifecycle? It seems like one advantage is that maintainers could simply update the PR description directly and retrigger the workflow. But, alternatively, contributors or maintainers could actually request changes in the changeset as part of revision commits. If we go with the automation recommendation, I'd suggest also specifying that changesets should always be generated by the automation and not edited manually. That will avoid confusion an make sure the PR description and changesets stay in sync.
name of the file is irrelevant as long as it does not conflict with the name of another file here
Is there existing tooling to prevent changeset filename collisions? It seems a bit more straightforward for an automated workflow to manage, if it's responsible for generating all the actual changeset files.
If necessary to view the changelog with the unreleased changes too, this can be generated by the user using the release note script.
Yeah, or we could even automate that, too, as some sort of recurring consolidation commit.
Valid prefixes: breaking, deprecate, feat, fix, infra, doc, chore, refactor, test
When implementing the template, we also probably need more guidance on how to identify which type to use
We then forward port these changes to main which will simultaneously delete the changeset files and update the main changelog.
This is an implementation detail, but, ideally when we do this we can also automate and avoid merge conflicts.
In the working group meeting on 5/4/2023, we unanimously voted to adopt this proposal (the "2.2.2 Automation" variation specifically). The next steps are to expand and polish the prototype: https://github.com/ashwin-pc/test-github-action and to create the script that moves changesets to the changelog, and cleans them up.
Hi all,
As you can see in my last thread above, issue #5509 has been open for an implementation of this proposal under the OpenSearch-Dashboards repo. After the successful competition of this PoC, the solution will be migrated, so all other repos under the OpenSearch Project can start implementing this process. We will keep you updated.
Regards,
Samuel
Hi all,
Just some heads up regarding the progress of a solution for this proposal.
Initially, the PoC developed considered the use of a customized script saved in the OpenSearch Dashboards repo (generate_release_notes.js file) and a reusable GitHub Actions workflow hosted in an external repository. A PR was opened to integrate these changes into the OpenSearch-Dashboards repository.
However, due to security constraints and the evolution of an idea for a general-purpose bot to automate any DevOps tasks along all OpenSearch repos, we opted to integrate the features we had built into a GitHub App called OpenSearch-bot. This App better suits the requirements in the initial proposal from @ashwin-pc and lays the groundwork for a more streamlined, efficient workflow for contributors and maintainers.
The first beta version of the bot is planned to be released in the 1st or 2nd week of January for the OpenSearch-Dashboards team only. After successful testing with that team, a rollout will be started to release the bot to all OpenSearch teams. Also, we plan to bring a presentation for the monthly community meetings to begin branding this tool in the community.
We are very excited about this tool we have developed during the OSCI programme. We hope the OpenSearch community finds it useful and starts using it or contributing to it, either to increase their productivity or add more functionalities to automate any DevOps process.
Hi all,
Here is an update on this project. Changes were made at last in a meeting with Aswhin. Full details in this thread with the open PR to OpenSearch-Dashbaords.
Planning for the release of the tool has been moved to next week. We will keep you updated.
Regards,
Samuel
Hi all,
New updates for this proposal after today's meeting detailed on this thread.
PoC for Automated Changelog and Release Notes is ready with all changes suggested from last meeting. Merge of PR [#5519](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/5519 from OSD and roll-out of new tool in same repo has been scheduled for next Thursday, January 18th.
Regards,
Samuel
Hi all,
From this week meeting, roll-out for OSD has started for the PoC of the automated Changelog and Release Notes project. At the end, it was decided to work on a new branch called in OSD (feature/changelog) to execute this rollout and check any errors or issues during it.
Next week more updates about the project.
Regards,
Samuel
Based on the goals of the changelog RFP here is an improved process to maintain the changelog.
1. Overview
There are 3 pain points with the existing changelog process that this proposal addresses:
My proposal for addressing these issues involves the following high-level process:
2. Plan
2.1 Split the Changelog
The first step will be to introduce the changeset folder and refactor the changelog file
2.1.1 Change set
Create a
/changelogs/fragments
folder to store each change set. Each file in this folder will carry a change set in the.yml
format. Ref: AnsibleSample changeset file: [short_name].yml (name of the file is irrelevant as long as it does not conflict with the name of another file here)
These changeset's are essentially the unreleased changes for the project. When these changes have made it to a release, they will be removed from the fragments.
2.1.2 Changelog
The changelog will be updated to remove the
Unreleased
and2.x
and1.x
sections. All released version changes will remain. The changelog will now act as a tracker for all the released changes with a link to the changeset fragments for unreleased changes. If necessary to view the changelog with the unreleased changes too, this can be generated by the user using the release note script.2.2 Easy changelog entry
To make the process of creating a changeset easier during the PR process, we will simplify the two commit process down to a single step.
2.2.1 The manual way
Along with the change, add a new file to the
/changelogs/fragments
folder following the changeset template from before. It does not need the PR number to be associated with it since we will only allow one changeset per PR, so the contents of the file will automatically be associate with only a single PR which can be used to generate the changelog as required. This should reduce the burden of creating the changelog from a two step process to a single step. This also has the added benefit that the changelog entry will not be a copy of the PR title, which forces the PR author to be deliberate about the changes they are making.The new process of adding a changelog entry needs to be documented with a link to it added to the PR template.
2.2.2 Automation (Preferred)
The step can be further simplified using github actions. We can introduce a custom action to add a changeset based on the contents of the PR template and the template itself can be updated to have a section to highlight the chages that the author is introducing. The action can be triggered either automatically when the PR is raised, or via a label like
Add Changeset
. The updated template will look something like this:A proof of concept action that implements this
2.3 Documenting the changelog process
With all these changes it becomes important to clarify what the changelog will actually contain and how do we keep it accurate across the different versions. We should also ideally avoid a significant rewrite to the existing changelog. So what does the new changelog look like?
changelog/fragments
as their own changeset. One changeset per PR2.x
branch, we generate release notes using the changeset, delete the changeset files and add the release notes to the top of the latestCHANGELOG.md
. We then forward port these changes tomain
which will simultaneously delete the changeset files and update themain
changelog.3. How does this meet our goals?
4. FAQ