All blogs / DevOps / SRE / infrastructure
Mergify
Stories, insights, and opinions from the team behind Mergify
- Posts
- 107 from 6 Dec 2024 to 28 Oct 2026
- Posting
- weekly (84 in the last year)
- Kind
- company blog
2026 75
- “Re-run Failed Jobs” Is Not Flaky Test Management
- Python and Postgres Don’t Agree on What “CET” Means
- Moving Our Python Engine to httpx2: the Tracer and the Trust Store Were the Hard Part
- hash(id) % 8 Pinned One Python Process at 98% While Its Neighbors Idled
- A GitHub Actions Cache Key Is Not the Cache Key
- We Deleted a 63 MB GeoIP Database and Replaced It with a 64-Byte Signature
- Two Logins, One Tab, One Cache Key
- Merge Queue & CIShould you build your own merge queue?
- OpinionBuild vs. buy, after LLMs made building look cheap
- Every Test Gets a Fresh Postgres Database: Fast Per-Test Isolation in SQLAlchemy
- We Stopped Our Config Builder From Destroying Your YAML, Then Found a Worse Bug Next to It
- The Native TypeScript Compiler Cut Our Typecheck From 13s to 3.5s. The Only Hard Part Was ESLint.
- AI-assisted PRs break main half as often as human ones
- Our Frontend Was Guessing What Our Parser Accepts. It Was Wrong for 70 of 75 Attributes.
- Our Auth Library’s Last Release Was July 2022. We Noticed in June 2026.
- Merge Queues Were Built for Humans. AI Agents Need More.
- How we made our merge queue lower its own quality bar (only when it’s drowning)
- Two counters instead of a materialized view
- We put Jinja2 in our config for flexibility. Users wanted one variable.
- Merge Queue & CIStop Using Labels to Control CI in GitHub Actions
- Merge Queue & CIPath Filters Are a Convenience, Not a CI Gate
- Merge Queue & CIWhen to Outgrow GitHub's Merge Queue
- When a production deploy fails, our merge queue freezes itself
- Most aria-labels on your buttons are dead weight, and some are bugs
- ON CONFLICT DO UPDATE Is Rewriting Rows You Never Changed
- We Built a Merge Queue Mode That Skips the Safety Check on Purpose
- A Disk Alert, a 392 GB Table, and Indexes Bigger Than the Data
- Swapping a Primary Key on a 4M-Row Table: Why I Took 10 Minutes of Downtime
- Merge Queue & CIHow we run parallel merge queues on our own monorepo
- How Agents Work With Parallel Agents
- We Let an LLM Open Pull Requests Against Your .mergify.yml. The Prompt Was the Easy Part.
- Bun shipped 1M lines in nine days. The PR is the bottleneck now.
- How we built stacked PRs without a new git workflow
- We fixed Alembic’s multiple-heads error with Git history
- Merge Queue & CIHow to merge main into a branch in Git (and when to rebase instead)
- Making Dashboard Charts Actually Useful: Brush Zoom, Click-to-Filter, and Shareable URLs with ECharts
- TestingTimecop.freeze without Timecop.return is the textbook RSpec time bomb
- TestingPlaywright storageState is not just a setup file. It is a contract.
- We Spent Years Hardening Jinja2 in User Config. We’re Removing It Instead.
- TestingVitest's isolate:false buys you 30% speed and a class of flake you cannot grep for
- TestingHypothesis is not flaky. Your code under test is, and Hypothesis is the messenger.
- TestingRSpec system specs see an empty database. database_cleaner is why.
- 225 Self-Hosted GitHub Actions Runners: Why We Picked Docker Over VMs
- Testingregex101: A Practical Guide to the Regex Tester Engineers Actually Use
- TestingPlaywright route handlers fire only on requests they were registered before
- Testingvi.mock hoists. Your closure variables do not.
- Testingpytest-xdist makes the suite faster and the flakes weirder
- TestingRSpec randomized order is the messenger, not the bug
- I’m the new hire on a codebase I didn’t write
- TestingPlaywright auto-wait is great, until your component re-renders mid-action
- TestingVitest's `threads` pool is fast. It is also why your suite leaks state.
- Testingpytest fixture teardown races: when yield-style cleanup eats itself
- What GitHub Webhook Latency Actually Looks Like
- Merge Queue & CIGitHub Auto-Merge: When the Native Button Is Enough, and When You Outgrow It
- Merge Queue & CIHow to Enable GitHub Merge Queue with GitHub Actions: The 5-Minute Setup
- Merge Queue & CIHow to Cut Your GitHub Actions CI Bill (Without Compromising Tests)
- Why jest.retryTimes() is hiding bugs in your test suite
- A merge queue is critical infrastructure. Build it accordingly.
- Jest snapshot drift: when toMatchSnapshot lies about your code
- Fake-timer leakage in Jest: the flake nobody sees coming
- Switching from npm to pnpm found 3 phantom dependencies in our React app
- Python 3.14 in Production: What PEP 649 Actually Breaks
- A Markdown File Became Our Company-Wide On-Call Cheat Code
- How We Formally Verified Our Merge Queue with TLA+ (and Found Bugs That Tests Missed)
- Your Monorepo’s Merge Queue Has a Concurrency Problem
- Diving into pytest Finalizers
- How a Dashboard Arms Race Put Me on the App Store
- The Day My AI Agent Deleted 29 Git Worktrees
- When GitHub Webhooks Lie: How an Empty Array Broke Our Merge Queue
- The Comfortable Room
- How We Turned Claude Into a Cross-System Support Investigator
- Spinners Are the UX Equivalent of “TODO: Fix Later”
- Claude Didn’t Kill Craftsmanship
- On LATERAL Joins
- Detecting Blocking Tasks in Asyncio by Measuring Event Loop Latency
2025 30
- GitHub Merge Queue Was Step One. Real CI Orchestration Comes Next.
- Stop Lying to Your Dependency Resolver: The Real Rules for Python Dependency Management
- Lessons From a Noisy Monitor
- Monorepo CI for GitHub Actions: Run Exactly the Tests You Need, Nothing More
- await Is Not a Context Switch: Understanding Python’s Coroutines vs Tasks
- Updating Materialized Views (Without Worrying Too Much)
- Goodbye Checklists, Hello AI Linters
- Origin and Evolution of the Globstar
- Shadow Shipping: How We Double-Executed Code to Ship Safely
- Why PostgreSQL Ignored Our Index (and What the Planner Was Thinking)
- The Magic (and Mayhem) Behind Our Config Deprecation Transformers
- TypeScript’s import type: The Flag That Makes Builds Honest
- Should We Still Write Docs If AI Can Read the Code?
- Why WARNING Has No Place in Modern Logging
- AI Won’t Replace Code Reviews, But It Can Fix Them
- Friends Don’t Let Friends Use :latest
- Application vs. Database: Where Should Permissions Live?
- The Origin Story of Merge Queues
- What I Learned Building My First Jenkins Plugin
- Trunk-Based Development vs Gitflow: Which Branching Model Actually Works?
- Pull Request Management: Streamline Your Workflow with Automation
- Stop Abusing .gitignore
- Looking for a Bulldozer Alternative? Meet Mergify.
- Feature Branch Workflow: A Practical Guide for Git
- Mergify CI Insights Now Supports Jenkins
- Code Review: Culture, Flow, and Practices That Drive Team Performance
- CI Sucks (and That’s OK)
- GitHub’s Merge Queue Isn’t Enough for Large Teams
- CI Failures Don’t Just Break Builds: They Break Focus
- Handling Candidate Rejection: A Delicate Balancing Act