From 7c1f3a7594a9c08ced59662a527d7ded8d1c098b Mon Sep 17 00:00:00 2001
From: Earl Warren <contact@earl-warren.org>
Date: Mon, 18 Nov 2024 19:40:15 +0100
Subject: [PATCH 1/2] chore(ci): cat all issue labels workflows in
 issue-labels.yml

cat cascade-setup-end-to-end.yml backport.yml merge-requirements.yml release-notes-assistant.yml > issue-labels.yml
rm cascade-setup-end-to-end.yml backport.yml merge-requirements.yml release-notes-assistant.yml
---
 .forgejo/workflows/backport.yml               |  44 ----
 .../workflows/cascade-setup-end-to-end.yml    |  53 -----
 .forgejo/workflows/issue-labels.yml           | 199 ++++++++++++++++++
 .forgejo/workflows/merge-requirements.yml     |  52 -----
 .../workflows/release-notes-assistant.yml     |  50 -----
 5 files changed, 199 insertions(+), 199 deletions(-)
 delete mode 100644 .forgejo/workflows/backport.yml
 delete mode 100644 .forgejo/workflows/cascade-setup-end-to-end.yml
 create mode 100644 .forgejo/workflows/issue-labels.yml
 delete mode 100644 .forgejo/workflows/merge-requirements.yml
 delete mode 100644 .forgejo/workflows/release-notes-assistant.yml

