Skip to content

Commit 1006132

Browse files
committed
Improve
1 parent a7b6b8c commit 1006132

File tree

1 file changed

+59
-9
lines changed

1 file changed

+59
-9
lines changed

.github/workflows/check-backport-labels.yml

Lines changed: 59 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,63 @@ jobs:
1414

1515
steps:
1616
- name: "Check backport label"
17-
if: "!contains(github.event.pull_request.labels.*.name, 'backport')"
1817
run: |
19-
echo "Please apply a backport label, or "skip-backport" if no backport is needed"
20-
echo "Current labels: ${{ toJSON(github.event.pull_request.labels.*.name) }}"
21-
echo "${{ contains(github.event.pull_request.labels.*.name, 'backport') }}"
22-
echo "${{ contains(github.event.pull_request.labels.*.name, 'skip-backport') }}"
23-
echo "${{ endsWith(github.event.pull_request.labels.*.name, 'backport') }}"
24-
echo "${{ startsWith(github.event.pull_request.labels.*.name, 'backport') }}"
25-
echo "${{ github.event.pull_request.labels.*.name == 'skip-backport' }}"
26-
exit 1
18+
json_pr_labels='${{ toJSON(github.event.pull_request.labels) }}'
19+
readarray -t pr_labels < <(echo "${json_pr_labels}" | jq -r -c '.[].name')
20+
21+
json_all_labels="$(gh label list --json name --search "backport" --limit 1000)"
22+
readarray -t all_labels < <(echo "${json_all_labels}" | jq -r -c '.[].name')
23+
24+
all_backport_labels=()
25+
floating_majors=()
26+
27+
backport_regex="^backport ([0-9])+\.([0-9]+|x)$"
28+
29+
echo "::group::Available Labels"
30+
31+
for label in "${all_labels[@]}"; do
32+
if [ "${label}" = "skip-backport" ]; then
33+
all_backport_labels+=("${label}")
34+
echo " - ${label}"
35+
continue
36+
fi
37+
38+
if [[ "${label}" =~ ${backport_regex} ]]; then
39+
major="${BASH_REMATCH[1]}"
40+
all_backport_labels+=("${label}")
41+
echo " - ${label}"
42+
43+
if [[ "${label}" == *x ]]; then
44+
floating_majors+=("${major}")
45+
fi
46+
fi
47+
done
48+
49+
echo "::endgroup::"
50+
51+
has_backport_label=false
52+
53+
echo "::group::Detected Labels"
54+
55+
for pr_label in "${pr_labels[@]}"; do
56+
for backport_label in "${all_backport_labels[@]}"; do
57+
if [ "${pr_label}" = "${backport_label}" ]; then
58+
has_backport_label=true
59+
echo " - ${pr_label}"
60+
fi
61+
done
62+
done
63+
64+
echo "::endgroup::"
65+
66+
if [ "${has_backport_label}" != true ]; then
67+
echo "::error::No backport label found."
68+
exit 1
69+
fi
70+
71+
has_floating_backport_label=false
72+
73+
for floating_major in "${floating_majors[@]}"; do
74+
75+
done
76+

0 commit comments

Comments
 (0)