{"id":"249715cd-823e-4a71-93ad-5415a74d2417","shortId":"LYLTwY","kind":"skill","title":"ci-cd-and-automation","tagline":"Automates CI/CD pipeline setup. Use when setting up or modifying build and deployment pipelines. Use when you need to automate quality gates, configure test runners in CI, or establish deployment strategies.","description":"# CI/CD and Automation\n\n## Overview\n\nAutomate quality gates so that no change reaches production without passing tests, lint, type checking, and build. CI/CD is the enforcement mechanism for every other skill — it catches what humans and agents miss, and it does so consistently on every single change.\n\n**Shift Left:** Catch problems as early in the pipeline as possible. A bug caught in linting costs minutes; the same bug caught in production costs hours. Move checks upstream — static analysis before tests, tests before staging, staging before production.\n\n**Faster is Safer:** Smaller batches and more frequent releases reduce risk, not increase it. A deployment with 3 changes is easier to debug than one with 30. Frequent releases build confidence in the release process itself.\n\n## When to Use\n\n- Setting up a new project's CI pipeline\n- Adding or modifying automated checks\n- Configuring deployment pipelines\n- When a change should trigger automated verification\n- Debugging CI failures\n\n## The Quality Gate Pipeline\n\nEvery change goes through these gates before merge:\n\n```\nPull Request Opened\n    │\n    ▼\n┌─────────────────┐\n│   LINT CHECK     │  eslint, prettier\n│   ↓ pass         │\n│   TYPE CHECK     │  tsc --noEmit\n│   ↓ pass         │\n│   UNIT TESTS     │  jest/vitest\n│   ↓ pass         │\n│   BUILD          │  npm run build\n│   ↓ pass         │\n│   INTEGRATION    │  API/DB tests\n│   ↓ pass         │\n│   E2E (optional) │  Playwright/Cypress\n│   ↓ pass         │\n│   SECURITY AUDIT │  npm audit\n│   ↓ pass         │\n│   BUNDLE SIZE    │  bundlesize check\n└─────────────────┘\n    │\n    ▼\n  Ready for review\n```\n\n**No gate can be skipped.** If lint fails, fix lint — don't disable the rule. If a test fails, fix the code — don't skip the test.\n\n## GitHub Actions Configuration\n\n### Basic CI Pipeline\n\n```yaml\n# .github/workflows/ci.yml\nname: CI\n\non:\n  pull_request:\n    branches: [main]\n  push:\n    branches: [main]\n\njobs:\n  quality:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n\n      - uses: actions/setup-node@v4\n        with:\n          node-version: '22'\n          cache: 'npm'\n\n      - name: Install dependencies\n        run: npm ci\n\n      - name: Lint\n        run: npm run lint\n\n      - name: Type check\n        run: npx tsc --noEmit\n\n      - name: Test\n        run: npm test -- --coverage\n\n      - name: Build\n        run: npm run build\n\n      - name: Security audit\n        run: npm audit --audit-level=high\n```\n\n### With Database Integration Tests\n\n```yaml\n  integration:\n    runs-on: ubuntu-latest\n    services:\n      postgres:\n        image: postgres:16\n        env:\n          POSTGRES_DB: testdb\n          POSTGRES_USER: ci_user\n          POSTGRES_PASSWORD: ${{ secrets.CI_DB_PASSWORD }}\n        ports:\n          - 5432:5432\n        options: >-\n          --health-cmd pg_isready\n          --health-interval 10s\n          --health-timeout 5s\n          --health-retries 5\n\n    steps:\n      - uses: actions/checkout@v4\n      - uses: actions/setup-node@v4\n        with:\n          node-version: '22'\n          cache: 'npm'\n      - run: npm ci\n      - name: Run migrations\n        run: npx prisma migrate deploy\n        env:\n          DATABASE_URL: postgresql://ci_user:${{ secrets.CI_DB_PASSWORD }}@localhost:5432/testdb\n      - name: Integration tests\n        run: npm run test:integration\n        env:\n          DATABASE_URL: postgresql://ci_user:${{ secrets.CI_DB_PASSWORD }}@localhost:5432/testdb\n```\n\n> **Note:** Even for CI-only test databases, use GitHub Secrets for credentials rather than hardcoding values. This builds good habits and prevents accidental reuse of test credentials in other contexts.\n\n### E2E Tests\n\n```yaml\n  e2e:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - uses: actions/setup-node@v4\n        with:\n          node-version: '22'\n          cache: 'npm'\n      - run: npm ci\n      - name: Install Playwright\n        run: npx playwright install --with-deps chromium\n      - name: Build\n        run: npm run build\n      - name: Run E2E tests\n        run: npx playwright test\n      - uses: actions/upload-artifact@v4\n        if: failure()\n        with:\n          name: playwright-report\n          path: playwright-report/\n```\n\n## Feeding CI Failures Back to Agents\n\nThe power of CI with AI agents is the feedback loop. When CI fails:\n\n```\nCI fails\n    │\n    ▼\nCopy the failure output\n    │\n    ▼\nFeed it to the agent:\n\"The CI pipeline failed with this error:\n[paste specific error]\nFix the issue and verify locally before pushing again.\"\n    │\n    ▼\nAgent fixes → pushes → CI runs again\n```\n\n**Key patterns:**\n\n```\nLint failure → Agent runs `npm run lint --fix` and commits\nType error  → Agent reads the error location and fixes the type\nTest failure → Agent follows debugging-and-error-recovery skill\nBuild error → Agent checks config and dependencies\n```\n\n## Deployment Strategies\n\n### Preview Deployments\n\nEvery PR gets a preview deployment for manual testing:\n\n```yaml\n# Deploy preview on PR (Vercel/Netlify/etc.)\ndeploy-preview:\n  runs-on: ubuntu-latest\n  if: github.event_name == 'pull_request'\n  steps:\n    - uses: actions/checkout@v4\n    - name: Deploy preview\n      run: npx vercel --token=${{ secrets.VERCEL_TOKEN }}\n```\n\n### Feature Flags\n\nFeature flags decouple deployment from release. Deploy incomplete or risky features behind flags so you can:\n\n- **Ship code without enabling it.** Merge to main early, enable when ready.\n- **Roll back without redeploying.** Disable the flag instead of reverting code.\n- **Canary new features.** Enable for 1% of users, then 10%, then 100%.\n- **Run A/B tests.** Compare behavior with and without the feature.\n\n```typescript\n// Simple feature flag pattern\nif (featureFlags.isEnabled('new-checkout-flow', { userId })) {\n  return renderNewCheckout();\n}\nreturn renderLegacyCheckout();\n```\n\n**Flag lifecycle:** Create → Enable for testing → Canary → Full rollout → Remove the flag and dead code. Flags that live forever become technical debt — set a cleanup date when you create them.\n\n### Staged Rollouts\n\n```\nPR merged to main\n    │\n    ▼\n  Staging deployment (auto)\n    │ Manual verification\n    ▼\n  Production deployment (manual trigger or auto after staging)\n    │\n    ▼\n  Monitor for errors (15-minute window)\n    │\n    ├── Errors detected → Rollback\n    └── Clean → Done\n```\n\n### Rollback Plan\n\nEvery deployment should be reversible:\n\n```yaml\n# Manual rollback workflow\nname: Rollback\non:\n  workflow_dispatch:\n    inputs:\n      version:\n        description: 'Version to rollback to'\n        required: true\n\njobs:\n  rollback:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Rollback deployment\n        run: |\n          # Deploy the specified previous version\n          npx vercel rollback ${{ inputs.version }}\n```\n\n## Environment Management\n\n```\n.env.example       → Committed (template for developers)\n.env                → NOT committed (local development)\n.env.test           → Committed (test environment, no real secrets)\nCI secrets          → Stored in GitHub Secrets / vault\nProduction secrets  → Stored in deployment platform / vault\n```\n\nCI should never have production secrets. Use separate secrets for CI testing.\n\n## Automation Beyond CI\n\n### Dependabot / Renovate\n\n```yaml\n# .github/dependabot.yml\nversion: 2\nupdates:\n  - package-ecosystem: npm\n    directory: /\n    schedule:\n      interval: weekly\n    open-pull-requests-limit: 5\n```\n\n### Build Cop Role\n\nDesignate someone responsible for keeping CI green. When the build breaks, the Build Cop's job is to fix or revert — not the person whose change caused the break. This prevents broken builds from accumulating while everyone assumes someone else will fix it.\n\n### PR Checks\n\n- **Required reviews:** At least 1 approval before merge\n- **Required status checks:** CI must pass before merge\n- **Branch protection:** No force-pushes to main\n- **Auto-merge:** If all checks pass and approved, merge automatically\n\n## CI Optimization\n\nWhen the pipeline exceeds 10 minutes, apply these strategies in order of impact:\n\n```\nSlow CI pipeline?\n├── Cache dependencies\n│   └── Use actions/cache or setup-node cache option for node_modules\n├── Run jobs in parallel\n│   └── Split lint, typecheck, test, build into separate parallel jobs\n├── Only run what changed\n│   └── Use path filters to skip unrelated jobs (e.g., skip e2e for docs-only PRs)\n├── Use matrix builds\n│   └── Shard test suites across multiple runners\n├── Optimize the test suite\n│   └── Remove slow tests from the critical path, run them on a schedule instead\n└── Use larger runners\n    └── GitHub-hosted larger runners or self-hosted for CPU-heavy builds\n```\n\n**Example: caching and parallelism**\n```yaml\njobs:\n  lint:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - uses: actions/setup-node@v4\n        with: { node-version: '22', cache: 'npm' }\n      - run: npm ci\n      - run: npm run lint\n\n  typecheck:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - uses: actions/setup-node@v4\n        with: { node-version: '22', cache: 'npm' }\n      - run: npm ci\n      - run: npx tsc --noEmit\n\n  test:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - uses: actions/setup-node@v4\n        with: { node-version: '22', cache: 'npm' }\n      - run: npm ci\n      - run: npm test -- --coverage\n```\n\n## Common Rationalizations\n\n| Rationalization | Reality |\n|---|---|\n| \"CI is too slow\" | Optimize the pipeline (see CI Optimization below), don't skip it. A 5-minute pipeline prevents hours of debugging. |\n| \"This change is trivial, skip CI\" | Trivial changes break builds. CI is fast for trivial changes anyway. |\n| \"The test is flaky, just re-run\" | Flaky tests mask real bugs and waste everyone's time. Fix the flakiness. |\n| \"We'll add CI later\" | Projects without CI accumulate broken states. Set it up on day one. |\n| \"Manual testing is enough\" | Manual testing doesn't scale and isn't repeatable. Automate what you can. |\n\n## Red Flags\n\n- No CI pipeline in the project\n- CI failures ignored or silenced\n- Tests disabled in CI to make the pipeline pass\n- Production deploys without staging verification\n- No rollback mechanism\n- Secrets stored in code or CI config files (not secrets manager)\n- Long CI times with no optimization effort\n\n## Verification\n\nAfter setting up or modifying CI:\n\n- [ ] All quality gates are present (lint, types, tests, build, audit)\n- [ ] Pipeline runs on every PR and push to main\n- [ ] Failures block merge (branch protection configured)\n- [ ] CI results feed back into the development loop\n- [ ] Secrets are stored in the secrets manager, not in code\n- [ ] Deployment has a rollback mechanism\n- [ ] Pipeline runs in under 10 minutes for the test suite","tags":["and","automation","agent","skills","addyosmani","agent-skills","antigravity","antigravity-ide","claude-code","cursor"],"capabilities":["skill","source-addyosmani","skill-ci-cd-and-automation","topic-agent-skills","topic-antigravity","topic-antigravity-ide","topic-claude-code","topic-cursor","topic-skills"],"categories":["agent-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/addyosmani/agent-skills/ci-cd-and-automation","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add addyosmani/agent-skills","source_repo":"https://github.com/addyosmani/agent-skills","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 43270 github stars · SKILL.md body (10,750 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T18:50:21.019Z","embedding":null,"createdAt":"2026-04-18T20:32:29.227Z","updatedAt":"2026-05-18T18:50:21.019Z","lastSeenAt":"2026-05-18T18:50:21.019Z","tsv":"'1':738,999 '10':742,1036,1432 '100':744 '10s':391 '15':823 '16':365 '2':931 '22':305,411,505,1160,1188,1216 '3':139 '30':148 '5':399,946,1246 '5432':380,381 '5432/testdb':434,452 '5s':395 'a/b':746 'accident':476 'accumul':984,1299 'across':1099 'action':269 'actions/cache':1051 'actions/checkout':296,402,496,681,1151,1179,1207 'actions/setup-node':299,405,499,1154,1182,1210 'actions/upload-artifact':537 'ad':169 'add':1293 'agent':72,555,562,580,600,610,620,631,641 'ai':561 'analysi':113 'anyway':1269 'api/db':222 'appli':1038 'approv':1000,1027 'assum':987 'audit':230,232,341,344,346,1389 'audit-level':345 'auto':809,817,1020 'auto-merg':1019 'autom':5,6,25,39,41,172,182,923,1321 'automat':1029 'back':553,723,1408 'basic':271 'batch':126 'becom':790 'behavior':749 'behind':705 'beyond':924 'block':1400 'branch':281,284,1011,1402 'break':960,978,1261 'broken':981,1300 'bug':95,103,1282 'build':16,57,151,216,219,334,338,471,523,527,639,947,959,962,982,1069,1095,1135,1262,1388 'bundl':234 'bundles':236 'cach':306,412,506,1048,1056,1137,1161,1189,1217 'canari':733,777 'catch':68,85 'caught':96,104 'caus':976 'cd':3 'chang':47,82,140,179,192,975,1077,1254,1260,1268 'check':55,110,173,203,208,237,322,642,994,1005,1024 'checkout':764 'chromium':521 'ci':2,32,167,185,272,277,313,372,416,428,446,457,510,551,559,568,570,582,603,897,911,921,925,955,1006,1030,1046,1165,1193,1221,1230,1238,1258,1263,1294,1298,1328,1333,1341,1360,1367,1379,1405 'ci-cd-and-autom':1 'ci-on':456 'ci/cd':7,37,58 'clean':829 'cleanup':795 'cmd':385 'code':262,711,732,785,1358,1422 'commit':617,881,887,891 'common':1226 'compar':748 'confid':152 'config':643,1361 'configur':28,174,270,1404 'consist':78 'context':483 'cop':948,963 'copi':572 'cost':99,107 'coverag':332,1225 'cpu':1133 'cpu-heavi':1132 'creat':773,799 'credenti':465,480 'critic':1111 'databas':350,426,444,460 'date':796 'day':1306 'db':368,377,431,449 'dead':784 'debt':792 'debug':144,184,634,1252 'debugging-and-error-recoveri':633 'decoupl':696 'dep':520 'depend':310,645,1049 'dependabot':926 'deploy':18,35,137,175,424,646,649,655,660,666,684,697,700,808,813,834,867,869,908,1348,1423 'deploy-preview':665 'descript':849 'design':950 'detect':827 'develop':884,889,1411 'directori':937 'disabl':253,726,1339 'dispatch':846 'doc':1090 'docs-on':1089 'doesn':1314 'done':830 'e.g':1085 'e2e':225,484,487,530,1087 'earli':88,718 'easier':142 'ecosystem':935 'effort':1372 'els':989 'enabl':713,719,736,774 'enforc':61 'enough':1311 'env':366,425,443,885 'env.example':880 'env.test':890 'environ':878,893 'error':587,590,619,623,636,640,822,826 'eslint':204 'establish':34 'even':454 'everi':64,80,191,650,833,1393 'everyon':986,1285 'exampl':1136 'exceed':1035 'fail':248,259,569,571,584 'failur':186,540,552,574,609,630,1334,1399 'fast':1265 'faster':122 'featur':692,694,704,735,754,757 'featureflags.isenabled':761 'feed':550,576,1407 'feedback':565 'file':1362 'filter':1080 'fix':249,260,591,601,615,626,968,991,1288 'flag':693,695,706,728,758,771,782,786,1326 'flaki':1273,1278,1290 'flow':765 'follow':632 'forc':1015 'force-push':1014 'forev':789 'frequent':129,149 'full':778 'gate':27,43,189,196,242,1382 'get':652 'github':268,462,901,1123 'github-host':1122 'github.event':675 'github/dependabot.yml':929 'github/workflows/ci.yml':275 'goe':193 'good':472 'green':956 'habit':473 'hardcod':468 'health':384,389,393,397 'health-cmd':383 'health-interv':388 'health-retri':396 'health-timeout':392 'heavi':1134 'high':348 'host':1124,1130 'hour':108,1250 'human':70 'ignor':1335 'imag':363 'impact':1044 'incomplet':701 'increas':134 'input':847 'inputs.version':877 'instal':309,512,517 'instead':729,1118 'integr':221,351,354,436,442 'interv':390,939 'isn':1318 'isreadi':387 'issu':593 'jest/vitest':214 'job':286,856,965,1062,1073,1084,1141 'keep':954 'key':606 'larger':1120,1125 'later':1295 'latest':293,360,493,673,863,1148,1176,1204 'least':998 'left':84 'level':347 'lifecycl':772 'limit':945 'lint':53,98,202,247,250,315,319,608,614,1066,1142,1169,1385 'live':788 'll':1292 'local':596,888 'localhost':433,451 'locat':624 'long':1366 'loop':566,1412 'main':282,285,717,806,1018,1398 'make':1343 'manag':879,1365,1419 'manual':657,810,814,839,1308,1312 'mask':1280 'matrix':1094 'mechan':62,1354,1427 'merg':198,715,804,1002,1010,1021,1028,1401 'migrat':419,423 'minut':100,824,1037,1247,1433 'miss':73 'modifi':15,171,1378 'modul':1060 'monitor':820 'move':109 'multipl':1100 'must':1007 'name':276,308,314,320,327,333,339,417,435,511,522,528,542,676,683,842,865 'need':23 'never':913 'new':164,734,763 'new-checkout-flow':762 'node':303,409,503,1055,1059,1158,1186,1214 'node-vers':302,408,502,1157,1185,1213 'noemit':210,326,1197 'note':453 'npm':217,231,307,312,317,330,336,343,413,415,439,507,509,525,612,936,1162,1164,1167,1190,1192,1218,1220,1223 'npx':324,421,515,533,687,874,1195 'one':146,1307 'open':201,942 'open-pull-requests-limit':941 'optim':1031,1102,1234,1239,1371 'option':226,382,1057 'order':1042 'output':575 'overview':40 'packag':934 'package-ecosystem':933 'parallel':1064,1072,1139 'pass':51,206,211,215,220,224,228,233,1008,1025,1346 'password':375,378,432,450 'past':588 'path':546,1079,1112 'pattern':607,759 'person':973 'pg':386 'pipelin':8,19,91,168,176,190,273,583,1034,1047,1236,1248,1329,1345,1390,1428 'plan':832 'platform':909 'playwright':513,516,534,544,548 'playwright-report':543,547 'playwright/cypress':227 'port':379 'possibl':93 'postgr':362,364,367,370,374 'power':557 'pr':651,663,803,993,1394 'present':1384 'prettier':205 'prevent':475,980,1249 'preview':648,654,661,667,685 'previous':872 'prisma':422 'problem':86 'process':156 'product':49,106,121,812,904,915,1347 'project':165,1296,1332 'protect':1012,1403 'prs':1092 'pull':199,279,677,943 'push':283,598,602,1016,1396 'qualiti':26,42,188,287,1381 'rather':466 'ration':1227,1228 're':1276 're-run':1275 'reach':48 'read':621 'readi':238,721 'real':895,1281 'realiti':1229 'recoveri':637 'red':1325 'redeploy':725 'reduc':131 'releas':130,150,155,699 'remov':780,1106 'renderlegacycheckout':770 'rendernewcheckout':768 'renov':927 'repeat':1320 'report':545,549 'request':200,280,678,944 'requir':854,995,1003 'respons':952 'result':1406 'retri':398 'return':767,769 'reus':477 'revers':837 'revert':731,970 'review':240,996 'risk':132 'riski':703 'role':949 'roll':722 'rollback':828,831,840,843,852,857,866,876,1353,1426 'rollout':779,802 'rule':255 'run':218,289,311,316,318,323,329,335,337,342,356,414,418,420,438,440,489,508,514,524,526,529,532,604,611,613,669,686,745,859,868,1061,1075,1113,1144,1163,1166,1168,1172,1191,1194,1200,1219,1222,1277,1391,1429 'runner':30,1101,1121,1126 'runs-on':288,355,488,668,858,1143,1171,1199 'safer':124 'scale':1316 'schedul':938,1117 'secret':463,896,898,902,905,916,919,1355,1364,1413,1418 'secrets.ci':376,430,448 'secrets.vercel':690 'secur':229,340 'see':1237 'self':1129 'self-host':1128 'separ':918,1071 'servic':361 'set':12,161,793,1302,1375 'setup':9,1054 'setup-nod':1053 'shard':1096 'shift':83 'ship':710 'silenc':1337 'simpl':756 'singl':81 'size':235 'skill':66,638 'skill-ci-cd-and-automation' 'skip':245,265,1082,1086,1243,1257 'slow':1045,1107,1233 'smaller':125 'someon':951,988 'source-addyosmani' 'specif':589 'specifi':871 'split':1065 'stage':118,119,801,807,819,1350 'state':1301 'static':112 'status':1004 'step':294,400,494,679,864,1149,1177,1205 'store':899,906,1356,1415 'strategi':36,647,1040 'suit':1098,1105,1437 'technic':791 'templat':882 'test':29,52,115,116,213,223,258,267,328,331,352,437,441,459,479,485,531,535,629,658,747,776,892,922,1068,1097,1104,1108,1198,1224,1271,1279,1309,1313,1338,1387,1436 'testdb':369 'time':1287,1368 'timeout':394 'token':689,691 'topic-agent-skills' 'topic-antigravity' 'topic-antigravity-ide' 'topic-claude-code' 'topic-cursor' 'topic-skills' 'trigger':181,815 'trivial':1256,1259,1267 'true':855 'tsc':209,325,1196 'type':54,207,321,618,628,1386 'typecheck':1067,1170 'typescript':755 'ubuntu':292,359,492,672,862,1147,1175,1203 'ubuntu-latest':291,358,491,671,861,1146,1174,1202 'unit':212 'unrel':1083 'updat':932 'upstream':111 'url':427,445 'use':10,20,160,295,298,401,404,461,495,498,536,680,917,1050,1078,1093,1119,1150,1153,1178,1181,1206,1209 'user':371,373,429,447,740 'userid':766 'v4':297,300,403,406,497,500,538,682,1152,1155,1180,1183,1208,1211 'valu':469 'vault':903,910 'vercel':688,875 'vercel/netlify/etc':664 'verif':183,811,1351,1373 'verifi':595 'version':304,410,504,848,850,873,930,1159,1187,1215 'wast':1284 'week':940 'whose':974 'window':825 'with-dep':518 'without':50,712,724,752,1297,1349 'workflow':841,845 'yaml':274,353,486,659,838,928,1140","prices":[{"id":"13736c39-450b-4a6b-8755-c7df74db4f1f","listingId":"249715cd-823e-4a71-93ad-5415a74d2417","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"addyosmani","category":"agent-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T20:32:29.227Z"}],"sources":[{"listingId":"249715cd-823e-4a71-93ad-5415a74d2417","source":"github","sourceId":"addyosmani/agent-skills/ci-cd-and-automation","sourceUrl":"https://github.com/addyosmani/agent-skills/tree/main/skills/ci-cd-and-automation","isPrimary":false,"firstSeenAt":"2026-04-18T21:52:55.126Z","lastSeenAt":"2026-05-18T18:50:21.019Z"},{"listingId":"249715cd-823e-4a71-93ad-5415a74d2417","source":"skills_sh","sourceId":"addyosmani/agent-skills/ci-cd-and-automation","sourceUrl":"https://skills.sh/addyosmani/agent-skills/ci-cd-and-automation","isPrimary":true,"firstSeenAt":"2026-04-18T20:32:29.227Z","lastSeenAt":"2026-05-07T22:40:26.966Z"}],"details":{"listingId":"249715cd-823e-4a71-93ad-5415a74d2417","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"addyosmani","slug":"ci-cd-and-automation","github":{"repo":"addyosmani/agent-skills","stars":43270,"topics":["agent-skills","antigravity","antigravity-ide","claude-code","cursor","skills"],"license":"mit","html_url":"https://github.com/addyosmani/agent-skills","pushed_at":"2026-05-16T22:00:25Z","description":"Production-grade engineering skills for AI coding agents.","skill_md_sha":"118456fcb10225c030769a4fee7815b9c536b0ce","skill_md_path":"skills/ci-cd-and-automation/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/addyosmani/agent-skills/tree/main/skills/ci-cd-and-automation"},"layout":"multi","source":"github","category":"agent-skills","frontmatter":{"name":"ci-cd-and-automation","description":"Automates CI/CD pipeline setup. Use when setting up or modifying build and deployment pipelines. Use when you need to automate quality gates, configure test runners in CI, or establish deployment strategies."},"skills_sh_url":"https://skills.sh/addyosmani/agent-skills/ci-cd-and-automation"},"updatedAt":"2026-05-18T18:50:21.019Z"}}