diff --git a/.forgejo/workflows/backport.yml b/.forgejo/workflows/backport.yml
deleted file mode 100644
index 614a2099af..0000000000
--- a/.forgejo/workflows/backport.yml
+++ /dev/null
@@ -1,44 +0,0 @@
-# Copyright 2024 The Forgejo Authors
-# SPDX-License-Identifier: MIT
-#
-name: issue-labels
-
-on:
-  pull_request_target:
-    types:
-      - closed
-      - labeled
-
-jobs:
-  backporting:
-    if: >
-      vars.ROLE == 'forgejo-coding' &&
-
-      secrets.BACKPORT_TOKEN != '' &&
-
-      github.event_name == 'pull_request_target' &&
-      (
-        github.event.pull_request.merged &&
-        contains(toJSON(github.event.pull_request.labels), 'backport/v')
-      )
-    runs-on: docker
-    container:
-      image: 'code.forgejo.org/oci/node:20-bookworm'
-    steps:
-      - name: Debug info
-        run: |
-          cat <<'EOF'
-          ${{ toJSON(github) }}
-          EOF
-      - uses: https://code.forgejo.org/actions/git-backporting@v4.8.4
-        with:
-          target-branch-pattern: "^backport/(?<target>(v.*))$"
-          strategy: ort
-          strategy-option: find-renames
-          cherry-pick-options: -x
-          auth: ${{ secrets.BACKPORT_TOKEN }}
-          pull-request: ${{ github.event.pull_request.url }}
-          auto-no-squash: true
-          enable-err-notification: true
-          git-user: forgejo-backport-action
-          git-email: forgejo-backport-action@noreply.codeberg.org
diff --git a/.forgejo/workflows/cascade-setup-end-to-end.yml b/.forgejo/workflows/cascade-setup-end-to-end.yml
deleted file mode 100644
index 1c12031b56..0000000000
--- a/.forgejo/workflows/cascade-setup-end-to-end.yml
+++ /dev/null
@@ -1,53 +0,0 @@
-# Copyright 2024 The Forgejo Authors
-# SPDX-License-Identifier: MIT
-#
-name: issue-labels
-
-on:
-  pull_request_target:
-    types:
-      - labeled
-
-jobs:
-  end-to-end:
-    if: >
-      vars.ROLE == 'forgejo-coding' &&
-
-      secrets.END_TO_END_CASCADING_PR_DESTINATION != '' &&
-      secrets.END_TO_END_CASCADING_PR_ORIGIN != '' &&
-
-      (
-        github.event_name == 'push' ||
-        (
-          github.event_name == 'pull_request_target' &&
-          github.event.action == 'label_updated' &&
-          github.event.label.name == 'run-end-to-end-tests'
-        )
-      )
-    runs-on: docker
-    container:
-      image: code.forgejo.org/oci/node:20-bookworm
-    steps:
-      - name: Debug info
-        run: |
-          cat <<'EOF'
-          ${{ toJSON(github) }}
-          EOF
-      - uses: actions/checkout@v4
-        with:
-          fetch-depth: '0'
-          show-progress: 'false'
-      - uses: actions/cascading-pr@v2
-        with:
-          origin-url: ${{ env.GITHUB_SERVER_URL }}
-          origin-repo: ${{ github.repository }}
-          origin-token: ${{ secrets.END_TO_END_CASCADING_PR_ORIGIN }}
-          origin-pr: ${{ github.event.pull_request.number }}
-          origin-ref: ${{ github.event_name == 'push' && github.event.ref || '' }}
-          destination-url: https://code.forgejo.org
-          destination-fork-repo: cascading-pr/end-to-end
-          destination-repo: forgejo/end-to-end
-          destination-branch: main
-          destination-token: ${{ secrets.END_TO_END_CASCADING_PR_DESTINATION }}
-          close-merge: true
-          update: .forgejo/cascading-pr-end-to-end
diff --git a/.forgejo/workflows/issue-labels.yml b/.forgejo/workflows/issue-labels.yml
new file mode 100644
index 0000000000..0424304b50
--- /dev/null
+++ b/.forgejo/workflows/issue-labels.yml
@@ -0,0 +1,199 @@
+# Copyright 2024 The Forgejo Authors
+# SPDX-License-Identifier: MIT
+#
+name: issue-labels
+
+on:
+  pull_request_target:
+    types:
+      - labeled
+
+jobs:
+  end-to-end:
+    if: >
+      vars.ROLE == 'forgejo-coding' &&
+
+      secrets.END_TO_END_CASCADING_PR_DESTINATION != '' &&
+      secrets.END_TO_END_CASCADING_PR_ORIGIN != '' &&
+
+      (
+        github.event_name == 'push' ||
+        (
+          github.event_name == 'pull_request_target' &&
+          github.event.action == 'label_updated' &&
+          github.event.label.name == 'run-end-to-end-tests'
+        )
+      )
+    runs-on: docker
+    container:
+      image: code.forgejo.org/oci/node:20-bookworm
+    steps:
+      - name: Debug info
+        run: |
+          cat <<'EOF'
+          ${{ toJSON(github) }}
+          EOF
+      - uses: actions/checkout@v4
+        with:
+          fetch-depth: '0'
+          show-progress: 'false'
+      - uses: actions/cascading-pr@v2
+        with:
+          origin-url: ${{ env.GITHUB_SERVER_URL }}
+          origin-repo: ${{ github.repository }}
+          origin-token: ${{ secrets.END_TO_END_CASCADING_PR_ORIGIN }}
+          origin-pr: ${{ github.event.pull_request.number }}
+          origin-ref: ${{ github.event_name == 'push' && github.event.ref || '' }}
+          destination-url: https://code.forgejo.org
+          destination-fork-repo: cascading-pr/end-to-end
+          destination-repo: forgejo/end-to-end
+          destination-branch: main
+          destination-token: ${{ secrets.END_TO_END_CASCADING_PR_DESTINATION }}
+          close-merge: true
+          update: .forgejo/cascading-pr-end-to-end
+# Copyright 2024 The Forgejo Authors
+# SPDX-License-Identifier: MIT
+#
+name: issue-labels
+
+on:
+  pull_request_target:
+    types:
+      - closed
+      - labeled
+
+jobs:
+  backporting:
+    if: >
+      vars.ROLE == 'forgejo-coding' &&
+
+      secrets.BACKPORT_TOKEN != '' &&
+
+      github.event_name == 'pull_request_target' &&
+      (
+        github.event.pull_request.merged &&
+        contains(toJSON(github.event.pull_request.labels), 'backport/v')
+      )
+    runs-on: docker
+    container:
+      image: 'code.forgejo.org/oci/node:20-bookworm'
+    steps:
+      - name: Debug info
+        run: |
+          cat <<'EOF'
+          ${{ toJSON(github) }}
+          EOF
+      - uses: https://code.forgejo.org/actions/git-backporting@v4.8.4
+        with:
+          target-branch-pattern: "^backport/(?<target>(v.*))$"
+          strategy: ort
+          strategy-option: find-renames
+          cherry-pick-options: -x
+          auth: ${{ secrets.BACKPORT_TOKEN }}
+          pull-request: ${{ github.event.pull_request.url }}
+          auto-no-squash: true
+          enable-err-notification: true
+          git-user: forgejo-backport-action
+          git-email: forgejo-backport-action@noreply.codeberg.org
+# Copyright 2024 The Forgejo Authors
+# SPDX-License-Identifier: MIT
+
+name: issue-labels
+
+on:
+  pull_request:
+    types:
+      - labeled
+      - edited
+      - opened
+
+jobs:
+  merge-conditions:
+    if: >
+      vars.ROLE == 'forgejo-coding' &&
+
+      github.event_name == 'pull_request' &&
+      (
+        github.event.action == 'label_updated' ||
+        github.event.action == 'edited' ||
+        github.event.action == 'opened'
+      )
+    runs-on: docker
+    container:
+      image: 'code.forgejo.org/oci/node:20-bookworm'
+    steps:
+      - name: Debug info
+        run: |
+          cat <<'EOF'
+          ${{ toJSON(github) }}
+          EOF
+      - name: Missing test label
+        if: >
+          !(
+            contains(toJSON(github.event.pull_request.labels), 'test/present')
+            || contains(toJSON(github.event.pull_request.labels), 'test/not-needed')
+            || contains(toJSON(github.event.pull_request.labels), 'test/manual')
+          )
+        run: |
+          echo "Test label must be set to either 'present', 'not-needed' or 'manual'."
+          exit 1
+      - name: Missing manual test instructions
+        if: >
+          (
+            contains(toJSON(github.event.pull_request.labels), 'test/manual')
+            && !contains(toJSON(github.event.pull_request.body), '# Test')
+          )
+        run: |
+          echo "Manual test label is set. The PR description needs to contain test steps introduced by a heading like:"
+          echo "# Testing"
+          exit 1
+name: issue-labels
+
+on:
+  pull_request_target:
+    types:
+      - edited
+      - synchronize
+      - labeled
+
+jobs:
+  release-notes:
+    if: >
+      vars.ROLE == 'forgejo-coding' &&
+
+      secrets.RELEASE_NOTES_ASSISTANT_TOKEN != '' &&
+
+      github.event_name == 'pull_request_target' &&
+      contains(github.event.pull_request.labels.*.name, 'worth a release-note') &&
+      (
+        github.event.action == 'label_updated' ||
+        github.event.action == 'edited' ||
+        github.event.action == 'synchronized'
+      )
+
+    runs-on: docker
+    container:
+      image: 'code.forgejo.org/oci/node:20-bookworm'
+    steps:
+      - name: Debug info
+        run: |
+          cat <<'EOF'
+          ${{ toJSON(github) }}
+          EOF
+
+      - uses: https://code.forgejo.org/actions/checkout@v4
+
+      - uses: https://code.forgejo.org/actions/setup-go@v5
+        with:
+          go-version-file: "go.mod"
+          cache: false
+
+      - 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@v1.1.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 }}
diff --git a/.forgejo/workflows/merge-requirements.yml b/.forgejo/workflows/merge-requirements.yml
deleted file mode 100644
index fe18aa1139..0000000000
--- a/.forgejo/workflows/merge-requirements.yml
+++ /dev/null
@@ -1,52 +0,0 @@
-# Copyright 2024 The Forgejo Authors
-# SPDX-License-Identifier: MIT
-
-name: issue-labels
-
-on:
-  pull_request:
-    types:
-      - labeled
-      - edited
-      - opened
-
-jobs:
-  merge-conditions:
-    if: >
-      vars.ROLE == 'forgejo-coding' &&
-
-      github.event_name == 'pull_request' &&
-      (
-        github.event.action == 'label_updated' ||
-        github.event.action == 'edited' ||
-        github.event.action == 'opened'
-      )
-    runs-on: docker
-    container:
-      image: 'code.forgejo.org/oci/node:20-bookworm'
-    steps:
-      - name: Debug info
-        run: |
-          cat <<'EOF'
-          ${{ toJSON(github) }}
-          EOF
-      - name: Missing test label
-        if: >
-          !(
-            contains(toJSON(github.event.pull_request.labels), 'test/present')
-            || contains(toJSON(github.event.pull_request.labels), 'test/not-needed')
-            || contains(toJSON(github.event.pull_request.labels), 'test/manual')
-          )
-        run: |
-          echo "Test label must be set to either 'present', 'not-needed' or 'manual'."
-          exit 1
-      - name: Missing manual test instructions
-        if: >
-          (
-            contains(toJSON(github.event.pull_request.labels), 'test/manual')
-            && !contains(toJSON(github.event.pull_request.body), '# Test')
-          )
-        run: |
-          echo "Manual test label is set. The PR description needs to contain test steps introduced by a heading like:"
-          echo "# Testing"
-          exit 1
diff --git a/.forgejo/workflows/release-notes-assistant.yml b/.forgejo/workflows/release-notes-assistant.yml
deleted file mode 100644
index 71c8d5f8da..0000000000
--- a/.forgejo/workflows/release-notes-assistant.yml
+++ /dev/null
@@ -1,50 +0,0 @@
-name: issue-labels
-
-on:
-  pull_request_target:
-    types:
-      - edited
-      - synchronize
-      - labeled
-
-jobs:
-  release-notes:
-    if: >
-      vars.ROLE == 'forgejo-coding' &&
-
-      secrets.RELEASE_NOTES_ASSISTANT_TOKEN != '' &&
-
-      github.event_name == 'pull_request_target' &&
-      contains(github.event.pull_request.labels.*.name, 'worth a release-note') &&
-      (
-        github.event.action == 'label_updated' ||
-        github.event.action == 'edited' ||
-        github.event.action == 'synchronized'
-      )
-
-    runs-on: docker
-    container:
-      image: 'code.forgejo.org/oci/node:20-bookworm'
-    steps:
-      - name: Debug info
-        run: |
-          cat <<'EOF'
-          ${{ toJSON(github) }}
-          EOF
-
-      - uses: https://code.forgejo.org/actions/checkout@v4
-
-      - uses: https://code.forgejo.org/actions/setup-go@v5
-        with:
-          go-version-file: "go.mod"
-          cache: false
-
-      - 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@v1.1.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 }}

