<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/ci-cd-in-the-age-of-ai-part-2-deployments-pjhqy8pce" -->

---
title: CI/CD in the age of AI, part 2: Deployments | daily.dev
description: AI-generated code passes tests but still breaks in production, and most teams use all-or-nothing deployments that take hours to revert. This guide builds a...
canonical: https://daily.dev/posts/ci-cd-in-the-age-of-ai-part-2-deployments-pjhqy8pce
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: CI/CD in the age of AI, part 2: Deployments | daily.dev
og:description: AI-generated code passes tests but still breaks in production, and most teams use all-or-nothing deployments that take hours to revert. This guide builds a...
og:url: https://daily.dev/posts/ci-cd-in-the-age-of-ai-part-2-deployments-pjhqy8pce
og:image: https://api.daily.dev/og/posts/pjHqY8Pce.png
og:image:alt: CI/CD in the age of AI, part 2: Deployments
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# CI/CD in the age of AI, part 2: Deployments

**[Neciu Dan](https://daily.dev/sources/neciudan)** · 39 min read · 0 upvotes · 0 comments

## Summary

AI-generated code passes tests but still breaks in production, and most teams use all-or-nothing deployments that take hours to revert. This guide builds a canary deployment pipeline using GitHub Actions that ships new builds to 5% of traffic first, runs smoke tests immediately, soaks for an hour comparing crash-free rates via Sentry, then either promotes to 100% or rolls back in seconds. Full implementations are provided for Vercel (Rolling Releases), Netlify (Blobs-backed edge function), Cloudflare Workers (version splitting), and GCP Cloud Run, including post-promotion watch jobs, Slack notifications, geo-scoped rollouts, and automatic rollback logic.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://neciudan.dev/ci-cd-in-the-age-of-ai-part-2-deployments>

## Questions this post answers

### How do I set up canary deployments with rolling releases on Vercel using GitHub Actions?

Enable Skew Protection under Settings > Advanced to pin sessions to their original deployment, then configure Rolling Releases (requires Pro or Enterprise) with fixed stage percentages like 5, 25, 60, and 100 via the vercel rolling-release configure command. A GitHub Actions workflow calls vercel rolling-release start after vercel deploy --prod to hold the new build at the first stage instead of taking all traffic immediately.

_daily.dev surfaces workflows like this for engineers rolling out safer Vercel deployments._

### Why does my Sentry crash-free rate check show no difference between canary and baseline releases when deploying to Vercel or Netlify?

Vercel and Netlify build remotely where GITHUB_SHA does not exist, so a config that only reads GITHUB_SHA tags every release as 'local' and the health check compares two releases that are both labeled the same. The fix is falling back through VERCEL_GIT_COMMIT_SHA, then COMMIT_REF, then GITHUB_SHA so every platform gets a real per-build release identifier for Sentry.

_engineers debugging canary health checks can track fixes like this on daily.dev while shipping to production._

### How can I run a canary rollout without paying for idle GitHub Actions runners during a soak period?

Use GitHub environments with a wait timer instead of a sleep step in a job. A job targeting an environment configured with a wait timer (up to 43200 minutes) sits queued outside a runner until the timer expires, so a 60-minute soak costs nothing in runner minutes, unlike a script that runs `sleep 3600` and occupies billed compute the whole time.

_teams tuning deployment pipelines for cost and safety can find approaches like this on daily.dev._

## Similar posts on daily.dev

- [Canary rollouts: upgrade models in production without downtime](https://daily.dev/posts/canary-rollouts-upgrade-models-in-production-without-downtime-ns4sjyphf) · Together AI · 0 upvotes · 0 comments
- [Why coding agents will break your CI/CD pipeline \(and how to fix it\)](https://daily.dev/posts/why-coding-agents-will-break-your-ci-cd-pipeline-and-how-to-fix-it--bikdwqfmf) · The New Stack · 1 upvotes · 0 comments
- [Why AI Testing Must Live Inside Your CI/CD Pipeline](https://daily.dev/posts/why-ai-testing-must-live-inside-your-ci-cd-pipeline-sg6zuwyo2) · DevOps.com · 0 upvotes · 0 comments

---

Tags: [#cicd](https://daily.dev/tags/cicd), [#github-actions](https://daily.dev/tags/github-actions), [#vercel](https://daily.dev/tags/vercel)

[View this post on daily.dev](https://daily.dev/posts/ci-cd-in-the-age-of-ai-part-2-deployments-pjhqy8pce)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"CI/CD in the age of AI, part 2: Deployments","url":"https://daily.dev/posts/ci-cd-in-the-age-of-ai-part-2-deployments-pjhqy8pce","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/ci-cd-in-the-age-of-ai-part-2-deployments-pjhqy8pce"},"datePublished":"2026-08-05T07:50:03.043Z","dateModified":"2026-09-13T19:43:38.985Z","description":"AI-generated code passes tests but still breaks in production, and most teams use all-or-nothing deployments that take hours to revert. This guide builds a...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/7de7e6ec691a30ac9831064efa1c90eb?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/7de7e6ec691a30ac9831064efa1c90eb?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Neciu Dan","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Neciu Dan","logo":"https://media.daily.dev/image/upload/s--xeHLtkTA--/f_auto,q_auto/v1776585705/logos/neciudan","url":"https://daily.dev/sources/neciudan"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/ci-cd-in-the-age-of-ai-part-2-deployments-pjhqy8pce","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"cicd,github-actions,vercel","timeRequired":"PT39M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Neciu Dan","item":"https://daily.dev/sources/neciudan"},{"@type":"ListItem","position":3,"name":"CI/CD in the age of AI, part 2: Deployments"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/ci-cd-in-the-age-of-ai-part-2-deployments-pjhqy8pce#faq","mainEntity":[{"@type":"Question","name":"How do I set up canary deployments with rolling releases on Vercel using GitHub Actions?","acceptedAnswer":{"@type":"Answer","text":"Enable Skew Protection under Settings > Advanced to pin sessions to their original deployment, then configure Rolling Releases (requires Pro or Enterprise) with fixed stage percentages like 5, 25, 60, and 100 via the vercel rolling-release configure command. A GitHub Actions workflow calls vercel rolling-release start after vercel deploy --prod to hold the new build at the first stage instead of taking all traffic immediately. daily.dev surfaces workflows like this for engineers rolling out safer Vercel deployments."}},{"@type":"Question","name":"Why does my Sentry crash-free rate check show no difference between canary and baseline releases when deploying to Vercel or Netlify?","acceptedAnswer":{"@type":"Answer","text":"Vercel and Netlify build remotely where GITHUB_SHA does not exist, so a config that only reads GITHUB_SHA tags every release as 'local' and the health check compares two releases that are both labeled the same. The fix is falling back through VERCEL_GIT_COMMIT_SHA, then COMMIT_REF, then GITHUB_SHA so every platform gets a real per-build release identifier for Sentry. engineers debugging canary health checks can track fixes like this on daily.dev while shipping to production."}},{"@type":"Question","name":"How can I run a canary rollout without paying for idle GitHub Actions runners during a soak period?","acceptedAnswer":{"@type":"Answer","text":"Use GitHub environments with a wait timer instead of a sleep step in a job. A job targeting an environment configured with a wait timer (up to 43200 minutes) sits queued outside a runner until the timer expires, so a 60-minute soak costs nothing in runner minutes, unlike a script that runs `sleep 3600` and occupies billed compute the whole time. teams tuning deployment pipelines for cost and safety can find approaches like this on daily.dev."}}]}
```

