# CI/CD Scripts for DanceLessonsCoach ## ๐Ÿš€ Quick Start for Contributors ### You Only Need These Commands ```bash # 1. Run tests (this is what matters most!) go test ./... # 2. Build binaries ./scripts/build.sh # 3. Check formatting go fmt ./... # That's it! The CI/CD pipeline will handle the rest when you create a PR. ``` ## ๐Ÿ“– Understanding the CI/CD Pipeline ### What Happens Automatically When you push code or create a PR, GitHub Actions runs: 1. **Go CI/CD Pipeline** (`.gitea/workflows/go-ci-cd.yaml`) - Builds all Go packages - Runs tests with coverage - Checks code formatting - Validates workflow structure 2. **Docker Image Pipeline** (`.gitea/workflows/dockerimage.yaml`) - Builds Docker image (on main branch only) - Publishes to Gitea Container Registry - Tags with version and commit SHA ### When Does It Run? | Event | Go CI/CD | Docker Image | |-------|---------|--------------| | Push to `main` | โœ… Yes | โœ… Yes | | Push to `feature/*` | โœ… Yes | โŒ No | | Push to `fix/*` | โœ… Yes | โŒ No | | Push to `ci/*` | โœ… Yes | โŒ No | | Pull Request | โœ… Yes | โŒ No | | Manual trigger | โœ… Yes | โœ… Yes | ## ๐Ÿงช Local Testing Options ### Option 1: Simple Validation (No Docker Required) ```bash # Just run the essentials ./scripts/cicd/contributor-quickstart.sh ``` This checks: - โœ… Go installation - โœ… All tests pass - โœ… Code formatting - โœ… Go vet analysis - โœ… Workflow structure ### Option 2: Docker-Based Testing (Recommended) ```bash # Test workflow compatibility with GitHub Actions ./scripts/cicd/test-act-local.sh ``` **Requirements:** - Docker installed and running - Internet connection (to pull images) **What it does:** - Validates YAML syntax - Checks workflow structure - Simulates GitHub Actions execution - Tests both workflow files ### Option 3: Full CI/CD Simulation ```bash # Complete local simulation ./scripts/cicd/test-cicd-simple.sh ``` **Requirements:** - Docker installed and running - More time (pulls multiple images) **What it does:** - YAML linting - YAML validation - Workflow structure validation - Simulates build job - Runs actual Go tests in containers ## ๐Ÿณ Docker Setup Guide ### For Windows Users 1. **Install Docker Desktop** - Download: https://www.docker.com/products/docker-desktop/ - Enable WSL 2 backend (recommended) - Allocate at least 4GB RAM 2. **Verify Installation** ```powershell docker --version docker run hello-world ``` ### For macOS Users 1. **Install Docker Desktop** - Download: https://www.docker.com/products/docker-desktop/ - Grant necessary permissions 2. **Verify Installation** ```bash docker --version docker run hello-world ``` ### For Linux Users 1. **Install Docker Engine** ```bash # Ubuntu/Debian sudo apt-get update sudo apt-get install docker.io docker-compose sudo systemctl enable docker sudo systemctl start docker # Add user to docker group (avoid sudo) sudo usermod -aG docker $USER newgrp docker # Reload group membership ``` 2. **Verify Installation** ```bash docker --version docker run hello-world ``` ## ๐Ÿ”ง Troubleshooting ### Docker Permission Issues **Symptom:** `Got permission denied while trying to connect to the Docker daemon socket` **Solution:** ```bash # Linux/macOS sudo usermod -aG docker $USER newgrp docker # Windows Right-click Docker Desktop โ†’ Settings โ†’ Resources โ†’ WSL Integration โ†’ Enable ``` ### Docker Not Running **Symptom:** `Cannot connect to the Docker daemon` **Solution:** - Windows/macOS: Open Docker Desktop app - Linux: `sudo systemctl start docker` ### Network Issues **Symptom:** `Cannot pull Docker images` **Solution:** ```bash # Check internet connection ping google.com # Try pulling manually first docker pull mikefarah/yq:latest docker pull pipelinecomponents/yamllint:latest ``` ### act Not Installed **Symptom:** `act not found` in `test-act-local.sh` **Solution:** ```bash # Install act (optional - only needed for test-act-local.sh) # macOS brew install act # Linux curl https://raw.githubusercontent.com/nektos/act/master/install.sh | sudo bash # Windows (WSL) curl https://raw.githubusercontent.com/nektos/act/master/install.sh | sudo bash ``` ## ๐Ÿ“š Script Reference | Script | Purpose | Docker Required? | act Required? | |--------|---------|------------------|---------------| | `contributor-quickstart.sh` | Basic validation | โŒ No | โŒ No | | `validate-workflow.sh` | Workflow structure | โŒ No | โŒ No | | `test-act-local.sh` | GitHub Actions compatibility | โœ… Yes | โœ… Yes | | `test-cicd-simple.sh` | Full CI/CD simulation | โœ… Yes | โŒ No | ## ๐ŸŽฏ Best Practices ### Before Submitting a PR 1. **Run tests locally** ```bash go test ./... ``` 2. **Check formatting** ```bash go fmt ./... ``` 3. **Build binaries** ```bash ./scripts/build.sh ``` 4. **Validate workflows** (optional) ```bash ./scripts/cicd/validate-workflow.sh ``` ### Working with the CI/CD Pipeline - **Don't worry about Docker images** - The pipeline builds them automatically - **Focus on tests** - If tests pass locally, they'll pass in CI/CD - **Check PR status** - GitHub will show CI/CD results automatically - **Fix failures** - If CI/CD fails, check the logs and fix issues ## ๐Ÿ”— Useful Links - **GitHub Actions Docs**: https://docs.github.com/en/actions - **Docker Docs**: https://docs.docker.com/ - **act GitHub**: https://github.com/nektos/act - **DanceLessonsCoach CI/CD**: See `.gitea/workflows/` directory ## ๐Ÿ’ก Pro Tips ### Speed Up Local Testing ```bash # Pull Docker images in advance docker pull mikefarah/yq:latest docker pull pipelinecomponents/yamllint:latest docker pull node:16-buster-slim ``` ### Test Specific Workflows ```bash # Test Go CI/CD workflow only act -W .gitea/workflows/go-ci-cd.yaml # Test Docker workflow only act -W .gitea/workflows/dockerimage.yaml ``` ### Dry Run (No Execution) ```bash # Check workflow syntax without running echo 'm' | act -n -W .gitea/workflows/go-ci-cd.yaml ``` ## ๐Ÿ“ž Need Help? If you're stuck with CI/CD setup: 1. **Check this documentation** - Most issues are covered here 2. **Run contributor-quickstart.sh** - It validates the essentials 3. **Ask in the PR** - We'll help you resolve any issues 4. **Check CI/CD logs** - GitHub shows detailed error messages Remember: **You don't need to run CI/CD locally to contribute!** The pipeline runs automatically when you push code.