@@ -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