mirror of
https://github.com/ngthanhvu/kr-phim.git
synced 2026-08-10 15:07:46 +00:00
feat: add 188+ agent skills (.agents/) and update project guidelines
- Add 188+ AI agent skill files across 11 categories (Development, DevOps, Security, Data, Design, Writing, Integrations, Documents & Media, Education) - Update CLAUDE.md with new CI/CD Builder skill reference - Update AGENTS.md with complete skill index organized by category - Update .cursorrules configuration file - Add .gitea/ workflows directory
This commit is contained in:
@@ -0,0 +1,278 @@
|
||||
---
|
||||
name: ci-cd-builder
|
||||
display_name: CI/CD Builder
|
||||
description: Create CI/CD pipelines — GitHub Actions, GitLab CI, Jenkins, and CircleCI with test, build, and deploy stages. Use when setting up automation, continuous integration, deployment workflows, or pipeline configuration.
|
||||
---
|
||||
|
||||
# CI/CD Builder
|
||||
|
||||
## Overview
|
||||
|
||||
Create CI/CD pipelines for the CineK projects (`kr-phim` and `telegram-bot`) with test, build, and deploy stages. Supports GitHub Actions as the primary CI/CD platform.
|
||||
|
||||
## When to Use This Skill
|
||||
|
||||
Use **CI/CD Builder** when you need to:
|
||||
|
||||
- Set up GitHub Actions workflows for CI/CD
|
||||
- Automate testing, building, and deployment pipelines
|
||||
- Configure staging vs production deployment environments
|
||||
- Add cache optimization, parallel jobs, or artifact management
|
||||
- Set up auto-deploy on push to main/master branches
|
||||
|
||||
## Project Context
|
||||
|
||||
### kr-phim (Nuxt 4 + Vue 3 + Tailwind v4)
|
||||
- **Build command:** `npm run build`
|
||||
- **Dev command:** `npm run dev`
|
||||
- **Test command:** `npm run test` (if configured)
|
||||
- **Lint command:** `npm run lint`
|
||||
- **Type check:** `npm run typecheck` (if configured)
|
||||
- **Package manager:** npm
|
||||
- **Runtime:** Node.js 20+
|
||||
- **Docker:** Uses docker-compose for development and production
|
||||
|
||||
### telegram-bot
|
||||
- Check `package.json` for exact scripts
|
||||
- May use Python/Node depending on implementation
|
||||
|
||||
## GitHub Actions Workflow Structure
|
||||
|
||||
### Directory Layout
|
||||
|
||||
```
|
||||
.github/
|
||||
├── workflows/
|
||||
│ ├── ci.yml # Continuous Integration (every PR/push)
|
||||
│ ├── deploy-staging.yml # Staging deployment (main branch)
|
||||
│ └── deploy-production.yml # Production deployment (tag/release)
|
||||
├── ISSUE_TEMPLATE/
|
||||
└── PULL_REQUEST_TEMPLATE.md
|
||||
```
|
||||
|
||||
### CI Workflow (ci.yml)
|
||||
|
||||
```yaml
|
||||
name: CI
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches: [main, develop]
|
||||
push:
|
||||
branches: [main, develop]
|
||||
|
||||
jobs:
|
||||
lint-and-test:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '20'
|
||||
cache: 'npm'
|
||||
cache-dependency-path: kr-phim/package-lock.json
|
||||
|
||||
- name: Install dependencies
|
||||
working-directory: ./kr-phim
|
||||
run: npm ci
|
||||
|
||||
- name: Lint
|
||||
working-directory: ./kr-phim
|
||||
run: npm run lint
|
||||
|
||||
- name: Type check
|
||||
working-directory: ./kr-phim
|
||||
run: npm run typecheck || echo "No typecheck script"
|
||||
|
||||
- name: Build
|
||||
working-directory: ./kr-phim
|
||||
run: npm run build
|
||||
```
|
||||
|
||||
### Deploy Staging (deploy-staging.yml)
|
||||
|
||||
```yaml
|
||||
name: Deploy Staging
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
|
||||
jobs:
|
||||
deploy-staging:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '20'
|
||||
cache: 'npm'
|
||||
|
||||
- name: Install dependencies
|
||||
working-directory: ./kr-phim
|
||||
run: npm ci
|
||||
|
||||
- name: Build
|
||||
working-directory: ./kr-phim
|
||||
run: npm run build
|
||||
env:
|
||||
NODE_ENV: production
|
||||
${{ secrets.STAGING_ENV_VARS }}
|
||||
|
||||
- name: Deploy to staging
|
||||
uses: appleboy/ssh-action@v1
|
||||
with:
|
||||
host: ${{ secrets.STAGING_SERVER_HOST }}
|
||||
username: ${{ secrets.STAGING_SERVER_USER }}
|
||||
key: ${{ secrets.STAGING_SERVER_SSH_KEY }}
|
||||
script: |
|
||||
cd /opt/cinek/staging
|
||||
docker compose pull
|
||||
docker compose up -d kr-phim
|
||||
```
|
||||
|
||||
### Deploy Production (deploy-production.yml)
|
||||
|
||||
```yaml
|
||||
name: Deploy Production
|
||||
|
||||
on:
|
||||
release:
|
||||
types: [published]
|
||||
push:
|
||||
tags:
|
||||
- 'v*'
|
||||
|
||||
jobs:
|
||||
deploy-production:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '20'
|
||||
cache: 'npm'
|
||||
|
||||
- name: Install dependencies
|
||||
working-directory: ./kr-phim
|
||||
run: npm ci
|
||||
|
||||
- name: Build
|
||||
working-directory: ./kr-phim
|
||||
run: npm run build
|
||||
env:
|
||||
NODE_ENV: production
|
||||
${{ secrets.PRODUCTION_ENV_VARS }}
|
||||
|
||||
- name: Deploy to production
|
||||
uses: appleboy/ssh-action@v1
|
||||
with:
|
||||
host: ${{ secrets.PRODUCTION_SERVER_HOST }}
|
||||
username: ${{ secrets.PRODUCTION_SERVER_USER }}
|
||||
key: ${{ secrets.PRODUCTION_SERVER_SSH_KEY }}
|
||||
script: |
|
||||
cd /opt/cinek/production
|
||||
docker compose pull
|
||||
docker compose up -d kr-phim
|
||||
```
|
||||
|
||||
## Docker-Based Deployment (Recommended)
|
||||
|
||||
Since the project uses Docker Compose, the preferred deployment strategy:
|
||||
|
||||
```yaml
|
||||
name: Deploy via Docker
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
environment:
|
||||
description: 'Deploy to'
|
||||
required: true
|
||||
default: 'staging'
|
||||
type: choice
|
||||
options:
|
||||
- staging
|
||||
- production
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Build Docker image
|
||||
run: |
|
||||
docker build -t cinemk:$(echo ${{ github.sha }} | cut -c1-7) ./kr-phim
|
||||
|
||||
- name: Push to registry
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
username: ${{ secrets.DOCKER_USERNAME }}
|
||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||
|
||||
- name: Push image
|
||||
run: |
|
||||
docker tag cinemk:$(echo ${{ github.sha }} | cut -c1-7) ${{ secrets.DOCKER_REPO }}:latest
|
||||
docker tag cinemk:$(echo ${{ github.sha }} | cut -c1-7) ${{ secrets.DOCKER_REPO }}:${{ github.sha }}
|
||||
docker push ${{ secrets.DOCKER_REPO }}:latest
|
||||
docker push ${{ secrets.DOCKER_REPO }}:${{ github.sha }}
|
||||
```
|
||||
|
||||
## Best Practices
|
||||
|
||||
1. **Cache node_modules** — Use `actions/cache` or `actions/setup-node` with `cache: 'npm'`
|
||||
2. **Separate CI/CD** — Keep CI (tests/lint) separate from deployment workflows
|
||||
3. **Environment-specific secrets** — Use different secrets for staging vs production
|
||||
4. **Pipeline caching** — Cache Docker layers and build artifacts between runs
|
||||
5. **Parallel jobs** — Run lint, test, and build in parallel when possible
|
||||
6. **Rollback strategy** — Always keep previous image tags for quick rollback
|
||||
7. **Health checks** — Add post-deploy health check steps
|
||||
8. **Notifications** — Add Slack/Discord webhook notifications for deploy status
|
||||
|
||||
## Environment Variables
|
||||
|
||||
Common env vars needed across environments:
|
||||
|
||||
| Variable | Description |
|
||||
|----------|-------------|
|
||||
| `NODE_ENV` | `production` or `development` |
|
||||
| `DATABASE_URL` | Database connection string |
|
||||
| `NUXT_SECRET` | App secret key |
|
||||
| `REDIS_URL` | Redis connection (if used) |
|
||||
| `API_URL` | External API endpoints |
|
||||
|
||||
Store sensitive values in GitHub Secrets — never hardcode them.
|
||||
|
||||
## Common Pitfalls
|
||||
|
||||
- **Missing `.dockerignore`** — Ensure `node_modules`, `.git`, and logs are excluded
|
||||
- **Large images** — Use multi-stage builds to minimize image size
|
||||
- **Slow installs** — Always use `npm ci` instead of `npm install` in CI
|
||||
- **Port conflicts** — Verify ports don't clash in docker-compose
|
||||
- **Secrets leakage** — Never log or expose secrets in workflow outputs
|
||||
|
||||
## Integration Checklist
|
||||
|
||||
After creating a CI/CD pipeline:
|
||||
|
||||
- [ ] Add GitHub repository secrets for all required credentials
|
||||
- [ ] Test the workflow on a feature branch
|
||||
- [ ] Verify staging deployment works end-to-end
|
||||
- [ ] Confirm production deploy only triggers on release/tag
|
||||
- [ ] Add branch protection rules (require CI to pass)
|
||||
- [ ] Document the pipeline in team README
|
||||
Reference in New Issue
Block a user