From b4e1daad3bcd434cf09a42fd0014c5d239c7ceed Mon Sep 17 00:00:00 2001 From: awwpotato Date: Wed, 30 Jul 2025 07:12:40 -0700 Subject: [PATCH] ci: request subsystem maintainers review (#1053) Link: https://github.com/nix-community/stylix/pull/1053 Co-authored-by: NAHO <90870942+trueNAHO@users.noreply.github.com> Reviewed-by: Daniel Thwaites Reviewed-by: Matt Sturgeon Reviewed-by: NAHO <90870942+trueNAHO@users.noreply.github.com> --- .github/workflows/request-reviewers.yml | 81 +++++++++++++++++++++++++ flake/dev/default.nix | 3 +- flake/dev/subsystem-maintainers.nix | 17 ++++++ flake/propagated-packages.nix | 1 + 4 files changed, 101 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/request-reviewers.yml create mode 100644 flake/dev/subsystem-maintainers.nix diff --git a/.github/workflows/request-reviewers.yml b/.github/workflows/request-reviewers.yml new file mode 100644 index 00000000..98d2387e --- /dev/null +++ b/.github/workflows/request-reviewers.yml @@ -0,0 +1,81 @@ +--- +name: Request Reviewers + +on: + pull_request_target: + types: [opened, ready_for_review, reopened, synchronize] + paths: + - 'modules/' + +jobs: + request-reviewers: + runs-on: ubuntu-24.04 + if: vars.APP_ID + steps: + - uses: actions/checkout@v4.2.2 + with: + ref: ${{ github.base_ref }} + + - uses: cachix/install-nix-action@v31 + + - uses: cachix/cachix-action@v16 + with: + name: nix-community + authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}' + continue-on-error: true + + - uses: actions/create-github-app-token@v2 + id: app-token + with: + app-id: ${{ vars.APP_ID }} + private-key: ${{ secrets.APP_PRIVATE_KEY }} + permission-contents: read + permission-pull-requests: write + + - run: nix build .#subsystem-maintainers + + - id: get-reviewers + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + MAX_REVIEWERS: 5 + PR_NUMBER: ${{ github.event.pull_request.number }} + run: | + printf \ + 'reviewers=%s\n' \ + "$( + gh pr diff --name-only "$PR_NUMBER" | + jq \ + --argjson max_reviewers "$MAX_REVIEWERS" \ + --raw-input \ + --raw-output \ + --slurp \ + --slurpfile maintainers result ' + ($maintainers[0] | keys_unsorted) as $subsystems | + split("\n") as $changed_files | + [ + $changed_files[] as $changed_file | + ( + $maintainers[0][ + $subsystems[] | + select( + . as $subsystem | + $changed_file | + startswith($subsystem) + ) + ] + )[] + ] | + unique | + if length <= $max_reviewers then + . | join(",") + else + "" + end + ' + )" \ + >>"$GITHUB_OUTPUT" + + - uses: AveryCameronUofR/add-reviewer-gh-action@1.0.3 + with: + token: ${{ secrets.GITHUB_TOKEN }} + reviewers: ${{ steps.get-reviewers.outputs.reviewers }} diff --git a/flake/dev/default.nix b/flake/dev/default.nix index 953bcdd2..18075861 100644 --- a/flake/dev/default.nix +++ b/flake/dev/default.nix @@ -4,7 +4,8 @@ ./dev-shell.nix ./packages.nix ./pre-commit.nix - ./treefmt.nix ./public-and-dev-version-consistency.nix + ./subsystem-maintainers.nix + ./treefmt.nix ]; } diff --git a/flake/dev/subsystem-maintainers.nix b/flake/dev/subsystem-maintainers.nix new file mode 100644 index 00000000..d978f386 --- /dev/null +++ b/flake/dev/subsystem-maintainers.nix @@ -0,0 +1,17 @@ +{ lib, ... }: +{ + perSystem = + { pkgs, ... }: + { + packages.subsystem-maintainers = pkgs.writeText "subsystem-maintainers" ( + lib.pipe ../../stylix/meta.nix [ + (lib.flip pkgs.callPackage { }) + (lib.mapAttrs ( + _: meta: map (maintainer: maintainer.github) (meta.maintainers or [ ]) + )) + (lib.mapAttrs' (name: lib.nameValuePair "modules/${name}/")) + builtins.toJSON + ] + ); + }; +} diff --git a/flake/propagated-packages.nix b/flake/propagated-packages.nix index 215458de..ebc2a75b 100644 --- a/flake/propagated-packages.nix +++ b/flake/propagated-packages.nix @@ -24,6 +24,7 @@ { inherit (config.partitions.dev.module.flake.packages.${system}) all-maintainers + subsystem-maintainers ; } (lib.mkIf pkgs.stdenv.hostPlatform.isLinux (