name: Auto-regenerate docs after submodule update
on:
pull_request_target:
types: [opened, synchronize]
branches:
- main
paths:
- "django-styleguide/**"
# Triggers only for Dependabot PRs with submodule label
permissions:
contents: write
pull-requests: write
jobs:
regenerate-docs:
runs-on: ubuntu-latest
# Security: run only for Dependabot PRs
if: github.actor == 'dependabot[bot]' && contains(github.event.pull_request.labels.*.name, 'submodule')
steps:
- name: Checkout PR branch
uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.ref }}
token: ${{ secrets.GITHUB_TOKEN }}
submodules: recursive
fetch-depth: 0
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.11'
- name: Install uv
uses: astral-sh/setup-uv@v4
with:
version: "latest"
- name: Check if docs need regeneration
id: check_changes
run: |
# Check if submodule has changed
if git diff HEAD~1 --name-only | grep -q "django-styleguide"; then
echo "submodule_changed=true" >> $GITHUB_OUTPUT
echo "Submodule has been updated, docs regeneration needed"
else
echo "submodule_changed=false" >> $GITHUB_OUTPUT
echo "No submodule changes detected"
fi
- name: Regenerate documentation
if: steps.check_changes.outputs.submodule_changed == 'true'
run: |
echo "Starting documentation regeneration..."
# Run documentation generation script
if [ -f "django-styleguide/README.md" ]; then
echo "Found django-styleguide/README.md, generating docs..."
uv run python -m mcpdoc_split django-styleguide/README.md
echo "Documentation generation completed successfully"
else
echo "Error: django-styleguide/README.md not found"
exit 1
fi
- name: Check for changes in generated docs
id: check_docs
if: steps.check_changes.outputs.submodule_changed == 'true'
run: |
if git diff --quiet; then
echo "docs_changed=false" >> $GITHUB_OUTPUT
echo "No changes in generated documentation"
else
echo "docs_changed=true" >> $GITHUB_OUTPUT
echo "Documentation has been updated"
git status --porcelain
fi
- name: Commit and push changes
if: steps.check_changes.outputs.submodule_changed == 'true' && steps.check_docs.outputs.docs_changed == 'true'
run: |
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
git add docs/ llms.txt || true
git add README.md || true
if git diff --staged --quiet; then
echo "No staged changes to commit"
exit 0
fi
git commit -m "docs: auto-regenerate after submodule update
- Updated documentation from django-styleguide submodule
- Regenerated TOC and structure
- Auto-generated by GitHub Actions"
git push origin ${{ github.event.pull_request.head.ref }}
- name: Add comment to PR
if: steps.check_changes.outputs.submodule_changed == 'true' && steps.check_docs.outputs.docs_changed == 'true'
uses: actions/github-script@v7
with:
script: |
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: '🤖 **Auto-generated documentation update**\n\nThe documentation has been automatically regenerated based on the updated django-styleguide submodule.\n\nChanges include:\n- Updated TOC structure\n- Refreshed documentation content\n- Updated llms.txt file\n\nPlease review the changes before merging.'
});
- name: Add success label
if: steps.check_changes.outputs.submodule_changed == 'true'
uses: actions/github-script@v7
with:
script: |
github.rest.issues.addLabels({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
labels: ['docs-updated']
});