From 1806db31d1c0b5229d8d3aac4d4c2a3f676bb822 Mon Sep 17 00:00:00 2001
From: Earl Warren <contact@earl-warren.org>
Date: Mon, 18 Nov 2024 19:43:35 +0100
Subject: [PATCH 2/2] chore(ci): merge jobs in issue-labels.yml in one workflow

Fixes: forgejo/forgejo#5999
---
 .forgejo/workflows/issue-labels.yml | 70 ++++++++++++++++-------------
 1 file changed, 38 insertions(+), 32 deletions(-)

diff --git a/.forgejo/workflows/issue-labels.yml b/.forgejo/workflows/issue-labels.yml
index 0424304b50..886d0640a0 100644
--- a/.forgejo/workflows/issue-labels.yml
+++ b/.forgejo/workflows/issue-labels.yml
@@ -1,14 +1,52 @@
 # Copyright 2024 The Forgejo Authors
 # SPDX-License-Identifier: MIT
 #
+# To modify the pull_request_target jobs:
+#
+#  - push it to the wip-ci-issue-labels branch on the forgejo repository
+#    otherwise it will not have access to the required secrets.
+#
+#  - once it works, open a pull request for the sake of keeping track
+#    of the change even if the PR won't run it because it will use
+#    whatever is in the default branch instead
+#
+#  - after it is merged, double check it works by changing the labels
+#    to trigger the job.
+#
 name: issue-labels
 
 on:
