From 5da7f07fbea25a83a15f13241039f5fedbda51de Mon Sep 17 00:00:00 2001
From: Otto Richter <git@otto.splvs.net>
Date: Thu, 31 Oct 2024 14:47:41 +0100
Subject: [PATCH] chore(ci): Enforce test label with CI check

- test label needs to be set and either present, not-needed or manual
- if manual test label is set, PR description needs to contain a heading
  (defined by '#') starting with "Test" (e.g. "Test instructions",
"Testing" etc)
---
 .forgejo/workflows/merge-requirements.yml | 44 +++++++++++++++++++++++
 1 file changed, 44 insertions(+)
 create mode 100644 .forgejo/workflows/merge-requirements.yml

diff --git a/.forgejo/workflows/merge-requirements.yml b/.forgejo/workflows/merge-requirements.yml
new file mode 100644
index 0000000000..43defb1322
--- /dev/null
+++ b/.forgejo/workflows/merge-requirements.yml
@@ -0,0 +1,44 @@
+# Copyright 2024 The Forgejo Authors
+# SPDX-License-Identifier: MIT
+
+name: requirements
+
+on:
+  pull_request:
+    types:
+      - labeled
+      - edited
+      - opened
+      - synchronize
+
+jobs:
+  testing:
+    runs-on: docker
+    container:
+      image: 'code.forgejo.org/oci/node:20-bookworm'
+    steps:
+      - name: Debug output
+        run: |
+          cat <<'EOF'
+          ${{ toJSON(github.event.pull_request) }}
+          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