3:I[4707,[],""] 5:I[6423,[],""] 6:I[2798,["972","static/chunks/972-a66c538a2b036653.js","50","static/chunks/50-1257a4928d3dee1b.js","868","static/chunks/868-b5274bfdefe30153.js","79","static/chunks/79-108bb73aa9269941.js","854","static/chunks/854-33d3781a3ff18775.js","185","static/chunks/app/layout-fb8da892d0fbbf84.js"],"ThemeProvider"] 7:I[9723,["972","static/chunks/972-a66c538a2b036653.js","50","static/chunks/50-1257a4928d3dee1b.js","868","static/chunks/868-b5274bfdefe30153.js","79","static/chunks/79-108bb73aa9269941.js","854","static/chunks/854-33d3781a3ff18775.js","185","static/chunks/app/layout-fb8da892d0fbbf84.js"],"SmoothScroll"] 8:I[6079,["972","static/chunks/972-a66c538a2b036653.js","50","static/chunks/50-1257a4928d3dee1b.js","868","static/chunks/868-b5274bfdefe30153.js","79","static/chunks/79-108bb73aa9269941.js","854","static/chunks/854-33d3781a3ff18775.js","185","static/chunks/app/layout-fb8da892d0fbbf84.js"],"CursorSpotlight"] 9:I[532,["972","static/chunks/972-a66c538a2b036653.js","50","static/chunks/50-1257a4928d3dee1b.js","868","static/chunks/868-b5274bfdefe30153.js","79","static/chunks/79-108bb73aa9269941.js","854","static/chunks/854-33d3781a3ff18775.js","185","static/chunks/app/layout-fb8da892d0fbbf84.js"],"Navbar"] a:I[2205,["972","static/chunks/972-a66c538a2b036653.js","50","static/chunks/50-1257a4928d3dee1b.js","868","static/chunks/868-b5274bfdefe30153.js","79","static/chunks/79-108bb73aa9269941.js","854","static/chunks/854-33d3781a3ff18775.js","185","static/chunks/app/layout-fb8da892d0fbbf84.js"],"Footer"] b:I[3772,["972","static/chunks/972-a66c538a2b036653.js","50","static/chunks/50-1257a4928d3dee1b.js","868","static/chunks/868-b5274bfdefe30153.js","79","static/chunks/79-108bb73aa9269941.js","854","static/chunks/854-33d3781a3ff18775.js","185","static/chunks/app/layout-fb8da892d0fbbf84.js"],"Toaster"] c:I[3095,["972","static/chunks/972-a66c538a2b036653.js","50","static/chunks/50-1257a4928d3dee1b.js","868","static/chunks/868-b5274bfdefe30153.js","79","static/chunks/79-108bb73aa9269941.js","854","static/chunks/854-33d3781a3ff18775.js","185","static/chunks/app/layout-fb8da892d0fbbf84.js"],"Analytics"] d:I[8661,["972","static/chunks/972-a66c538a2b036653.js","50","static/chunks/50-1257a4928d3dee1b.js","868","static/chunks/868-b5274bfdefe30153.js","79","static/chunks/79-108bb73aa9269941.js","854","static/chunks/854-33d3781a3ff18775.js","185","static/chunks/app/layout-fb8da892d0fbbf84.js"],"ChatWidget"] 4:["slug","ci-cd-pipelines-that-scale","d"] 0:["uuc30tI-qsfwjf4cKjy77",[[["",{"children":["blog",{"children":[["slug","ci-cd-pipelines-that-scale","d"],{"children":["__PAGE__?{\"slug\":\"ci-cd-pipelines-that-scale\"}",{}]}]}]},"$undefined","$undefined",true],["",{"children":["blog",{"children":[["slug","ci-cd-pipelines-that-scale","d"],{"children":["__PAGE__",{},[["$L1","$L2",null],null],null]},[null,["$","$L3",null,{"parallelRouterKey":"children","segmentPath":["children","blog","children","$4","children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","notFoundStyles":"$undefined"}]],null]},[null,["$","$L3",null,{"parallelRouterKey":"children","segmentPath":["children","blog","children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","notFoundStyles":"$undefined"}]],null]},[[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/0666b722fae2b471.css","precedence":"next","crossOrigin":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"className":"dark","children":[["$","head",null,{"children":["$","script",null,{"dangerouslySetInnerHTML":{"__html":"\n (function() {\n var theme = localStorage.getItem('theme');\n var prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;\n if (theme === 'light') {\n document.documentElement.classList.remove('dark');\n document.documentElement.classList.add('light');\n } else {\n document.documentElement.classList.add('dark');\n document.documentElement.classList.remove('light');\n }\n })();\n "}}]}],["$","body",null,{"className":"__variable_f367f3 __variable_ce197d font-sans","children":[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"Organization\",\"@id\":\"https://cogentsoftware.com#organization\",\"name\":\"Cogent Softwares\",\"url\":\"https://cogentsoftware.com\",\"logo\":\"https://cogentsoftware.com/favicon.svg\",\"description\":\"Cogent Softwares helps startups and enterprises build web and mobile applications (Android & iOS), blockchain applications, and AI automation systems.\",\"email\":\"hello@cogentsoftwares.com\",\"telephone\":\"+91 8000555268\",\"address\":{\"@type\":\"PostalAddress\",\"addressLocality\":\"12, Nilkanth avenue, Motavarachha, Surat, Gujarat, India - 394101\"}}"}}],["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Cogent Softwares\",\"url\":\"https://cogentsoftware.com\",\"description\":\"Cogent Softwares helps startups and enterprises build web and mobile applications (Android & iOS), blockchain applications, and AI automation systems.\",\"publisher\":{\"@id\":\"https://cogentsoftware.com#organization\"}}"}}],["$","$L6",null,{"attribute":"class","defaultTheme":"dark","enableSystem":false,"storageKey":"theme","children":[["$","$L7",null,{}],["$","$L8",null,{}],["$","div",null,{"className":"relative flex min-h-screen flex-col","children":[["$","$L9",null,{}],["$","main",null,{"className":"flex-1","children":["$","$L3",null,{"parallelRouterKey":"children","segmentPath":["children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":"404"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],"notFoundStyles":[]}]}],["$","$La",null,{}]]}],["$","$Lb",null,{"position":"top-right","richColors":true,"closeButton":true}],["$","$Lc",null,{}],["$","$Ld",null,{}]]}]]}]]}]],null],null],["$Le",null]]]] 2:[["$","script",null,{"type":"application/ld+json","dangerouslySetInnerHTML":{"__html":"{\"@context\":\"https://schema.org\",\"@type\":\"Article\",\"headline\":\"CI/CD Pipelines That Scale\",\"description\":\"Green on main is table stakes. We spell out what runs on every pull request, what we gate before merge, and how we keep deploys boring on purpose.\",\"datePublished\":\"2025-11-18T00:00:00.000Z\",\"dateModified\":\"2025-11-18T00:00:00.000Z\",\"author\":{\"@type\":\"Organization\",\"name\":\"Cogent Softwares\",\"url\":\"https://cogentsoftware.com\"},\"publisher\":{\"@type\":\"Organization\",\"name\":\"Cogent Softwares\",\"url\":\"https://cogentsoftware.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://cogentsoftware.com/favicon.svg\"}},\"mainEntityOfPage\":{\"@type\":\"WebPage\",\"@id\":\"https://cogentsoftware.com/blog/ci-cd-pipelines-that-scale\"},\"image\":[\"https://cogentsoftware.com/og.png\"]}"}}],["$","section",null,{"className":"section-padding","children":["$","div",null,{"className":"container max-w-3xl","children":["$","article",null,{"children":[["$","p",null,{"className":"text-xs uppercase tracking-[0.2em] text-muted-foreground","children":"2025-11-18"}],["$","h1",null,{"className":"mt-2 text-4xl font-semibold","children":"CI/CD Pipelines That Scale"}],["$","p",null,{"className":"mt-4 text-lg text-muted-foreground","children":"Green on main is table stakes. We spell out what runs on every pull request, what we gate before merge, and how we keep deploys boring on purpose."}],["$","p",null,{"className":"mt-2 text-sm text-muted-foreground","children":"6 min read"}],["$","div",null,{"className":"prose dark:prose-invert mt-8 max-w-none prose-headings:font-heading prose-a:text-primary prose-pre:bg-muted/50","children":[["$","h1",null,{"children":"CI/CD Pipelines That Scale"}],"\n",["$","p",null,{"children":"Most teams agree CI is important; fewer agree on what actually has to run before code touches production. This article is about the gates we use so main stays shippable, feedback stays fast, and nobody is guessing what “green” means on a Friday night."}],"\n",["$","h2",null,{"children":"What we want from a pipeline"}],"\n",["$","p",null,{"children":"A useful pipeline does three things: it tells a developer quickly when they broke something obvious, it stops bad merges before they become everyone’s problem, and it makes production deploys repeatable enough that releasing is not a ceremony. Fancy tooling is optional; clear rules are not."}],"\n",["$","h2",null,{"children":"Testing gates"}],"\n",["$","ul",null,{"children":["\n",["$","li",null,{"children":[["$","strong",null,{"children":"Lint and typecheck"}]," on every PR. Fail fast. If style and types drift, everything else gets harder to read and refactors get scary."]}],"\n",["$","li",null,{"children":[["$","strong",null,{"children":"Unit tests"}]," on every push. Keep them fast: mock I/O, avoid hitting real databases in the default path, so people get signal in a few minutes and actually run them locally."]}],"\n",["$","li",null,{"children":[["$","strong",null,{"children":"Integration tests"}]," on PR or before merge, with a real database or containers where it matters. Slower is fine here; you are catching contract and wiring bugs."]}],"\n",["$","li",null,{"children":[["$","strong",null,{"children":"End-to-end tests"}]," on a schedule or before release, against staging, focused on money paths and sign-up flows. Not every click needs E2E coverage."]}],"\n"]}],"\n",["$","p",null,{"children":"We usually require lint, typecheck, and unit tests before merge. We add integration and E2E as the product and risk grow, not because a blog checklist said so."}],"\n",["$","h2",null,{"children":"Deployment strategies"}],"\n",["$","ul",null,{"children":["\n",["$","li",null,{"children":[["$","strong",null,{"children":"Branch-based:"}]," main (or a release branch) goes to production; preview deploys per PR for QA. Short-lived URLs beat “works on my machine” screenshots."]}],"\n",["$","li",null,{"children":[["$","strong",null,{"children":"Tag or release-based:"}]," production only moves when someone pushes a version tag. Good when legal or compliance wants explicit release notes."]}],"\n",["$","li",null,{"children":[["$","strong",null,{"children":"Environments:"}]," dev, staging, and production stay separate. Promote staging from main, then promote to production with a human click or a second automated step when you are ready."]}],"\n"]}],"\n",["$","h2",null,{"children":"GitHub Actions in practice"}],"\n",["$","p",null,{"children":"Reuse workflows and composite actions so you are not copying YAML into fifteen repos. Use a matrix when you really need multiple Node or Python versions. Cache npm, pnpm, or pip so CI minutes go to tests, not downloads. Secrets live in GitHub Secrets or a vault, never in logs. Use concurrency groups so a newer push on the same branch cancels an old run instead of burning minutes twice."}],"\n",["$","h2",null,{"children":"Closing thought"}],"\n",["$","p",null,{"children":"Good CI is opinionated. Pick the gates that match your risk, document them in one place, and change them when the product changes. We set up and maintain pipelines for product teams; if yours is slow, flaky, or unclear, that is usually fixable without rewriting the whole app."}],"\n",["$","hr",null,{}],"\n",["$","p",null,{"children":[["$","em",null,{"children":"Cogent Softwares"}],", DevOps and engineering practices."]}]]}]]}]}]}]] e:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"CI/CD Pipelines That Scale | Cogent Softwares"}],["$","meta","3",{"name":"description","content":"Green on main is table stakes. We spell out what runs on every pull request, what we gate before merge, and how we keep deploys boring on purpose."}],["$","link","4",{"rel":"canonical","href":"https://cogentsoftware.com/blog/ci-cd-pipelines-that-scale"}],["$","meta","5",{"property":"og:title","content":"CI/CD Pipelines That Scale"}],["$","meta","6",{"property":"og:description","content":"Green on main is table stakes. We spell out what runs on every pull request, what we gate before merge, and how we keep deploys boring on purpose."}],["$","meta","7",{"property":"og:url","content":"https://cogentsoftware.com/blog/ci-cd-pipelines-that-scale"}],["$","meta","8",{"property":"og:site_name","content":"Cogent Softwares"}],["$","meta","9",{"property":"og:image","content":"https://cogentsoftware.com/og.png"}],["$","meta","10",{"property":"og:image:width","content":"1200"}],["$","meta","11",{"property":"og:image:height","content":"630"}],["$","meta","12",{"property":"og:image:alt","content":"CI/CD Pipelines That Scale"}],["$","meta","13",{"property":"og:type","content":"article"}],["$","meta","14",{"property":"article:published_time","content":"2025-11-18T00:00:00.000Z"}],["$","meta","15",{"property":"article:author","content":"Cogent Softwares"}],["$","meta","16",{"name":"twitter:card","content":"summary_large_image"}],["$","meta","17",{"name":"twitter:title","content":"CI/CD Pipelines That Scale"}],["$","meta","18",{"name":"twitter:description","content":"Green on main is table stakes. We spell out what runs on every pull request, what we gate before merge, and how we keep deploys boring on purpose."}],["$","meta","19",{"name":"twitter:image","content":"https://cogentsoftware.com/og.png"}],["$","link","20",{"rel":"icon","href":"/favicon.svg"}]] 1:null