Some checks failed
Go CI/CD Pipeline / Lint and Format (push) Successful in 4m51s
Docker Build and Publish / Version Bump (push) Successful in 4m54s
Docker Build and Publish / Build and Push Docker Image (push) Failing after 2m51s
Go CI/CD Pipeline / Build and Test (push) Successful in 9m47s
Go CI/CD Pipeline / Version Management (push) Successful in 12s
- Add swag fmt to git pre-commit hook and CI/CD pipeline - Create comprehensive CONTRIBUTING.md guide with AI section - Update ADR-0013 with swag fmt documentation - Fix swagger generation to include all endpoints - Improve local testing scripts and workflows - Update Dockerfile for better swagger handling - Fix CI/CD workflow file references
305 lines
7.1 KiB
Markdown
305 lines
7.1 KiB
Markdown
# Local CI/CD Testing Guide
|
|
|
|
This guide explains how to test the CI/CD pipeline locally without requiring a Gitea instance.
|
|
|
|
## Overview
|
|
|
|
The local CI/CD testing allows you to:
|
|
- Test the entire build process locally
|
|
- Simulate version bumping based on commit conventions
|
|
- Build Docker images with the correct version tags
|
|
- Test the container before pushing to production
|
|
|
|
## Available Testing Methods
|
|
|
|
### 1. Interactive Local Testing Script
|
|
|
|
**File:** `scripts/test-local-ci-cd.sh`
|
|
|
|
**What it does:**
|
|
- Installs dependencies
|
|
- Generates Swagger documentation
|
|
- Runs compilation and tests
|
|
- Builds binaries
|
|
- Simulates version bumping
|
|
- Provides Docker build instructions
|
|
- Optionally builds and runs Docker container
|
|
|
|
**Usage:**
|
|
```bash
|
|
./scripts/test-local-ci-cd.sh
|
|
```
|
|
|
|
**Features:**
|
|
- Interactive prompts for Docker build and run
|
|
- Automatic endpoint testing
|
|
- Clear instructions for each step
|
|
- Version-aware Docker image tagging
|
|
|
|
### 2. Local CI/CD Workflow
|
|
|
|
**File:** `.gitea/workflows/test-local-ci-cd.yaml`
|
|
|
|
**What it does:**
|
|
- Simulates the CI/CD pipeline in a workflow format
|
|
- Provides detailed instructions for local Docker builds
|
|
- Shows version bump simulation
|
|
- Lists all test results
|
|
|
|
**Usage:**
|
|
This workflow can be triggered manually or on test/feature branches.
|
|
|
|
### 3. Workflow Validation
|
|
|
|
**File:** `scripts/cicd/validate-workflow.sh`
|
|
|
|
**What it does:**
|
|
- Validates YAML syntax
|
|
- Checks required workflow fields
|
|
- Validates job structure
|
|
- Verifies Arcodange-specific configurations
|
|
|
|
**Usage:**
|
|
```bash
|
|
./scripts/cicd/validate-workflow.sh
|
|
```
|
|
|
|
## Step-by-Step Local Testing
|
|
|
|
### 1. Run the Interactive Script
|
|
|
|
```bash
|
|
cd /Users/gabrielradureau/Work/Vibe/DanceLessonsCoach
|
|
./scripts/test-local-ci-cd.sh
|
|
```
|
|
|
|
### 2. Follow the Prompts
|
|
|
|
The script will guide you through:
|
|
- Environment setup
|
|
- Dependency installation
|
|
- Code compilation and testing
|
|
- Binary building
|
|
- Version bump simulation
|
|
- Docker build options
|
|
|
|
### 3. Docker Testing (Optional)
|
|
|
|
If you choose to build the Docker image:
|
|
|
|
```bash
|
|
# Build with current version
|
|
docker build -t dance-lessons-coach:$CURRENT_VERSION .
|
|
|
|
# Tag as latest
|
|
docker tag dance-lessons-coach:$CURRENT_VERSION dance-lessons-coach:latest
|
|
|
|
# Check if port is available
|
|
./scripts/check-port.sh 8080 8081 8082
|
|
|
|
# Run the container (use available port)
|
|
docker run -d -p 8080:8080 --name dance-lessons-coach-test dance-lessons-coach:$CURRENT_VERSION
|
|
# Or use alternative port if 8080 is in use
|
|
docker run -d -p 8081:8080 --name dance-lessons-coach-test dance-lessons-coach:$CURRENT_VERSION
|
|
|
|
# Branch-specific naming (recommended for multiple branches)
|
|
BRANCH=$(git rev-parse --abbrev-ref HEAD | tr '/' '-')
|
|
docker run -d -p 8080:8080 --name "dance-lessons-coach-$BRANCH" dance-lessons-coach:$CURRENT_VERSION
|
|
```
|
|
|
|
**Port Checking:**
|
|
The script automatically checks if port 8080 is available and suggests alternatives.
|
|
|
|
**Container Management:**
|
|
- Automatically removes existing containers with the same name
|
|
- Uses branch-based naming to avoid conflicts
|
|
- Supports multiple branch testing simultaneously
|
|
|
|
### 4. Test the Container
|
|
|
|
```bash
|
|
# Health check
|
|
curl http://localhost:8080/api/health
|
|
|
|
# Greet endpoint
|
|
curl http://localhost:8080/api/v1/greet/YourName
|
|
|
|
# Swagger UI
|
|
open http://localhost:8080/swagger/
|
|
```
|
|
|
|
### 5. Clean Up
|
|
|
|
```bash
|
|
# Stop and remove container (generic)
|
|
docker stop dance-lessons-coach-test
|
|
docker rm dance-lessons-coach-test
|
|
|
|
# Stop and remove branch-specific container
|
|
BRANCH=$(git rev-parse --abbrev-ref HEAD | tr '/' '-')
|
|
docker stop "dance-lessons-coach-$BRANCH"
|
|
docker rm "dance-lessons-coach-$BRANCH"
|
|
|
|
# Remove all test containers
|
|
docker stop $(docker ps -aq --filter "name=dance-lessons-coach")
|
|
docker rm $(docker ps -aq --filter "name=dance-lessons-coach")
|
|
|
|
# Remove images (optional)
|
|
docker rmi dance-lessons-coach:$CURRENT_VERSION
|
|
docker rmi dance-lessons-coach:latest
|
|
```
|
|
|
|
**Cleanup Tips:**
|
|
- Use `docker ps -a` to see all containers
|
|
- Use `docker images` to see all images
|
|
- Use `docker system prune` to clean up unused objects
|
|
|
|
## Version Management
|
|
|
|
The local testing respects the same version conventions as the production CI/CD:
|
|
|
|
- **feat:** commits → MINOR version bump
|
|
- **fix:** commits → PATCH version bump
|
|
- **BREAKING CHANGE:** → MAJOR version bump
|
|
- Other commits → No automatic bump
|
|
|
|
**Manual version bump:**
|
|
```bash
|
|
# Bump patch version
|
|
./scripts/version-bump.sh patch
|
|
|
|
# Bump minor version
|
|
./scripts/version-bump.sh minor
|
|
|
|
# Bump major version
|
|
./scripts/version-bump.sh major
|
|
```
|
|
|
|
## Docker Build Optimization
|
|
|
|
The Dockerfile is optimized to:
|
|
- Only install swag if swagger.json doesn't exist
|
|
- Reuse existing swagger.json from CI/CD workflow
|
|
- Generate documentation only when needed
|
|
|
|
This means:
|
|
- **Local builds:** Will generate swagger docs if missing
|
|
- **CI/CD builds:** Will reuse existing swagger.json
|
|
- **Production builds:** Most efficient path
|
|
|
|
## Testing Different Scenarios
|
|
|
|
### Test Version Bumping
|
|
|
|
```bash
|
|
# Make a feature commit
|
|
git commit -m "feat: add new feature"
|
|
./scripts/test-local-ci-cd.sh # Will show MINOR bump suggestion
|
|
|
|
# Make a fix commit
|
|
git commit -m "fix: resolve issue"
|
|
./scripts/test-local-ci-cd.sh # Will show PATCH bump suggestion
|
|
```
|
|
|
|
### Test Without Docker
|
|
|
|
```bash
|
|
# Run tests without Docker
|
|
./scripts/test-local-ci-cd.sh
|
|
# Answer 'n' when asked about Docker build
|
|
```
|
|
|
|
### Test Specific Components
|
|
|
|
```bash
|
|
# Just build and test
|
|
go build ./...
|
|
go test ./... -cover
|
|
|
|
# Just generate swagger docs
|
|
cd pkg/server && go generate
|
|
|
|
# Just build binaries
|
|
./scripts/build.sh
|
|
|
|
# Check port availability
|
|
./scripts/check-port.sh 8080 8081 8082
|
|
```
|
|
|
|
## Production Deployment
|
|
|
|
When you're ready to deploy:
|
|
|
|
1. **Commit your changes** with appropriate commit message
|
|
2. **Push to main branch** to trigger production CI/CD
|
|
3. **Monitor the workflow** in Gitea Actions
|
|
4. **Verify the Docker image** in Gitea Container Registry
|
|
|
|
```bash
|
|
# Example production deployment
|
|
git add .
|
|
git commit -m "feat: add new API endpoint"
|
|
git push origin main
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### Port Conflicts
|
|
|
|
```bash
|
|
# Check what's using port 8080
|
|
./scripts/check-port.sh 8080
|
|
|
|
# Find and kill process on port 8080
|
|
kill -9 $(lsof -ti :8080)
|
|
|
|
# Use alternative port
|
|
docker run -d -p 8081:8080 --name dance-lessons-coach-test dance-lessons-coach:$CURRENT_VERSION
|
|
```
|
|
|
|
### Docker Build Issues
|
|
|
|
```bash
|
|
# Clean build
|
|
docker system prune -a --volumes
|
|
rm -rf pkg/server/docs/
|
|
./scripts/test-local-ci-cd.sh
|
|
```
|
|
|
|
### Dependency Issues
|
|
|
|
```bash
|
|
# Clean and reinstall
|
|
go clean -cache
|
|
go mod tidy
|
|
./scripts/test-local-ci-cd.sh
|
|
```
|
|
|
|
### Test Failures
|
|
|
|
```bash
|
|
# Run specific test
|
|
go test ./pkg/greet/ -v
|
|
|
|
# Run with race detector
|
|
go test ./... -race
|
|
```
|
|
|
|
## Best Practices
|
|
|
|
1. **Test locally first** before pushing to CI/CD
|
|
2. **Use commit conventions** for automatic version bumping
|
|
3. **Test Docker images** before production deployment
|
|
4. **Clean up containers** after testing
|
|
5. **Monitor CI/CD logs** for any issues
|
|
|
|
## Summary
|
|
|
|
The local CI/CD testing provides:
|
|
- ✅ Full build pipeline simulation
|
|
- ✅ Version-aware Docker builds
|
|
- ✅ Interactive testing experience
|
|
- ✅ Production-like environment
|
|
- ✅ Easy troubleshooting
|
|
|
|
Use these tools to ensure your changes work correctly before deploying to production! |