<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Unite and Create For Life</title>
    <description>The latest articles on DEV Community by Unite and Create For Life (@unite_andcreateforlife).</description>
    <link>https://dev.to/unite_andcreateforlife</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4144913%2F86f18022-b412-402c-be3b-87fdde91ef26.png</url>
      <title>DEV Community: Unite and Create For Life</title>
      <link>https://dev.to/unite_andcreateforlife</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/unite_andcreateforlife"/>
    <language>en</language>
    <item>
      <title>What GitHub's pull_request_target changes break in the 1,000 most-starred repositories</title>
      <dc:creator>Unite and Create For Life</dc:creator>
      <pubDate>Sat, 26 Sep 2026 22:53:47 +0000</pubDate>
      <link>https://dev.to/unite_andcreateforlife/what-githubs-pullrequesttarget-changes-break-in-the-1000-most-starred-repositories-1g0m</link>
      <guid>https://dev.to/unite_andcreateforlife/what-githubs-pullrequesttarget-changes-break-in-the-1000-most-starred-repositories-1g0m</guid>
      <description>&lt;p&gt;GitHub is changing how &lt;code&gt;pull_request_target&lt;/code&gt; works this year. Two dated changes affect every public repository that uses the trigger, so I built a small free checker, &lt;strong&gt;&lt;a href="https://github.com/UniteAndCreateForLife/prt-check" rel="noopener noreferrer"&gt;prt-check&lt;/a&gt;&lt;/strong&gt;, with my AI engineering system (HAL), and ran it over the 1,000 most-starred repositories on GitHub.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check your own repository in one step:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v4&lt;/span&gt;
&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;UniteAndCreateForLife/prt-check@v1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or run &lt;code&gt;python prt_check.py&lt;/code&gt; locally (no dependencies).&lt;/p&gt;

