Add workflow to enforce labels on PRs #15
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Check PR Labels | |
on: | |
pull_request: | |
types: [opened, labeled, unlabeled, synchronize] | |
jobs: | |
check-label: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v2 | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: "3.12" | |
cache: "pip" | |
- name: Install yq | |
run: | | |
pip install yq | |
- name: Get required labels from release.yml | |
id: get-required-labels | |
run: | | |
labels=() | |
for label in $(yq -r '.changelog.categories[] | select(.title != "Uncategorized") | .labels[]' .github/release.yml); do | |
labels+=("$label") | |
done | |
labels_string=$(IFS=, ; echo "${labels[*]}") | |
echo "Required labels: $labels_string" | |
echo "required_labels=$labels_string" >> $GITHUB_OUTPUT | |
- name: Get PR labels | |
id: get-pr-labels | |
run: | | |
labels=() | |
for label in $(jq -r '.pull_request.labels[].name' "$GITHUB_EVENT_PATH"); do | |
labels+=("$label") | |
done | |
labels_string=$(IFS=, ; echo "${labels[*]}") | |
echo "PR labels: $labels_string" | |
echo "labels=$labels_string" >> $GITHUB_OUTPUT | |
- name: Check for specific labels | |
id: check-label | |
run: | | |
required_labels="${{ steps.get-required-labels.outputs.required_labels }}" | |
pr_labels="${{ steps.get-pr-labels.outputs.labels }}" | |
IFS=',' read -r -a required_labels_array <<< "$required_labels" | |
IFS=',' read -r -a pr_labels_array <<< "$pr_labels" | |
found=false | |
for required_label in "${required_labels_array[@]}"; do | |
for pr_label in "${pr_labels_array[@]}"; do | |
if [[ "$required_label" == "$pr_label" ]]; then | |
found=true | |
break 2 | |
fi | |
done | |
done | |
echo "label_exists=$found" >> $GITHUB_OUTPUT | |
- name: Fail if no required labels are found | |
if: steps.check-label.outputs.label_exists == 'false' | |
run: | | |
echo "None of the required labels are applied to the PR." | |
exit 1 |