mirror of
				https://codeberg.org/forgejo/forgejo.git
				synced 2025-10-31 14:31:02 +00:00 
			
		
		
		
	Merge pull request 'feat(release-notes-assistant): if no labels, fallback to prefix' (#4651) from twenty-panda/forgejo:wip-rna into forgejo
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/4651 Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
This commit is contained in:
		
				commit
				
					
						1a2c611c42
					
				
			
		
					 3 changed files with 228 additions and 55 deletions
				
			
		|  | @ -19,6 +19,7 @@ jobs: | ||||||
|       - uses: https://code.forgejo.org/actions/setup-go@v4 |       - uses: https://code.forgejo.org/actions/setup-go@v4 | ||||||
|         with: |         with: | ||||||
|           go-version-file: "go.mod" |           go-version-file: "go.mod" | ||||||
|  |           cache: false | ||||||
| 
 | 
 | ||||||
|       - name: apt install jq |       - name: apt install jq | ||||||
|         run: | |         run: | | ||||||
|  | @ -28,4 +29,4 @@ jobs: | ||||||
| 
 | 
 | ||||||
|       - name: release-notes-assistant preview |       - name: release-notes-assistant preview | ||||||
|         run: | |         run: | | ||||||
|           go run code.forgejo.org/forgejo/release-notes-assistant@v1.0.1 --config .release-notes-assistant.yaml --storage pr --storage-location ${{ github.event.pull_request.number }}  --forgejo-url $GITHUB_SERVER_URL --repository $GITHUB_REPOSITORY --token ${{ secrets.RELEASE_NOTES_ASSISTANT_TOKEN }} preview ${{ github.event.pull_request.number }} |           go run code.forgejo.org/forgejo/release-notes-assistant@v1.0.2 --config .release-notes-assistant.yaml --storage pr --storage-location ${{ github.event.pull_request.number }}  --forgejo-url $GITHUB_SERVER_URL --repository $GITHUB_REPOSITORY --token ${{ secrets.RELEASE_NOTES_ASSISTANT_TOKEN }} preview ${{ github.event.pull_request.number }} | ||||||
|  |  | ||||||
|  | @ -75,6 +75,10 @@ jobs: | ||||||
|           apt-get -q install -qq -y git |           apt-get -q install -qq -y git | ||||||
|           rm /etc/apt/sources.list.d/testing.list |           rm /etc/apt/sources.list.d/testing.list | ||||||
|           apt-get update -qq |           apt-get update -qq | ||||||
|  |       - name: test release-notes-assistant.sh | ||||||
|  |         run: | | ||||||
|  |           apt-get -q install -qq -y jq | ||||||
|  |           ./release-notes-assistant.sh test_main | ||||||
|       - run: | |       - run: | | ||||||
|           su forgejo -c 'make deps-backend' |           su forgejo -c 'make deps-backend' | ||||||
|       - run: | |       - run: | | ||||||
|  |  | ||||||
|  | @ -2,11 +2,72 @@ | ||||||
| # Copyright twenty-panda <twenty-panda@posteo.com> | # Copyright twenty-panda <twenty-panda@posteo.com> | ||||||
| # SPDX-License-Identifier: MIT | # SPDX-License-Identifier: MIT | ||||||
| 
 | 
 | ||||||
|  | label_worth=worth | ||||||
|  | label_bug=bug | ||||||
|  | label_feature=feature | ||||||
|  | label_ui=forgejo/ui | ||||||
|  | label_breaking=breaking | ||||||
|  | 
 | ||||||
| payload=$(mktemp) | payload=$(mktemp) | ||||||
| pr=$(mktemp) | pr=$(mktemp) | ||||||
| trap "rm $payload $pr" EXIT | trap "rm $payload $pr" EXIT | ||||||
| 
 | 
 | ||||||
|  | function test_main() { | ||||||
|  |   set -ex | ||||||
|  |   PS4='${BASH_SOURCE[0]}:$LINENO: ${FUNCNAME[0]}:  ' | ||||||
|  | 
 | ||||||
|  |   test_payload_labels $label_worth $label_breaking $label_feature | ||||||
|  |   test "$(categorize)" = 'AA Breaking features' | ||||||
|  | 
 | ||||||
|  |   test_payload_labels $label_worth $label_breaking $label_bug | ||||||
|  |   test "$(categorize)" = 'AB Breaking bug fixes' | ||||||
|  | 
 | ||||||
|  |   test_payload_labels $label_worth $label_breaking | ||||||
|  |   test "$(categorize)" = 'ZC Breaking changes without a feature or bug label' | ||||||
|  | 
 | ||||||
|  |   test_payload_labels $label_worth $label_ui $label_feature | ||||||
|  |   test "$(categorize)" = 'BA User Interface features' | ||||||
|  | 
 | ||||||
|  |   test_payload_labels $label_worth $label_ui $label_bug | ||||||
|  |   test "$(categorize)" = 'BB User Interface bug fixes' | ||||||
|  | 
 | ||||||
|  |   test_payload_labels $label_worth $label_ui | ||||||
|  |   test "$(categorize)" = 'ZD User Interface changes without a feature or bug label' | ||||||
|  | 
 | ||||||
|  |   test_payload_labels $label_worth $label_feature | ||||||
|  |   test "$(categorize)" = 'CA Features' | ||||||
|  | 
 | ||||||
|  |   test_payload_labels $label_worth $label_bug | ||||||
|  |   test "$(categorize)" = 'CB Bug fixes' | ||||||
|  | 
 | ||||||
|  |   test_payload_labels $label_worth | ||||||
|  |   test "$(categorize)" = 'ZE Other changes without a feature or bug label' | ||||||
|  | 
 | ||||||
|  |   test_payload_labels | ||||||
|  |   test "$(categorize)" = 'ZF Included for completness but not worth a release note' | ||||||
|  | 
 | ||||||
|  |   test_payload_draft "feat!: breaking feature" | ||||||
|  |   test "$(categorize)" = 'AA Breaking features' | ||||||
|  | 
 | ||||||
|  |   test_payload_draft "fix!: breaking bug fix" | ||||||
|  |   test "$(categorize)" = 'AB Breaking bug fixes' | ||||||
|  | 
 | ||||||
|  |   test_payload_draft "feat: feature" | ||||||
|  |   test "$(categorize)" = 'CA Features' | ||||||
|  | 
 | ||||||
|  |   test_payload_draft "fix: bug fix" | ||||||
|  |   test "$(categorize)" = 'CB Bug fixes' | ||||||
|  | 
 | ||||||
|  |   test_payload_draft "something with no prefix" | ||||||
|  |   test "$(categorize)" = 'ZE Other changes without a feature or bug label' | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function main() { | ||||||
|   cat >$payload |   cat >$payload | ||||||
|  |   categorize | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function categorize() { | ||||||
|   # |   # | ||||||
|   # If this is a backport, refer to the original PR to figure |   # If this is a backport, refer to the original PR to figure | ||||||
|   # out the classification. |   # out the classification. | ||||||
|  | @ -22,7 +83,7 @@ labels=$(jq --raw-output '.labels[].name' <$pr) | ||||||
|   # |   # | ||||||
|   # Was this PR labeled `worth a release note`? |   # Was this PR labeled `worth a release note`? | ||||||
|   # |   # | ||||||
| if echo "$labels" | grep --quiet worth; then |   if echo "$labels" | grep --quiet $label_worth; then | ||||||
|     worth=true |     worth=true | ||||||
|   else |   else | ||||||
|     worth=false |     worth=false | ||||||
|  | @ -34,40 +95,147 @@ fi | ||||||
|   # |   # | ||||||
|   if test -z "$(jq --raw-output .Draft <$payload)"; then |   if test -z "$(jq --raw-output .Draft <$payload)"; then | ||||||
|     if ! $worth; then |     if ! $worth; then | ||||||
|     echo -n ZA Included for completness but not worth a release note |       echo -n ZF Included for completness but not worth a release note | ||||||
|       exit 0 |       exit 0 | ||||||
|     fi |     fi | ||||||
|   fi |   fi | ||||||
| 
 | 
 | ||||||
|  |   is_ui=false | ||||||
|  |   is_bug=false | ||||||
|  |   is_feature=false | ||||||
|  |   is_breaking=false | ||||||
|  | 
 | ||||||
|  |   # | ||||||
|  |   # first try to figure out the category from the labels | ||||||
|  |   # | ||||||
|   case "$labels" in |   case "$labels" in | ||||||
| *bug*) |   *$label_bug*) | ||||||
|  |     is_bug=true | ||||||
|  |     ;; | ||||||
|  |   *$label_feature*) | ||||||
|  |     is_feature=true | ||||||
|  |     ;; | ||||||
|  |   esac | ||||||
|  | 
 | ||||||
|  |   case "$labels" in | ||||||
|  |   *$label_breaking*) | ||||||
|  |     is_breaking=true | ||||||
|  |     ;; | ||||||
|  |   esac | ||||||
|  | 
 | ||||||
