name: Update Community PRs After Merge on: push: branches: [main] paths: - 'community/**' - 'schemas/community_submission.v1.schema.json' permissions: contents: write pull-requests: write jobs: update-open-prs: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 0 token: ${{ secrets.GITHUB_TOKEN }} - name: Setup Python uses: actions/setup-python@v5 with: python-version: "3.12" - name: Install dependencies run: pip install jsonschema - name: Find and update open community PRs env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | # Get list of open community PRs prs=$(gh pr list --label community --state open --json number,headRefName --jq '.[] | "\(.number) \(.headRefName)"') if [ -z "$prs" ]; then echo "No open community PRs found" exit 0 fi echo "$prs" | while read pr_number branch_name; do echo "Processing PR #$pr_number (branch: $branch_name)" # Checkout PR branch git fetch origin "$branch_name" git checkout "$branch_name" git config user.name "github-actions[bot]" git config user.email "github-actions[bot]@users.noreply.github.com" # Get the community submission file(s) and schema from this branch community_files=$(git diff --name-only origin/main...HEAD -- 'community/' 'schemas/') if [ -z "$community_files" ]; then echo " No community/schema files found in PR #$pr_number, skipping" git checkout main continue fi echo " Files to preserve: $community_files" # Save the community files content mkdir -p /tmp/pr_files for file in $community_files; do if [ -f "$file" ]; then mkdir -p "/tmp/pr_files/$(dirname "$file")" cp "$file" "/tmp/pr_files/$file" fi done # Reset branch to main (clean slate) git reset --hard origin/main # Restore the community files for file in $community_files; do if [ -f "/tmp/pr_files/$file" ]; then mkdir -p "$(dirname "$file")" cp "/tmp/pr_files/$file" "$file" fi done rm -rf /tmp/pr_files # Regenerate schema with current main + this submission's tags python -m src.contributions.regenerate_pr_schema || true # Stage and commit all changes git add community/ schemas/ if ! git diff --cached --quiet; then git commit -m "Community submission (rebased on main)" git push --force origin "$branch_name" echo " Rebased PR #$pr_number onto main" else echo " No changes needed for PR #$pr_number" fi git checkout main done