First
Some checks failed
Build All Docker Images / changes (push) Has been cancelled
Build and Push App Docker Image / build (push) Has been cancelled
Build and Push Node Docker Image / build (push) Has been cancelled
Test and Lint / test-app (push) Has been cancelled
Test and Lint / test-node (push) Has been cancelled
Test and Lint / lint-dockerfiles (push) Has been cancelled
Test and Lint / security-scan (push) Has been cancelled
Build All Docker Images / build-app (push) Has been cancelled
Build All Docker Images / build-node (push) Has been cancelled
Build All Docker Images / summary (push) Has been cancelled
Some checks failed
Build All Docker Images / changes (push) Has been cancelled
Build and Push App Docker Image / build (push) Has been cancelled
Build and Push Node Docker Image / build (push) Has been cancelled
Test and Lint / test-app (push) Has been cancelled
Test and Lint / test-node (push) Has been cancelled
Test and Lint / lint-dockerfiles (push) Has been cancelled
Test and Lint / security-scan (push) Has been cancelled
Build All Docker Images / build-app (push) Has been cancelled
Build All Docker Images / build-node (push) Has been cancelled
Build All Docker Images / summary (push) Has been cancelled
This commit is contained in:
commit
4169337dd0
68 changed files with 8726 additions and 0 deletions
297
CI_CD_DOCUMENTATION.md
Normal file
297
CI_CD_DOCUMENTATION.md
Normal file
|
|
@ -0,0 +1,297 @@
|
|||
# Forgejo Actions CI/CD Documentation
|
||||
|
||||
This document describes the Forgejo Actions workflows for building, testing, and deploying the FRP Manager application.
|
||||
|
||||
## Workflow Overview
|
||||
|
||||
The CI/CD pipeline consists of several automated workflows:
|
||||
|
||||
### 1. **Test and Lint** (`.forgejo/workflows/test.yml`)
|
||||
- **Triggers**: Push to `main`/`develop`, Pull Requests
|
||||
- **Purpose**: Code quality, type checking, and security scanning
|
||||
- **Jobs**:
|
||||
- `test-app`: TypeScript compilation and build testing for the app
|
||||
- `test-node`: TypeScript compilation and build testing for the node
|
||||
- `lint-dockerfiles`: Dockerfile linting with hadolint
|
||||
- `security-scan`: Vulnerability scanning with Trivy
|
||||
|
||||
### 2. **Build App** (`.forgejo/workflows/build-app.yml`)
|
||||
- **Triggers**: Changes to `app/` directory, releases
|
||||
- **Purpose**: Build and push the FRP Manager app Docker image
|
||||
- **Features**: Multi-platform builds (amd64, arm64), caching
|
||||
|
||||
### 3. **Build Node** (`.forgejo/workflows/build-node.yml`)
|
||||
- **Triggers**: Changes to `node/` directory, releases
|
||||
- **Purpose**: Build and push the Home Server Agent Docker image
|
||||
- **Features**: Multi-platform builds (amd64, arm64), caching
|
||||
|
||||
### 4. **Build All** (`.forgejo/workflows/build-all.yml`)
|
||||
- **Triggers**: Push to branches, PRs, releases, manual dispatch
|
||||
- **Purpose**: Intelligent building of both images with change detection
|
||||
- **Features**:
|
||||
- Path-based change detection
|
||||
- Parallel builds when both projects change
|
||||
- Build summary generation
|
||||
|
||||
### 5. **Deploy** (`.forgejo/workflows/deploy.yml`)
|
||||
- **Triggers**: Releases, manual dispatch
|
||||
- **Purpose**: Create deployment packages for production
|
||||
- **Features**:
|
||||
- Environment-specific deployments
|
||||
- Automated deployment package creation
|
||||
- Documentation generation
|
||||
|
||||
## Container Registry
|
||||
|
||||
Images are published to GitHub Container Registry (GHCR):
|
||||
- **App**: `ghcr.io/YOUR_USERNAME/YOUR_REPO/frp-manager-app`
|
||||
- **Node**: `ghcr.io/YOUR_USERNAME/YOUR_REPO/home-server-agent`
|
||||
|
||||
### Image Tags
|
||||
|
||||
- `latest` - Latest build from main branch
|
||||
- `main` - Latest main branch build
|
||||
- `develop` - Latest develop branch build
|
||||
- `v1.0.0` - Specific version tags (on releases)
|
||||
- `1.0` - Major.minor tags (on releases)
|
||||
|
||||
## Setup Requirements
|
||||
|
||||
### 1. Repository Secrets
|
||||
|
||||
The workflows require these secrets to be configured in your Forgejo repository:
|
||||
|
||||
```bash
|
||||
# Container registry access (automatically provided by Forgejo/GitHub)
|
||||
GITHUB_TOKEN # Automatic, no setup needed
|
||||
```
|
||||
|
||||
### 2. Repository Settings
|
||||
|
||||
1. **Enable Actions**: Ensure Forgejo Actions are enabled in repository settings
|
||||
2. **Container Registry**: Enable package publishing permissions
|
||||
3. **Branch Protection**: Consider protecting `main` branch with required status checks
|
||||
|
||||
### 3. Runner Requirements
|
||||
|
||||
Ensure your Forgejo instance has runners configured with:
|
||||
- Docker support
|
||||
- Multi-platform build capabilities (for arm64 builds)
|
||||
- Sufficient storage for image caching
|
||||
|
||||
## Workflow Triggers
|
||||
|
||||
### Automatic Triggers
|
||||
|
||||
```yaml
|
||||
# Push to main/develop branches
|
||||
push:
|
||||
branches: [ main, develop ]
|
||||
|
||||
# Pull requests to main
|
||||
pull_request:
|
||||
branches: [ main ]
|
||||
|
||||
# Release creation
|
||||
release:
|
||||
types: [ published ]
|
||||
|
||||
# Path-based triggers (Build All workflow)
|
||||
paths:
|
||||
- 'app/**'
|
||||
- 'node/**'
|
||||
```
|
||||
|
||||
### Manual Triggers
|
||||
|
||||
```bash
|
||||
# Manual workflow dispatch (via UI or API)
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
environment:
|
||||
description: 'Environment to deploy to'
|
||||
required: true
|
||||
default: 'staging'
|
||||
type: choice
|
||||
options: [ staging, production ]
|
||||
```
|
||||
|
||||
## Build Process
|
||||
|
||||
### 1. **Code Quality Checks**
|
||||
```bash
|
||||
# TypeScript compilation
|
||||
npx tsc --noEmit # App
|
||||
bunx tsc --noEmit # Node
|
||||
|
||||
# Application builds
|
||||
npm run build # App
|
||||
bun run build # Node
|
||||
|
||||
# Dockerfile linting
|
||||
hadolint Dockerfile
|
||||
|
||||
# Security scanning
|
||||
trivy fs .
|
||||
```
|
||||
|
||||
### 2. **Docker Image Building**
|
||||
```bash
|
||||
# Multi-platform builds
|
||||
docker buildx build \
|
||||
--platform linux/amd64,linux/arm64 \
|
||||
--push \
|
||||
--tag ghcr.io/user/repo/app:latest \
|
||||
./app
|
||||
|
||||
# With caching
|
||||
--cache-from type=gha \
|
||||
--cache-to type=gha,mode=max
|
||||
```
|
||||
|
||||
### 3. **Image Publishing**
|
||||
- Images are automatically pushed to GHCR
|
||||
- Tags are generated based on branch/release
|
||||
- Metadata labels are added for tracking
|
||||
|
||||
## Deployment Process
|
||||
|
||||
### 1. **Automated Deployment Package**
|
||||
When a release is created or deployment is manually triggered:
|
||||
|
||||
1. **Image Building**: Latest images are built and pushed
|
||||
2. **Package Creation**: Deployment artifacts are created
|
||||
3. **Documentation**: Deployment instructions are generated
|
||||
4. **Artifact Upload**: Package is uploaded for download
|
||||
|
||||
### 2. **Deployment Package Contents**
|
||||
```
|
||||
frp-manager-deployment-v1.0.0.tar.gz
|
||||
├── docker-compose-app.yml # App deployment config
|
||||
├── docker-compose-node.yml # Node deployment config
|
||||
├── .env.app.example # App environment template
|
||||
├── .env.node.example # Node environment template
|
||||
├── deploy.sh # Deployment script
|
||||
└── README.md # Deployment instructions
|
||||
```
|
||||
|
||||
### 3. **Manual Deployment Steps**
|
||||
|
||||
1. **Download Package**: Get the deployment artifact from the workflow run
|
||||
2. **Extract**: `tar -xzf frp-manager-deployment-v1.0.0.tar.gz`
|
||||
3. **Configure**:
|
||||
```bash
|
||||
cp .env.app.example .env # Configure app environment
|
||||
cp .env.node.example .env # Configure node environment
|
||||
```
|
||||
4. **Deploy App** (VPS):
|
||||
```bash
|
||||
docker-compose -f docker-compose-app.yml up -d
|
||||
```
|
||||
5. **Deploy Node** (Home Server):
|
||||
```bash
|
||||
docker-compose -f docker-compose-node.yml up -d
|
||||
```
|
||||
|
||||
## Monitoring and Troubleshooting
|
||||
|
||||
### 1. **Workflow Status**
|
||||
- Check workflow runs in the Actions tab
|
||||
- View build logs for debugging
|
||||
- Monitor image registry for published images
|
||||
|
||||
### 2. **Common Issues**
|
||||
|
||||
**Build Failures**:
|
||||
```bash
|
||||
# Check TypeScript errors
|
||||
npx tsc --noEmit
|
||||
|
||||
# Check Docker build context
|
||||
docker build --no-cache ./app
|
||||
```
|
||||
|
||||
**Image Push Failures**:
|
||||
- Verify GITHUB_TOKEN permissions
|
||||
- Check registry connectivity
|
||||
- Ensure package publishing is enabled
|
||||
|
||||
**Deployment Issues**:
|
||||
- Verify environment variables
|
||||
- Check image availability in registry
|
||||
- Validate Docker Compose syntax
|
||||
|
||||
### 3. **Local Testing**
|
||||
|
||||
Test workflows locally before pushing:
|
||||
|
||||
```bash
|
||||
# Test app build
|
||||
cd app && npm run build
|
||||
|
||||
# Test node build
|
||||
cd node && bun run build
|
||||
|
||||
# Test Docker builds
|
||||
docker build -t test-app ./app
|
||||
docker build -t test-node ./node
|
||||
```
|
||||
|
||||
## Customization
|
||||
|
||||
### 1. **Modify Triggers**
|
||||
Edit workflow files to change when builds occur:
|
||||
```yaml
|
||||
on:
|
||||
push:
|
||||
branches: [ main, develop, feature/* ] # Add feature branches
|
||||
paths:
|
||||
- 'app/**'
|
||||
- 'docs/**' # Add documentation changes
|
||||
```
|
||||
|
||||
### 2. **Add Tests**
|
||||
Extend test workflows with actual test suites:
|
||||
```yaml
|
||||
- name: Run unit tests
|
||||
run: npm test
|
||||
|
||||
- name: Run integration tests
|
||||
run: npm run test:integration
|
||||
```
|
||||
|
||||
### 3. **Custom Deployment**
|
||||
Add deployment to your specific infrastructure:
|
||||
```yaml
|
||||
- name: Deploy to Kubernetes
|
||||
run: kubectl apply -f k8s/
|
||||
|
||||
- name: Deploy via SSH
|
||||
run: |
|
||||
scp deployment.tar.gz user@server:/tmp/
|
||||
ssh user@server 'cd /tmp && ./deploy.sh'
|
||||
```
|
||||
|
||||
## Best Practices
|
||||
|
||||
### 1. **Branch Strategy**
|
||||
- Use `develop` for integration testing
|
||||
- Use `main` for production-ready code
|
||||
- Create releases for versioned deployments
|
||||
|
||||
### 2. **Image Management**
|
||||
- Tag releases with semantic versions
|
||||
- Use `latest` tag sparingly
|
||||
- Clean up old images periodically
|
||||
|
||||
### 3. **Security**
|
||||
- Regularly update base images
|
||||
- Monitor security scan results
|
||||
- Use specific version tags in production
|
||||
|
||||
### 4. **Performance**
|
||||
- Leverage build caching
|
||||
- Use multi-stage Docker builds
|
||||
- Optimize image sizes
|
||||
|
||||
This CI/CD setup provides a robust foundation for building, testing, and deploying the FRP Manager application with proper automation and quality gates.
|
||||
Loading…
Add table
Add a link
Reference in a new issue