mirror of
https://github.com/ngthanhvu/kr-phim.git
synced 2026-08-10 14:07:47 +00:00
- 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
7.5 KiB
7.5 KiB
name, display_name, description
| name | display_name | description |
|---|---|---|
| ci-cd-builder | CI/CD Builder | 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.jsonfor 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)
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)
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)
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:
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
- Cache node_modules — Use
actions/cacheoractions/setup-nodewithcache: 'npm' - Separate CI/CD — Keep CI (tests/lint) separate from deployment workflows
- Environment-specific secrets — Use different secrets for staging vs production
- Pipeline caching — Cache Docker layers and build artifacts between runs
- Parallel jobs — Run lint, test, and build in parallel when possible
- Rollback strategy — Always keep previous image tags for quick rollback
- Health checks — Add post-deploy health check steps
- 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— Ensurenode_modules,.git, and logs are excluded - Large images — Use multi-stage builds to minimize image size
- Slow installs — Always use
npm ciinstead ofnpm installin 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