+  push:
+    branches:
+      - 'wip-ci-issue-labels'
+
   pull_request_target:
     types:
+      - closed
+      - edited
       - labeled
+      - synchronize
+
+  pull_request:
+    types:
+      - edited
+      - labeled
+      - opened
+      - synchronize
 
 jobs:
+  info:
+    if: vars.ROLE == 'forgejo-coding'
+    runs-on: docker
+    container:
+      image: code.forgejo.org/oci/node:20-bookworm
+    steps:
+      - name: Debug info
+        run: |
+          cat <<'EOF'
+          ${{ toJSON(github) }}
+          EOF
+
   end-to-end:
     if: >
       vars.ROLE == 'forgejo-coding' &&
@@ -51,18 +89,7 @@ jobs:
           destination-token: ${{ secrets.END_TO_END_CASCADING_PR_DESTINATION }}
           close-merge: true
           update: .forgejo/cascading-pr-end-to-end
-# Copyright 2024 The Forgejo Authors
-# SPDX-License-Identifier: MIT
-#
-name: issue-labels
 
-on:
-  pull_request_target:
-    types:
-      - closed
-      - labeled
-
-jobs:
   backporting:
     if: >
       vars.ROLE == 'forgejo-coding' &&
@@ -95,19 +122,7 @@ jobs:
           enable-err-notification: true
           git-user: forgejo-backport-action
           git-email: forgejo-backport-action@noreply.codeberg.org
-# Copyright 2024 The Forgejo Authors
-# SPDX-License-Identifier: MIT
 
-name: issue-labels
-
-on:
-  pull_request:
-    types:
-      - labeled
-      - edited
-      - opened
-
-jobs:
   merge-conditions:
     if: >
       vars.ROLE == 'forgejo-coding' &&
@@ -147,16 +162,7 @@ jobs:
           echo "Manual test label is set. The PR description needs to contain test steps introduced by a heading like:"
           echo "# Testing"
           exit 1
-name: issue-labels
 
-on:
-  pull_request_target:
-    types:
-      - edited
-      - synchronize
-      - labeled
-
-jobs:
   release-notes:
     if: >
       vars.ROLE == 'forgejo-coding' &&