|  |   case "$labels" in | ||||||
|  |   *$label_ui*) | ||||||
|  |     is_ui=true | ||||||
|  |     ;; | ||||||
|  |   esac | ||||||
|  | 
 | ||||||
|  |   # | ||||||
|  |   # then try the prefix of the release note | ||||||
|  |   # | ||||||
|  |   if ! $is_bug && ! $is_feature; then | ||||||
|  |     draft="$(jq --raw-output .Draft <$payload)" | ||||||
|  |     case "$draft" in | ||||||
|  |     fix!:*) | ||||||
|  |       is_bug=true | ||||||
|  |       is_breaking=true | ||||||
|  |       ;; | ||||||
|  |     fix:*) | ||||||
|  |       is_bug=true | ||||||
|  |       ;; | ||||||
|  |     feat!:*) | ||||||
|  |       is_feature=true | ||||||
|  |       is_breaking=true | ||||||
|  |       ;; | ||||||
|  |     feat:*) | ||||||
|  |       is_feature=true | ||||||
|  |       ;; | ||||||
|  |     esac | ||||||
|  |   fi | ||||||
|  | 
 | ||||||
|  |   if $is_bug; then | ||||||
|     if $(jq --raw-output .IsBackportedTo <$payload); then |     if $(jq --raw-output .IsBackportedTo <$payload); then | ||||||
|       # |       # | ||||||
|       # if it has been backported, it was in the release notes of an older stable release |       # 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 |       # 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 |       echo -n ZG Already announced in the release notes of an older stable release | ||||||
|       exit 0 |       exit 0 | ||||||
|     fi |     fi | ||||||
|   ;; |   fi | ||||||
| esac |  | ||||||
| 
 | 
 | ||||||
