diff --git a/.github/workflows/pr-labels.yaml b/.github/workflows/pr-labels.yaml new file mode 100644 index 0000000000..268536eeeb --- /dev/null +++ b/.github/workflows/pr-labels.yaml @@ -0,0 +1,24 @@ +name: PR labels + +on: [pull_request] + + +jobs: + pr-label: + runs-on: ubuntu-latest + name: PR label + steps: + - uses: actions/checkout@v2 + with: + fetch-depth: 0 + - id: pr_labels + run: script/pr-labels ${{ github.event.pull_request.base.sha }} ${{ github.event.pull_request.head.sha }} + - uses: octokit/request-action@v2.0.7 + if: ${{ steps.pr_labels.outputs.labels != '[""]' }} + with: + route: POST /repos/:repository/issues/:number/labels + number: ${{ github.event.number }} + repository: ${{ github.repository }} + labels: ${{ steps.pr_labels.outputs.labels }} + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/script/pr-labels b/script/pr-labels new file mode 100755 index 0000000000..ef5eb8e57f --- /dev/null +++ b/script/pr-labels @@ -0,0 +1,29 @@ +#!/bin/bash + +components=() +for c_diff in $(git diff ${1}..${2} --name-only esphome/components); do + base=${c_diff#esphome/components/} + component=`dirname ${base}` + + if [[ "${component}" == "." ]]; then + component=${platform} + fi + + if [[ ! "${components[@]}" =~ "${component}" ]]; then + components+=($component) + fi +done + +labels=() + +echo "Components:" +for component in ${components[@]}; do + echo " ${component}" + labels+=("component: $component") +done + +echo "Labels: ${labels[@]}" + +output=$(printf '%s\n' "${labels[@]}" | jq -R . | jq -c -s .) + +echo "::set-output name=labels::${output}"