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
297 lines
7.7 KiB
Markdown
297 lines
7.7 KiB
Markdown
# 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.
|