| case "$labels" in |   if $is_breaking; then | ||||||
| *breaking*) |     if $is_feature; then | ||||||
|   case "$labels" in |       echo -n AA Breaking features | ||||||
|   *feature*) echo -n AA Breaking features ;; |     elif $is_bug; then | ||||||
|   *bug*) echo -n AB Breaking bug fixes ;; |       echo AB Breaking bug fixes | ||||||
|   *) echo -n ZC Breaking changes without a feature or bug label ;; |     else | ||||||
|   esac |       echo -n ZC Breaking changes without a feature or bug label | ||||||
|   ;; |     fi | ||||||
| *forgejo/ui*) |   elif $is_ui; then | ||||||
|   case "$labels" in |     if $is_feature; then | ||||||
|   *feature*) echo -n BA User Interface features ;; |       echo -n BA User Interface features | ||||||
|   *bug*) echo -n BB User Interface bug fixes ;; |     elif $is_bug; then | ||||||
|   *) echo -n ZD User Interface changes without a feature or bug label ;; |       echo -n BB User Interface bug fixes | ||||||
|   esac |     else | ||||||
|   ;; |       echo -n ZD User Interface changes without a feature or bug label | ||||||
| *feature*) echo -n CA Features ;; |     fi | ||||||
| *bug*) echo -n CB Bug fixes ;; |   else | ||||||
| *) echo -n ZE Other changes without a feature or bug label ;; |     if $is_feature; then | ||||||
| esac |       echo -n CA Features | ||||||
|  |     elif $is_bug; then | ||||||
|  |       echo -n CB Bug fixes | ||||||
|  |     else | ||||||
|  |       echo -n ZE Other changes without a feature or bug label | ||||||
|  |     fi | ||||||
|  |   fi | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function test_payload_labels() { | ||||||
|  |   local label1="$1" | ||||||
|  |   local label2="$2" | ||||||
|  |   local label3="$3" | ||||||
|  |   local label4="$4" | ||||||
|  | 
 | ||||||
|  |   cat >$payload <<EOF | ||||||
|  | { | ||||||
|  |   "Pr": { | ||||||
|  |     "labels": [ | ||||||
|  |       { | ||||||
|  |         "name": "$label1" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |         "name": "$label2" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |         "name": "$label3" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |         "name": "$label4" | ||||||
|  |       } | ||||||
|  |     ] | ||||||
|  |   }, | ||||||
|  |   "IsBackportedFrom": false, | ||||||
|  |   "Draft": "" | ||||||
|  | } | ||||||
|  | EOF | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function test_payload_draft() { | ||||||
|  |   local draft="$1" | ||||||
|  | 
 | ||||||
|  |   cat >$payload <<EOF | ||||||
|  | { | ||||||
|  |   "Pr": { | ||||||
|  |     "labels": [ | ||||||
|  |       { | ||||||
|  |         "name": "$label_worth" | ||||||
|  |       } | ||||||
|  |     ] | ||||||
|  |   }, | ||||||
|  |   "IsBackportedFrom": false, | ||||||
|  |   "Draft": "$draft" | ||||||
|  | } | ||||||
|  | EOF | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | "${@:-main}" | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue