From c6c5f0788074bcc03c5b17bc81f49a04a204b1bd Mon Sep 17 00:00:00 2001 From: Martin Habovstiak Date: Sat, 20 Jan 2024 15:07:03 +0100 Subject: [PATCH] Add automated labeler job Rather than modifying the labels manually, which we often forget, we can label the PRs automatically. This will make it easier to search PRs. --- .github/labeler.yml | 13 +++++++++++ .github/workflows/manage-pr.yml | 26 ++++++++++++++++++++++ contrib/gen_label_config.sh | 39 +++++++++++++++++++++++++++++++++ 3 files changed, 78 insertions(+) create mode 100644 .github/labeler.yml create mode 100644 .github/workflows/manage-pr.yml create mode 100755 contrib/gen_label_config.sh diff --git a/.github/labeler.yml b/.github/labeler.yml new file mode 100644 index 00000000..986c15a0 --- /dev/null +++ b/.github/labeler.yml @@ -0,0 +1,13 @@ +ci: + - changed-files: + - any-glob-to-any-file: .github/** +test: + - changed-files: + - any-glob-to-any-file: fuzz/** + - any-glob-to-any-file: '*/tests/**' + - any-glob-to-any-file: 'dep_test' + - any-glob-to-any-file: 'contrib/test.sh' + - any-glob-to-any-file: '*/contrib/test.sh' +doc: + - changed-files: + - any-glob-to-any-file: '**/*.md' diff --git a/.github/workflows/manage-pr.yml b/.github/workflows/manage-pr.yml new file mode 100644 index 00000000..1ae25001 --- /dev/null +++ b/.github/workflows/manage-pr.yml @@ -0,0 +1,26 @@ +name: Manage PR +on: + - pull_request_target + +jobs: + labeler: + permissions: + contents: read + pull-requests: write + runs-on: ubuntu-latest + steps: + - name: Checkout master + uses: actions/checkout@v4 + with: + path: master + - name: Checkout merge commit + uses: actions/checkout@v4 + with: + path: merge + ref: "refs/pull/${{ github.event.number }}/merge" + - name: Generate label config + run: cd master && SCAN_DIR=../merge ./contrib/gen_label_config.sh + - name: Update labels + uses: actions/labeler@v5 + with: + configuration-path: master/.github/labeler.yml diff --git a/contrib/gen_label_config.sh b/contrib/gen_label_config.sh new file mode 100755 index 00000000..1f88145a --- /dev/null +++ b/contrib/gen_label_config.sh @@ -0,0 +1,39 @@ +#!/bin/bash + +set -e + +# Generates the label configuration using crates in the repository. +# The label configuration is appended to the labeler config file. + +config=.github/labeler.yml + +if [ -n "$SCAN_DIR" ]; +then + scan_dir="$SCAN_DIR" +else + scan_dir=. +fi + +if [ "$1" '!=' "--force" ] && ! git diff --exit-code "$config"; +then + echo "Error: $config is not committed." + echo "Refusing to overwrite it to prevent disaster." + echo "Run the script with --force to override this." + exit 1 +fi + +excluded_crates="fuzz|dep_test" + +CRATES="`cd "$scan_dir" && cargo metadata --no-deps --format-version 1 | jq -j -r '.packages | map(.manifest_path | rtrimstr("/Cargo.toml") | ltrimstr("'$PWD'/")) | join(" ")'`" + +for crate in $CRATES; +do + if echo "$crate" | grep -qE "$excluded_crates"; + then + continue + fi + + echo "C-$crate:" >> "$config" + echo " - changed-files:" >> "$config" + echo " - any-glob-to-any-file: $crate/**" >> "$config" +done