tests: update the PR description with the release notes draft

If the 'worth a release-note' label is set, add a release note entry
to the description of the pull request as a preview.

* use the `release-notes/<pr-number>.md` file if any
* otherwise use the pull request title

Refs: https://code.forgejo.org/forgejo/release-notes-assistant
This commit is contained in:
Twenty Panda 2024-07-21 21:05:08 +02:00 committed by Earl Warren
parent 86298c5be2
commit 5c734d8885
WARNING! Although there is a key with this ID in the database it does not verify this commit! This commit is SUSPICIOUS.
GPG key ID: 0579CB2928A78A00
3 changed files with 126 additions and 0 deletions

View file

@ -0,0 +1,31 @@
on:
pull_request_target:
types:
- opened
- reopened
- edited
- synchronize
- labeled
jobs:
release-notes:
if: ${{ !startsWith(vars.ROLE, 'forgejo-') && contains(github.event.pull_request.labels.*.name, 'worth a release-note') }}
runs-on: docker
container:
image: 'docker.io/node:20-bookworm'
steps:
- uses: https://code.forgejo.org/actions/checkout@v3
- uses: https://code.forgejo.org/actions/setup-go@v4
with:
go-version-file: "go.mod"
- name: apt install jq
run: |
export DEBIAN_FRONTEND=noninteractive
apt-get update -qq
apt-get -q install -y -qq jq
- name: release-notes-assistant preview
run: |
go run code.forgejo.org/forgejo/release-notes-assistant@1.0.0 --config .release-notes-assistant.yaml --storage pr --storage-location ${{ github.event.pull_request.number }} --forgejo-url $GITHUB_SERVER_URL --repository $GITHUB_REPOSITORY --token $GITHUB_TOKEN preview ${{ github.event.pull_request.number }}

View file

@ -0,0 +1,22 @@
categorize: './release-notes-assistant.sh'
branch-development: 'forgejo'
branch-pattern: 'v*/forgejo'
branch-find-version: 'v(?P<version>\d+\.\d+)/forgejo'
branch-to-version: '${version}.0'
branch-from-version: 'v%[1]d.%[2]d/forgejo'
tag-from-version: 'v%[1]d.%[2]d.%[3]d'
branch-known:
- 'v7.0/forgejo'
cleanup-line: 'sed -Ee "s/.*?:\s*//g" -e "s;\[(UI|BUG|FEAT|v.*?/forgejo)\]\s*;;g"'
render-header: |
## Draft release notes
comment: |
<details>
<summary>Where does that come from?</summary>
The following is a preview of the release notes for this pull request, as they will appear in the upcoming release. They are derived from the content of the `%[2]s/%[3]s.md` file, if it exists, or the title of the pull request. They were also added at the bottom of the description of this pull request for easier reference.
This message and the release notes originate from a call to the [release-notes-assistant](https://code.forgejo.org/forgejo/release-notes-assistant).
</details>
%[1]s

73
release-notes-assistant.sh Executable file
View file

@ -0,0 +1,73 @@
#!/bin/bash
# Copyright twenty-panda <twenty-panda@posteo.com>
# SPDX-License-Identifier: MIT
payload=$(mktemp)
pr=$(mktemp)
trap "rm $payload $pr" EXIT
cat >$payload
#
# If this is a backport, refer to the original PR to figure
# out the classification.
#
if $(jq --raw-output .IsBackportedFrom <$payload); then
jq --raw-output '.BackportedFrom[0]' <$payload >$pr
else
jq --raw-output '.Pr' <$payload >$pr
fi
labels=$(jq --raw-output '.labels[].name' <$pr)
#
# Was this PR labeled `worth a release note`?
#
if echo "$labels" | grep --quiet worth; then
worth=true
else
worth=false
fi
#
# If there was no release-notes/N.md file and it is not
# worth a release note, just forget about it.
#
if test -z "$(jq --raw-output .Draft <$payload)"; then
if ! $worth; then
echo -n ZA Included for completness but not worth a release note
exit 0
fi
fi
case "$labels" in
*bug*)
if $(jq --raw-output .IsBackportedTo <$payload); then
#
# if it has been backported, it was in the release notes of an older stable release
# and does not need to be in this more recent release notes
#
echo -n ZB Already announced in the release notes of an older stable release
exit 0
fi
;;
esac
case "$labels" in
*breaking*)
case "$labels" in
*feature*) echo -n AA Breaking features ;;
*bug*) echo -n AB Breaking bug fixes ;;
*) echo -n ZC Breaking changes without a feature or bug label ;;
esac
;;
*forgejo/ui*)
case "$labels" in
*feature*) echo -n BA User Interface features ;;
*bug*) echo -n BB User Interface bug fixes ;;
*) echo -n ZD User Interface changes without a feature or bug label ;;
esac
;;
*feature*) echo -n CA Features ;;
*bug*) echo -n CB Bug fixes ;;
*) echo -n ZE Other changes without a feature or bug label ;;
esac