Articles

Engineering guides

Long-form, cited guides for maintainers hardening GitHub Actions workflows and Stripe billing paths.

A large control panel with rows of switches, buttons, and displays.

GitHub Actions workflow execution protections guide

Control which actors and events can start workflows, test the policy in evaluate mode, and activate it with evidence.

Green exit sign hanging from a ceiling.

Stripe Cancel-Save Flow in Node: Retain Subscribers

Build a Stripe cancel-save flow in Node with cancellation intent, save offers, period-end cancellation, and reason analytics.

Programmable calculator photographed on a desk.

Stripe MRR and Churn in Node: Subscription Metrics

Compute Stripe MRR, ARR, churn, paid invoice revenue, and refunds from idempotently stored subscription events in Node.

Close-up of a mechanical electricity meter with numbered dials.

Usage-Based Billing with Stripe in Node: Meter Safely

Build usage-based Stripe billing in Node with a durable usage ledger, billing meter events, customer alerts, and invoice timing checks.

Conference room table surrounded by empty chairs.

Stripe Per-Seat Billing in Node: Proration Controls

Build Stripe per-seat subscriptions in Node with durable seat counts, explicit quantity updates, and predictable proration behavior.

Historical invoice document photographed flat on a light background.

Stripe Webhook Idempotency in Node: Stop Double Work

Build idempotent Stripe webhooks in Node by verifying raw bodies, storing event IDs, and separating API idempotency from webhook dedupe.

Corrugated cardboard moving down a conveyor belt.

npm Trusted Publishing: Safer GitHub Actions Releases

How to keep npm publishing workflows tokenless, traceable, and narrow enough to review.

Robotic arm arranged for automated sorting and stacking.

Dependabot GitHub Actions: Safer Bot PR CI Workflows

How to review token, secret, and automation boundaries on Dependabot pull requests.

Code displayed on a computer monitor.

GitHub Actions Script Injection: Safer Shell Steps

How to keep pull request text and other event data from becoming shell code.

Industrial shelving with stacked storage boxes.

GitHub Actions Cache Security: Avoid Poisoned Builds

How to use GitHub Actions caches without turning dependency restores into a hidden supply-chain trust path.

Rows of high-performance computing racks in a data center.

Artifact Attestations: Verify GitHub Actions Builds

How to add GitHub Actions artifact attestations without turning release provenance into unchecked paperwork.

Rows of data center equipment and cabling.

Self-Hosted Runners: Secure GitHub Actions CI Builds

How to review self-hosted runner exposure before CI jobs can reach local machines, private networks, or long-lived credentials.

Industrial conveyor system inside a factory.

Reusable Workflows: Secure GitHub Actions Pipelines

How to review reusable workflow calls before shared automation spreads CI/CD risk across repositories.

Clouds above the north Atlantic Ocean photographed from orbit.

OIDC Trust Policies: Secure GitHub Actions Cloud Deploys

How to keep GitHub Actions OIDC cloud trust policies narrow enough for production deployments.

Assorted padlocks attached to a chain link fence.

Pin GitHub Actions to SHAs: Secure CI/CD Pipelines

How to make third-party GitHub Actions dependencies immutable, reviewable, and easier to enforce.

A transparent padlock photographed open with a key inserted.

GITHUB_TOKEN Permissions: Safer GitHub Actions CI/CD

How to make GitHub Actions token permissions explicit, narrow, and easier to audit.

A transparent padlock photographed closed.

GitHub pull_request_target Security: Safe PR Workflows

When pull_request_target is useful, when it is risky, and how to split trusted automation from untrusted pull-request code.

Server racks in a computing facility.

GitHub Actions Security: 5 CI Risks to Fix Right Now

Five workflow checks to prioritize before release automation expands risk.