We want to update the master list for RFC39 invites on master after a change is merged in. Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
156 lines
6.1 KiB
YAML
156 lines
6.1 KiB
YAML
name: Update maintainers list
|
||
on:
|
||
push:
|
||
branches: ["master"]
|
||
paths: ["modules/lib/maintainers.nix"]
|
||
schedule:
|
||
# Update every Monday at 9 AM UTC
|
||
- cron: "0 9 * * 1"
|
||
workflow_dispatch:
|
||
inputs:
|
||
create_pr:
|
||
description: 'Create PR even if no changes'
|
||
required: false
|
||
default: false
|
||
type: boolean
|
||
jobs:
|
||
update-maintainers:
|
||
runs-on: ubuntu-latest
|
||
if: github.repository_owner == 'nix-community' || github.event_name == 'workflow_dispatch'
|
||
steps:
|
||
- name: Create GitHub App token
|
||
uses: actions/create-github-app-token@v2
|
||
if: vars.CI_APP_ID
|
||
id: app-token
|
||
with:
|
||
app-id: ${{ vars.CI_APP_ID }}
|
||
private-key: ${{ secrets.CI_APP_PRIVATE_KEY }}
|
||
- name: Get GitHub App user info
|
||
id: user-info
|
||
if: vars.CI_APP_ID
|
||
env:
|
||
GH_TOKEN: ${{ steps.app-token.outputs.token }}
|
||
slug: ${{ steps.app-token.outputs.app-slug }}
|
||
run: |
|
||
name="$slug[bot]"
|
||
id=$(gh api "/users/$name" --jq .id)
|
||
{
|
||
echo "id=$id"
|
||
echo "name=$name"
|
||
echo "email=$id+$name@users.noreply.github.com"
|
||
} >> "$GITHUB_OUTPUT"
|
||
- name: Checkout repository
|
||
uses: actions/checkout@v4
|
||
with:
|
||
token: ${{ steps.app-token.outputs.token || secrets.GITHUB_TOKEN }}
|
||
- name: Get Nixpkgs revision from flake.lock
|
||
id: get-nixpkgs
|
||
run: |
|
||
echo "rev=$(jq -r '.nodes.nixpkgs.locked.rev' flake.lock)" >> "$GITHUB_OUTPUT"
|
||
- name: Install Nix
|
||
uses: cachix/install-nix-action@v31
|
||
with:
|
||
nix_path: nixpkgs=https://github.com/NixOS/nixpkgs/archive/${{ steps.get-nixpkgs.outputs.rev }}.tar.gz
|
||
- name: Setup Git
|
||
run: |
|
||
git config user.name "${{ steps.user-info.outputs.name }}"
|
||
git config user.email "${{ steps.user-info.outputs.email }}"
|
||
- name: Generate updated maintainers list
|
||
run: |
|
||
echo "📋 Generating updated all-maintainers.nix..."
|
||
./lib/python/generate-all-maintainers.py
|
||
- name: Check for changes
|
||
id: check-changes
|
||
run: |
|
||
if git diff --quiet all-maintainers.nix; then
|
||
echo "No changes to all-maintainers.nix"
|
||
echo "has_changes=false" >> "$GITHUB_OUTPUT"
|
||
else
|
||
echo "Changes detected in all-maintainers.nix"
|
||
echo "has_changes=true" >> "$GITHUB_OUTPUT"
|
||
# Get change statistics
|
||
added=$(git diff --numstat all-maintainers.nix | cut -f1)
|
||
removed=$(git diff --numstat all-maintainers.nix | cut -f2)
|
||
echo "changes_summary=+$added -$removed lines" >> "$GITHUB_OUTPUT"
|
||
fi
|
||
- name: Validate generated file
|
||
if: steps.check-changes.outputs.has_changes == 'true'
|
||
run: |
|
||
echo "🔍 Validating generated all-maintainers.nix..."
|
||
if nix eval --file ./all-maintainers.nix --json > /dev/null; then
|
||
echo "✅ Generated file has valid Nix syntax"
|
||
else
|
||
echo "❌ Generated file has invalid Nix syntax"
|
||
exit 1
|
||
fi
|
||
- name: Create Pull Request
|
||
if: steps.check-changes.outputs.has_changes == 'true' || github.event.inputs.create_pr == 'true'
|
||
env:
|
||
GH_TOKEN: ${{ steps.app-token.outputs.token || secrets.GITHUB_TOKEN }}
|
||
title: "maintainers: update all-maintainers.nix"
|
||
commit_body: |
|
||
Automated update of the master maintainers list combining:
|
||
- Home Manager specific maintainers from modules/lib/maintainers.nix
|
||
- Nixpkgs maintainers referenced in Home Manager modules
|
||
|
||
Changes: ${{ steps.check-changes.outputs.changes_summary || 'No content changes' }}
|
||
|
||
Generated by: lib/python/generate-all-maintainers.py
|
||
pr_body: |
|
||
## 📋 Summary
|
||
|
||
This PR updates the master maintainers list (`all-maintainers.nix`) which combines:
|
||
- **Home Manager specific maintainers** from `modules/lib/maintainers.nix`
|
||
- **Nixpkgs maintainers** referenced in Home Manager modules
|
||
|
||
## 🔄 Changes
|
||
|
||
**Statistics:** ${{ steps.check-changes.outputs.changes_summary || 'No content changes (format/comment updates only)' }}
|
||
|
||
The updated list includes all maintainers needed for review assignments across the Home Manager project.
|
||
|
||
## 🤖 Automation
|
||
|
||
- **Generated by:** `lib/python/generate-all-maintainers.sh`
|
||
- **Trigger:** ${{ github.event_name == 'schedule' && 'Scheduled weekly update' || 'Manual workflow dispatch' }}
|
||
- **Validation:** File syntax verified with `nix eval`
|
||
|
||
## 📚 Usage
|
||
|
||
This file can be imported and used for maintainer lookups:
|
||
```nix
|
||
let allMaintainers = import ./all-maintainers.nix; in
|
||
# Access any maintainer by name: allMaintainers.username
|
||
```
|
||
|
||
---
|
||
🤖 *This PR was automatically created by the [update-maintainers workflow](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }})*
|
||
run: |
|
||
# Create a new branch for the update
|
||
branch_name="maintainers/update-$(date +%Y%m%d%H%M%S)"
|
||
git checkout -b "$branch_name"
|
||
|
||
# Commit the changes
|
||
git add all-maintainers.nix
|
||
git commit -m "$title" -m "$commit_body"
|
||
|
||
# Push the branch
|
||
git push origin "$branch_name"
|
||
|
||
# Create the pull request
|
||
gh pr create \
|
||
--title "$title" \
|
||
--body "$pr_body" \
|
||
--label "dependencies" \
|
||
--label "maintainers"
|
||
- name: Summary
|
||
env:
|
||
has_changes: ${{ steps.check-changes.outputs.has_changes }}
|
||
changes: ${{ steps.check-changes.outputs.changes_summary }}
|
||
run: |
|
||
if [[ "$has_changes" == "true" ]]; then
|
||
echo "✅ Successfully created PR with maintainer updates"
|
||
echo "📊 Changes: $changes"
|
||
else
|
||
echo "ℹ️ No changes detected - maintainers list is up to date"
|
||
fi
|