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

推荐订阅源

Martin Fowler
Martin Fowler
博客园 - 【当耐特】
GbyAI
GbyAI
M
MIT News - Artificial intelligence
Microsoft Azure Blog
Microsoft Azure Blog
A
About on SuperTechFans
罗磊的独立博客
Apple Machine Learning Research
Apple Machine Learning Research
腾讯CDC
F
Fortinet All Blogs
IT之家
IT之家
WordPress大学
WordPress大学
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Last Week in AI
Last Week in AI
Google DeepMind News
Google DeepMind News
Jina AI
Jina AI
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
D
DataBreaches.Net
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
H
Help Net Security
V
Visual Studio Blog
小众软件
小众软件
Y
Y Combinator Blog

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