<?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: Monde kim</title>
    <description>The latest articles on DEV Community by Monde kim (@rad1092).</description>
    <link>https://dev.to/rad1092</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3881867%2Fe2e02ace-0f34-4232-92a6-ac34ccc77f67.png</url>
      <title>DEV Community: Monde kim</title>
      <link>https://dev.to/rad1092</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rad1092"/>
    <language>en</language>
    <item>
      <title>Launching gh-dep-risk: a GitHub CLI extension for dependency PR review</title>
      <dc:creator>Monde kim</dc:creator>
      <pubDate>Thu, 16 Apr 2026 07:31:32 +0000</pubDate>
      <link>https://dev.to/rad1092/gh-dep-risk-a-github-cli-extension-for-npm-pr-dependency-risk-review-410j</link>
      <guid>https://dev.to/rad1092/gh-dep-risk-a-github-cli-extension-for-npm-pr-dependency-risk-review-410j</guid>
      <description>&lt;p&gt;I built &lt;code&gt;gh-dep-risk&lt;/code&gt; to make pull request dependency review easier to run on demand.&lt;/p&gt;

&lt;p&gt;It is a precompiled GitHub CLI extension. Reviewers can run it from the terminal, in CI, or from a manual GitHub Actions workflow without operating a server, webhook receiver, queue, database, dashboard, or GitHub App.&lt;/p&gt;

&lt;p&gt;Repository: &lt;a href="https://github.com/rad1092/gh-dep-risk" rel="noopener noreferrer"&gt;https://github.com/rad1092/gh-dep-risk&lt;/a&gt;&lt;br&gt;
Latest release: &lt;a href="https://github.com/rad1092/gh-dep-risk/releases/latest" rel="noopener noreferrer"&gt;https://github.com/rad1092/gh-dep-risk/releases/latest&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Why a CLI extension
&lt;/h2&gt;

&lt;p&gt;Dependency review often needs a quick answer during code review:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;what changed&lt;/li&gt;
&lt;li&gt;why it might be risky&lt;/li&gt;
&lt;li&gt;what the reviewer should check next&lt;/li&gt;
&lt;li&gt;whether the PR should block at a chosen risk level&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I wanted that flow to stay close to GitHub and &lt;code&gt;gh&lt;/code&gt;, rather than adding another always-on service.&lt;/p&gt;
&lt;h2&gt;
  
  
  What it does
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;gh-dep-risk&lt;/code&gt; analyzes a pull request and produces a dependency risk summary.&lt;/p&gt;

&lt;p&gt;It can output:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;human-readable terminal output&lt;/li&gt;
&lt;li&gt;stable JSON&lt;/li&gt;
&lt;li&gt;markdown for PR comments&lt;/li&gt;
&lt;li&gt;a reusable output bundle for workflow artifacts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It can also upsert one marker comment on a PR timeline with &lt;code&gt;--comment&lt;/code&gt;, and it can return a blocking exit code with &lt;code&gt;--fail-level&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Current support
&lt;/h2&gt;

&lt;p&gt;The current release focuses on JavaScript package managers for local fallback analysis:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;npm: &lt;code&gt;package.json&lt;/code&gt; + &lt;code&gt;package-lock.json&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;pnpm: &lt;code&gt;package.json&lt;/code&gt; + &lt;code&gt;pnpm-lock.yaml&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Yarn: &lt;code&gt;package.json&lt;/code&gt; + &lt;code&gt;yarn.lock&lt;/code&gt; with narrow Yarn Classic support&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When GitHub Dependency Review provides data, the report can also surface dependency changes from other ecosystems. Local fallback support outside npm, pnpm, and Yarn is intentionally not claimed in this release.&lt;/p&gt;

&lt;p&gt;That distinction matters. I do not want the tool to pretend it can analyze an ecosystem locally if it cannot do that honestly from repository files.&lt;/p&gt;
&lt;h2&gt;
  
  
  Example commands
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;gh extension &lt;span class="nb"&gt;install &lt;/span&gt;rad1092/gh-dep-risk

gh dep-risk &lt;span class="nb"&gt;pr &lt;/span&gt;123
gh dep-risk &lt;span class="nb"&gt;pr &lt;/span&gt;https://github.com/OWNER/REPO/pull/123
gh dep-risk &lt;span class="nb"&gt;pr &lt;/span&gt;123 &lt;span class="nt"&gt;--format&lt;/span&gt; json
gh dep-risk &lt;span class="nb"&gt;pr &lt;/span&gt;123 &lt;span class="nt"&gt;--comment&lt;/span&gt;
gh dep-risk &lt;span class="nb"&gt;pr &lt;/span&gt;123 &lt;span class="nt"&gt;--fail-level&lt;/span&gt; high
gh dep-risk &lt;span class="nb"&gt;pr &lt;/span&gt;123 &lt;span class="nt"&gt;--bundle-dir&lt;/span&gt; ./out
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;For monorepos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;gh dep-risk &lt;span class="nb"&gt;pr &lt;/span&gt;123 &lt;span class="nt"&gt;--list-targets&lt;/span&gt;
gh dep-risk &lt;span class="nb"&gt;pr &lt;/span&gt;123 &lt;span class="nt"&gt;--path&lt;/span&gt; apps/web
gh dep-risk &lt;span class="nb"&gt;pr &lt;/span&gt;123 &lt;span class="nt"&gt;--path&lt;/span&gt; package.json &lt;span class="nt"&gt;--comment&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Config file
&lt;/h2&gt;

&lt;p&gt;Teams can put defaults in &lt;code&gt;.gh-dep-risk.yml&lt;/code&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="na"&gt;lang&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;en&lt;/span&gt;
&lt;span class="na"&gt;fail_level&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;high&lt;/span&gt;
&lt;span class="na"&gt;comment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;apps/web&lt;/span&gt;
&lt;span class="na"&gt;no_registry&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;CLI flags still win over config values, so reviewers can override behavior per run.&lt;/p&gt;

&lt;h2&gt;
  
  
  Comment behavior
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;--comment&lt;/code&gt; uses PR timeline issue comments, not review comments.&lt;/p&gt;

&lt;p&gt;The marker is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- gh-dep-risk --&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The tool maintains exactly one marker comment owned by the authenticated user. It does not edit or delete another author's marker comment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Workflow mode
&lt;/h2&gt;

&lt;p&gt;The repository includes a manual GitHub Actions workflow for no-local-install usage. It builds the CLI, runs the analysis once, writes a job summary, and uploads the human, JSON, markdown, and metadata bundle as artifacts.&lt;/p&gt;

&lt;p&gt;This is still the same CLI engine. The workflow is a thin wrapper, not a server.&lt;/p&gt;

&lt;h2&gt;
  
  
  Design boundary
&lt;/h2&gt;

&lt;p&gt;The project is intentionally small:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;one Go binary&lt;/li&gt;
&lt;li&gt;GitHub CLI extension shape&lt;/li&gt;
&lt;li&gt;on-demand execution&lt;/li&gt;
&lt;li&gt;no server or dashboard&lt;/li&gt;
&lt;li&gt;no broad managed-service direction&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is a practical reviewer tool that is easy to install, easy to run, and honest about what it can and cannot analyze locally.&lt;/p&gt;

</description>
      <category>github</category>
      <category>cli</category>
      <category>security</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
