Skip to content
Back to skills

Ci Cd

ASecurity

CI/CD на GitHub Actions — эталонный PR-workflow (lint+typecheck+test с кэшем npm/pnpm), deploy-workflow с environment и secrets, concurrency (отмена устаревших прогонов), matrix, безопасность (минимальные permissions, опасность pull_request_target, секреты и fork-PR), интеграция с Render (deploy hook / auto-deploy). Use when настраиваешь или чинишь GitHub Actions, pipeline, кэширование CI или деплой по пушу.

  • 2 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 11, 2026
devopspythonnodedockergitci/cd

Works with

  • mcp

Security analysis

A100/100

Scanned September 11, 2026

npx -y skills add Vitammiin/agent-vorcl-flow --skill ci-cd --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Ci Cd?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Ci Cd
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/vitammiin-ci-cd-agent-vorcl-flow/badge)](https://www.skillsdirectory.com/skills/vitammiin-ci-cd-agent-vorcl-flow)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: ci-cd
description: CI/CD на GitHub Actions — эталонный PR-workflow (lint+typecheck+test с кэшем npm/pnpm), deploy-workflow с environment и secrets, concurrency (отмена устаревших прогонов), matrix, безопасность (минимальные permissions, опасность pull_request_target, секреты и fork-PR), интеграция с Render (deploy hook / auto-deploy). Use when настраиваешь или чинишь GitHub Actions, pipeline, кэширование CI или деплой по пушу.
version: 1.0.0
---

# Навык: CI/CD на GitHub Actions

CI — единственный честный gate качества: workflow должен быть валиден (проверен парсером до пуша) и **реально зелёный** в Actions. Секреты — только в GitHub secrets, никогда в YAML/коде.

## 1. Эталонный PR-workflow
```yaml
# .github/workflows/pr.yml
name: PR checks
on: pull_request
permissions:
  contents: read                      # минимальные права — по умолчанию для всех jobs
concurrency:
  group: pr-${{ github.ref }}
  cancel-in-progress: true            # новый пуш в PR отменяет устаревший прогон
jobs:
  checks:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 22            # = версия в Dockerfile/engines — локалка ≈ CI ≈ прод
          cache: npm                  # кэш по lockfile; для pnpm: cache: pnpm + pnpm/action-setup ДО setup-node
      - run: npm ci
      - run: npm run lint
      - run: npm run typecheck
      - run: npm test
```
Шаги — только реально существующие скрипты из `package.json`; не выдумывай `npm run typecheck`, если его нет.

## 2. Deploy-workflow (main → прод)
```yaml
# .github/workflows/deploy.yml
name: Deploy
on:
  push:
    branches: [main]
permissions:
  contents: read
concurrency:
  group: deploy-production
  cancel-in-progress: false           # деплой не отменяем на середине
jobs:
  deploy:
    runs-on: ubuntu-latest
    environment: production           # environment-secrets + опциональный required reviewer как ручной gate
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with: { node-version: 22, cache: npm }
      - run: npm ci && npm run build
      - name: Trigger Render deploy
        run: curl -fsS "${{ secrets.RENDER_DEPLOY_HOOK }}"
```

## 3. Matrix (кратко)
```yaml
strategy:
  matrix: { node: [20, 22] }
steps:
  - uses: actions/setup-node@v4
    with: { node-version: ${{ matrix.node }}, cache: npm }
```
Нужен только библиотекам/пакетам с поддержкой нескольких версий; приложению — одна версия (та же, что в проде).

## 4. Безопасность
- **`permissions` минимальные:** верхнеуровнево `contents: read`; расширяй точечно в job (`pull-requests: write` для комментатора и т.п.). Без блока `permissions` токен получает широкие дефолты.
- **`pull_request_target` опасен:** запускается с секретами в контексте base-ветки, но легко ошибиться и выполнить код из fork-PR (checkout head) → утечка секретов. Не используй без крайней нужды; никогда не сочетай с checkout PR-кода.
- **Секреты и fork-PR:** в `pull_request` из форков `secrets.*` пусты — PR-workflow не должен зависеть от секретов; деплой — только из `push` в main.
- Пинь actions хотя бы мажором (`@v4`); для повышенных требований — по SHA. Никогда не `echo` секреты (маскирование обходимо через трансформации).
- Валидируй YAML до пуша: `actionlint` (если установлен) или парсер (`python3 -c "import yaml,sys; yaml.safe_load(open('.github/workflows/pr.yml'))"`). Помни: реальный прогон подтвердит только push.

## 5. Интеграция с Render
| Способ | Как | Когда |
|---|---|---|
| **Auto-deploy** | Render сам деплоит по пушу в подключённую ветку (настройка сервиса) | по умолчанию — проще всего, CI отдельно гоняет тесты |
| **Deploy hook** | секретный URL сервиса; `curl $RENDER_DEPLOY_HOOK` шагом workflow **после** зелёных тестов | нужен gate «деплой только после CI» — тогда auto-deploy у сервиса выключи |
Hook-URL — секрет (даёт право деплоя) → только GitHub secrets. Наблюдение за деплоем (статус, логи, метрики) — через агента `render` (MCP `get_deploy`/`list_logs`). Прод-деплой и необратимые активации — только с явного подтверждения владельца.

## 6. Типовые ошибки
- Кэш не работает → нет lockfile в корне / `cache: npm` при pnpm-проекте / `pnpm/action-setup` после `setup-node`.
- «Секрет пустой» → fork-PR, environment-секрет без `environment:` в job, или опечатка в имени.
- Дублирующиеся прогоны жгут минуты → нет `concurrency` с `cancel-in-progress`.
- CI зелёный, прод падает → версии Node/баз в CI ≠ прод; выравнивай с Dockerfile (`node-version`, services).

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…