Skip to content

Filter Renovate and puppetsync PRs out of the triage-board intake (#97); move #98/#99 labelling to the org reconciler - #104

Open
silug wants to merge 3 commits into
mainfrom
pr-triage-intake
Open

Filter Renovate and puppetsync PRs out of the triage-board intake (#97); move #98/#99 labelling to the org reconciler#104
silug wants to merge 3 commits into
mainfrom
pr-triage-intake

Conversation

@silug

@silug silug commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

Closes #97. Addresses #98 and #99 together with simp/gha-workflows#12 — the labelling half of both issues lives there, not in this template, for the reason under Why #98 is not a per-repo step.

What changes here

  • add_new_issue_to_triage_project.yml template gains a job-level if: (Triage workflow should not auto-add Renovate and [puppetsync] PRs to the Org Triage board #97): PRs by renovate[bot] / dependabot[bot] and [puppetsync]-titled sync PRs are no longer added to the Org Triage board. Issues and every other PR still are — drive-by PRs from outside contributors are what the board exists to catch. The explicit event_name guard is used rather than relying on startsWith(null, …); the template documents that the title prefix is a convention set by each sync config's commit_message, not enforced. It also now carries the standard puppetsync NOTICE header (it was the only workflow template without one).
  • merge_github_workflows.project_types — new optional session setting for the merge stage (default unchanged: pupmod, pupmod_skeleton). A merge scoped to one shared template can now reach the rubygem and simp_unknown repos, which carry the same workflow, without a blanket apply_puppet_role (they are enforce-strategy, so an apply would rewrite their whole baseline). BoltSpec covers it.
  • Session config 20260903-triage-intake-filter.yaml (now latest.yaml): merge scoped to this one file across pupmod, pupmod_skeleton, rubygem and simp_unknown. The rubygem-simp-* repos had no puppetsync baseline before; the first fleet run produced exactly the expected single-file change on all six, so this shared workflow becomes the first piece of one (decided 2026-09-03). ensure_files lays the file down where it is missing.
  • merge_gha_workflows bug fix: ensure_files wrote the template without creating .github/workflows/, so a repo with no workflows at all (rubygem-simp-build-helpers) failed with ENOENT on the first fleet run. The task now mkdir_ps the parent; spec added and verified end to end on that clone.

Why #98 is not a per-repo step

#98 as filed keys on github.event.pull_request.author_association. In Actions event payloads that field reports CONTRIBUTOR for org members whose membership is private (flutter/flutter#101012, apache/arrow#34381); the reconciler hit the same thing via the API ("Trusting it made the mapping treat 29 org members as outside contributors"). 20 of simp's 32 members are private, so the per-repo step would have stuck a permanent community label on most of the team's PRs and issues. The reconciler already resolves membership from the org member list, so community and needs-attention are both applied there: simp/gha-workflows#12.

Verification

  • rspec: 232 examples green; BoltSpec merge-stage spec: 6 examples green (new project_types case included); actionlint passes on the template.
  • list_pipeline_stages dry run against the real config: install_gems → checkout → merge_github_workflows → git_commit_changes → ensure_github_fork → ensure_git_remote → git_push_to_remote → ensure_github_pr.
  • End-to-end on local clones of pupmod-simp-aide, rubygem-simp-cli, puppet-gpasswd: exactly one file changed per repo, byte-identical to the template — except aide, which correctly kept its Renovate-pinned uses: actions/add-to-project@v2.0.0.

Rollout

bolt plan run puppetsync repolist=github-org (config is latest.yaml). First fleet run (from e708205) opened 78 PRs — 71 pupmods, puppet-gpasswd, 6 rubygems — and failed on rubygem-simp-build-helpers (the mkdir_p bug above). All 78 swept: one commit, one file, byte-identical to the template except 9 that kept an existing Renovate-pinned uses ref. A re-run from the current head adds build-helpers and is otherwise a no-op.

🤖 Generated with Claude Code

)

add_new_issue_to_triage_project.yml gains a job-level `if:` so PRs opened
by renovate[bot] (and dependabot[bot], pre-emptively) and puppetsync's own
`[puppetsync]`-titled sync PRs stop landing on the Org Triage board.
Issues and every other PR are still added: drive-by PRs from outside
contributors are exactly what the board exists to catch. The template
documents that the title prefix is a convention set by each sync config's
commit_message, not something enforced.

The `community` / `needs-attention` labelling proposed in #98 and #99 is
deliberately NOT added here: the event payload's author_association
reports private org members as CONTRIBUTOR (20 of simp's 32 members are
private), so a per-repo step would permanently mislabel most of the
team's work. That lives in the org reconciler in simp/gha-workflows,
which resolves membership from the org member list.

The merge_github_workflows stage gains a session option,
merge_github_workflows.project_types (default unchanged: pupmod and
pupmod_skeleton), so a merge scoped to a template every project type
shares can reach the rubygem and simp_unknown repos without a blanket
apply_puppet_role. The 20260903-triage-intake-filter session config
uses it, with ensure_files so any in-scope repo missing the workflow
gets it. Verified end to end on local clones of pupmod-simp-aide (its
Renovate-pinned `uses` ref preserved), rubygem-simp-cli and
puppet-gpasswd: one file changed each, byte-identical to the template.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@silug silug changed the title Filter Renovate and [puppetsync] PRs out of the triage-board intake (#97); move #98/#99 labelling to the org reconciler Filter Renovate and puppetsync PRs out of the triage-board intake (#97); move #98/#99 labelling to the org reconciler Sep 3, 2026
silug and others added 2 commits September 3, 2026 15:37
…e the triage session to pupmods

The fleet run of 20260903-triage-intake-filter failed on
rubygem-simp-build-helpers: ensure_files writes the template for a path
that does not exist, but the task never created the directory, so a repo
with no .github/workflows/ at all died with ENOENT. mkdir_p the parent
first; spec added, and verified end to end on the build-helpers clone.

The same run also opened PRs against the other six rubygem-simp-* repos,
which have no puppetsync baseline yet and should not have been in scope.
The session config drops rubygem/simp_unknown from permitted_project_types
and stops widening merge_github_workflows.project_types; the option
itself stays (default unchanged) for whichever session establishes the
gem baseline.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The first fleet run produced exactly the expected single-file change on
all six rubygem-simp-* repos (one commit, byte-identical to the
template, rspec-puppet-facts keeping its Renovate pin), so this shared,
project-type-independent workflow becomes the first piece of a puppetsync
baseline for the gems rather than an accident to be reverted. Restore
rubygem and simp_unknown to permitted_project_types and the merge stage's
project_types; rubygem-simp-build-helpers picks up the file on the re-run
now that ensure_files creates .github/workflows/.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Triage workflow should not auto-add Renovate and [puppetsync] PRs to the Org Triage board

1 participant