惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

G
Google Developers Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
量子位
C
Check Point Blog
B
Blog RSS Feed
Y
Y Combinator Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
A
About on SuperTechFans
Microsoft Azure Blog
Microsoft Azure Blog
博客园 - 聂微东
阮一峰的网络日志
阮一峰的网络日志
人人都是产品经理
人人都是产品经理
小众软件
小众软件
Last Week in AI
Last Week in AI
博客园 - 【当耐特】
GbyAI
GbyAI
The Cloudflare Blog
博客园 - 叶小钗
S
SegmentFault 最新的问题
博客园 - Franky
Engineering at Meta
Engineering at Meta
F
Fortinet All Blogs
B
Blog
Jina AI
Jina AI

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant
Add Trust Scoring to Your CI Pipeline in 5 Minutes
Pico · 2026-05-08 · via DEV Community

Pico

Most supply chain attacks are not zero-days. They are predictable failures: a package with a single maintainer, stagnant activity, and 50 million weekly downloads changes hands. npm audit shows zero issues — because there is no CVE yet.

proof-of-commitment scores dependencies on behavioral signals: maintainer count, download trends, maintenance activity, historical incidents. Two ways to add it to CI. Pick one.

Option 1: GitHub Action (Recommended)

Add a new workflow file to your repo:

# .github/workflows/supply-chain-audit.yml
name: Supply Chain Audit

on:
  pull_request:
    paths:
      - 'package.json'
      - 'package-lock.json'
      - 'bun.lock'
      - 'requirements.txt'
      - 'pyproject.toml'
  push:
    branches: [main]
  workflow_dispatch: {}

jobs:
  audit:
    name: Dependency Audit
    runs-on: ubuntu-latest
    permissions:
      pull-requests: write   # needed for PR comments
    steps:
      - uses: actions/checkout@v4

      - name: Commit Supply Chain Audit
        uses: piiiico/proof-of-commitment@main
        with:
          fail-on-critical: false   # set true to block merges on CRITICAL packages
          max-packages: '20'
          comment-on-pr: true       # posts results as a PR comment

Enter fullscreen mode Exit fullscreen mode

That is the minimal config. Auto-detects packages from your lock file, posts a comment on every PR touching dependencies.

Inputs

Input Default What it does
packages auto Comma-separated package names. Skip this — auto-detection reads your lock file.
ecosystem auto npm or pypi. Auto-detected from your package files.
fail-on-critical true Exit non-zero if any CRITICAL packages found. Set false to audit-only without blocking.
max-packages 20 How many packages to audit from the lock file. Focus on your top dependencies.
comment-on-pr true Post results as a PR comment, auto-updated on re-runs.

Example Output

The action posts a comment to every dependency PR:

## Commit Supply Chain Audit

| Package | Score | Risk | Weekly Downloads | Maintainers |
|---------|-------|------|-----------------|-------------|
| axios   |  42   | CRITICAL | 101M | 2 |
| lodash  |  71   | MODERATE | 54M  | 4 |
| chalk   |  58   | HIGH     | 413M | 1 |
| zod     |  89   | LOW      | 18M  | 2 |
| react   |  94   | LOW      | 70M  | 8 |

⚠️ 1 CRITICAL package found. Review before merging.

Scores reflect behavioral commitment signals — maintainer bus factor, download trend, maintenance activity, incident history. Not CVE databases.
→ Full methodology: getcommit.dev/thesis

Enter fullscreen mode Exit fullscreen mode

The comment updates automatically on each push. No separate workflow run required.

Outputs

Use these in downstream steps:

      - name: Commit Supply Chain Audit
        id: audit
        uses: piiiico/proof-of-commitment@main

      - name: Post to Slack if critical
        if: steps.audit.outputs.has-critical == 'true'
        run: echo "Found CRITICAL packages — check audit summary"

Enter fullscreen mode Exit fullscreen mode

Output Value
has-critical true if any CRITICAL packages found
critical-count Number of CRITICAL packages
audit-summary Full results as a markdown table

Option 2: CLI in Any CI

Works in GitHub Actions, GitLab CI, CircleCI, Buildkite — anywhere with Node.js.

GitHub Actions (manual step):

      - name: Audit dependencies
        run: npx proof-of-commitment --file package.json

Enter fullscreen mode Exit fullscreen mode

GitLab CI:

supply-chain-audit:
  stage: test
  script:
    - npx proof-of-commitment --file package.json
  only:
    changes:
      - package.json
      - package-lock.json

Enter fullscreen mode Exit fullscreen mode

CircleCI:

jobs:
  supply-chain-audit:
    docker:
      - image: cimg/node:lts
    steps:
      - checkout
      - run:
          name: Audit dependencies
          command: npx proof-of-commitment --file package.json

Enter fullscreen mode Exit fullscreen mode

Any shell script:

npx proof-of-commitment --file package.json
npx proof-of-commitment --file requirements.txt   # Python projects

Enter fullscreen mode Exit fullscreen mode

The CLI exits non-zero if CRITICAL packages are found, so it integrates naturally with any CI that checks exit codes.

Bonus: Add a Badge to Your README

Show live trust scores directly in your README. Badges pull from the same scoring API:

![Commit Trust Score](https://poc-backend.amdal-dev.workers.dev/badge/npm/your-package-name)

Enter fullscreen mode Exit fullscreen mode

Replace your-package-name with any npm package. The badge updates live.

For PyPI packages: https://poc-backend.amdal-dev.workers.dev/badge/pypi/your-package

More badge options — shields.io compatible, custom thresholds — at /badges.

What the Scores Mean

Scores run 0–100. Four risk tiers:

Score Tier Interpretation
80–100 LOW Strong behavioral signals across all dimensions
60–79 MODERATE Some risk signals — review before major version bumps
40–59 HIGH Multiple risk signals — consider alternatives or pin the version
0–39 CRITICAL Severe structural risk — solo maintainer, high downloads, weak activity

Signals include: maintainer count, download volume vs. maintainer ratio, maintenance activity over 90 days, historical incident flags, and download trend anomalies.

These are structural signals, not CVE lookups. A package can score CRITICAL with zero known vulnerabilities — that is exactly the point. Full methodology →

Source


Running into issues? Found a package that should score differently? pico@amdal.dev