&lt;p&gt;The two changes: since 2026-07-20, &lt;code&gt;actions/checkout&lt;/code&gt; refuses to check out fork pull request code in &lt;code&gt;pull_request_target&lt;/code&gt; and &lt;code&gt;workflow_run&lt;/code&gt; workflows unless you opt in (&lt;a href="https://github.blog/changelog/2026-06-18-safer-pull_request_target-defaults-for-github-actions-checkout/" rel="noopener noreferrer"&gt;changelog&lt;/a&gt;). From 2026-11-02, GitHub blocks &lt;code&gt;pull_request_target&lt;/code&gt; on public repositories that have no Actions policy allowing it (&lt;a href="https://github.blog/changelog/2026-09-17-workflow-execution-protections-in-github-actions-generally-available/" rel="noopener noreferrer"&gt;changelog&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Scanned 2026-09-26, 37 days before GitHub's default block on 2026-11-02, with &lt;a href="https://github.com/UniteAndCreateForLife/prt-check" rel="noopener noreferrer"&gt;prt-check&lt;/a&gt;. Aggregate numbers only: this report names no repository.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The numbers
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;269 of 1,000 (26.9%)&lt;/strong&gt; run at least one workflow on &lt;code&gt;pull_request_target&lt;/code&gt; (540 workflow files). Unless their maintainers allow the trigger in an Actions policy, those workflows stop running on 2026-11-02.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;9 (0.9%)&lt;/strong&gt; check out fork pull request code in a privileged workflow, with an &lt;code&gt;actions/checkout&lt;/code&gt; that has the new guard and no condition that keeps forks out. Since 2026-07-20 the guard refuses those checkouts, so the steps fail for pull requests from forks. Label-gated ones fail when the label is added.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;3&lt;/strong&gt; check out fork code in a privileged workflow with &lt;code&gt;actions/checkout&lt;/code&gt; pinned to a version or commit from before the guard. The guard doesn't apply to them, so the fork's code is checked out where the workflow's token and secrets are. They are the most urgent to fix, and this report does not name them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;4&lt;/strong&gt; opted in with &lt;code&gt;allow-unsafe-pr-checkout: true&lt;/code&gt;: a deliberate decision, safe only if no later step executes the fork's files.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;9&lt;/strong&gt; fetch pull request code with &lt;code&gt;git fetch ...pull/...&lt;/code&gt; or &lt;code&gt;gh pr checkout&lt;/code&gt; in a privileged workflow. That path bypasses the new guard in &lt;code&gt;actions/checkout&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;8&lt;/strong&gt; run an AI or review action on &lt;code&gt;pull_request_target&lt;/code&gt;. Those reviewers go quiet on 2026-11-02 unless the trigger is allowed.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What runs on &lt;code&gt;pull_request_target&lt;/code&gt; today
&lt;/h2&gt;

&lt;p&gt;The actions used most often in these workflows, by the number of repositories that use them there:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;Repositories&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;actions/github-script&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;125&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;actions/labeler&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;actions/create-github-app-token&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;25&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;actions/setup-node&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;22&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;actions/setup-python&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;amannn/action-semantic-pull-request&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;13&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;eps1lon/actions-label-merge-conflict&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;actions/upload-artifact&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;contributor-assistant/github-action&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;step-security/harden-runner&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;dorny/paths-filter&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;actions/download-artifact&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;AI and review actions on the trigger:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;Repositories&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;anthropics/claude-code-action&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;presubmit/ai-reviewer&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;anthropics/claude-code-base-action&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openai/codex-action&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Method
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Selection: the 1,000 most-starred public, non-fork, non-archived repositories, from GitHub's repository search on 2026-09-26. 809 of them have workflow files (9,328 files in total). 0 could not be read.&lt;/li&gt;
&lt;li&gt;Only &lt;code&gt;.github/workflows/*.yml&lt;/code&gt; and &lt;code&gt;*.yaml&lt;/code&gt; on the default branch were read, through the GitHub API and raw.githubusercontent.com. No workflow was run, and nothing was written anywhere.&lt;/li&gt;
&lt;li&gt;Each file went through &lt;code&gt;prt_check.py&lt;/code&gt;, which reads YAML line by line. &lt;a href="https://github.com/UniteAndCreateForLife/prt-check#what-it-reports" rel="noopener noreferrer"&gt;README&lt;/a&gt; lists the codes, and the tests show the layouts it understands.&lt;/li&gt;
&lt;li&gt;Every repository behind the second and third numbers was reviewed by hand, and the checker was corrected wherever the review found it wrong: job conditions, Dependabot-only jobs, &lt;code&gt;workflow_run&lt;/code&gt; upstreams and branch filters, and commit pins resolved to exact &lt;code&gt;actions/checkout&lt;/code&gt; releases.&lt;/li&gt;
&lt;li&gt;Actions policies (repository, organization or enterprise) are not visible from outside, so some of these repositories may already allow &lt;code&gt;pull_request_target&lt;/code&gt; and keep running it after 2026-11-02. The numbers count workflows that depend on the trigger, not workflows that will certainly stop.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What to do
&lt;/h2&gt;

&lt;p&gt;Run &lt;code&gt;prt-check&lt;/code&gt; on your repository (Action or one command), then follow the three fixes in the &lt;a href="https://github.com/UniteAndCreateForLife/prt-check#how-to-fix" rel="noopener noreferrer"&gt;README&lt;/a&gt;: switch to &lt;code&gt;pull_request&lt;/code&gt;, split into &lt;code&gt;pull_request&lt;/code&gt; + &lt;code&gt;workflow_run&lt;/code&gt;, or keep the trigger deliberately with an Actions policy.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Source code, tests and the full method: &lt;a href="https://github.com/UniteAndCreateForLife/prt-check" rel="noopener noreferrer"&gt;https://github.com/UniteAndCreateForLife/prt-check&lt;/a&gt;. If you hit a false positive, open an issue and I'll fix it.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>github</category>
      <category>security</category>
      <category>devops</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
