# GitHub Container Registry Setup for Slipmatz Web ## Overview The slipmatz-web application is automatically built and published to GitHub Container Registry (GHCR) on every push to main/develop branches. ## Container Registry URL ``` ghcr.io/franknstayn/slipmatz-web:latest ``` ## GitHub Actions Workflow The workflow (`.github/workflows/docker-publish.yml`) automatically: 1. Builds the Docker image on every push to `main` or `develop` 2. Pushes to GitHub Container Registry 3. Tags images with: - `latest` (for main branch) - Branch name (e.g., `develop`) - Git SHA (e.g., `main-abc1234`) - Version tags (for tagged releases) ## Repository Setup ### 1. Enable GitHub Actions - Go to repository Settings → Actions → General - Ensure "Read and write permissions" is enabled for GITHUB_TOKEN ### 2. Make Package Public (Optional) - Go to repository → Packages → slipmatz-web - Package settings → Change visibility → Public - (Or keep private if preferred) ## Deployment ### Pull from Registry (Recommended for Production) ```bash cd crew-infrastructure docker compose pull slipmatz_web docker compose up -d slipmatz_web ``` ### Build Locally (Development) Uncomment the `build` section in docker-compose.yml: ```yaml slipmatz_web: build: context: ../apps/slipmatz-web dockerfile: Dockerfile # image: ghcr.io/franknstayn/slipmatz-web:latest ``` ## Using Specific Versions ### Pull specific tag ```bash docker pull ghcr.io/franknstayn/slipmatz-web:develop docker pull ghcr.io/franknstayn/slipmatz-web:v1.0.0 docker pull ghcr.io/franknstayn/slipmatz-web:main-abc1234 ``` ### Use in docker-compose.yml ```yaml slipmatz_web: image: ghcr.io/franknstayn/slipmatz-web:v1.0.0 ``` ## CI/CD Pipeline ### Automatic Builds Trigger On: - Push to `main` → builds `latest` tag - Push to `develop` → builds `develop` tag - Create tag `v*` → builds version tags - Pull request → builds but doesn't push ### Workflow Features: - ✅ Docker layer caching (faster builds) - ✅ Multi-platform support ready - ✅ Automatic tagging strategy - ✅ Build cache optimization ## Manual Build and Push If you need to manually build and push: ```bash # Login to GHCR echo $GITHUB_TOKEN | docker login ghcr.io -u USERNAME --password-stdin # Build and tag cd apps/slipmatz-web docker build -t ghcr.io/franknstayn/slipmatz-web:latest . # Push docker push ghcr.io/franknstayn/slipmatz-web:latest ``` ## Troubleshooting ### Authentication Error If you get permission denied when pulling: ```bash # Login with GitHub Personal Access Token echo $GITHUB_TOKEN | docker login ghcr.io -u franknstayn --password-stdin ``` Create token at: https://github.com/settings/tokens - Scope needed: `read:packages` ### Image Not Found - Check if workflow ran successfully in Actions tab - Verify package exists at: https://github.com/franknstayn?tab=packages - Ensure package visibility matches your needs (public/private) ### Old Image Cached ```bash docker compose pull slipmatz_web --no-cache docker compose up -d slipmatz_web ``` ## Benefits ✅ **Faster Deployments**: Pull pre-built images instead of building on server ✅ **Version Control**: Track and rollback to specific image versions ✅ **Consistent Builds**: Same image across environments ✅ **CI/CD Ready**: Automatic builds on code push ✅ **Free**: GitHub Packages is free for public repos ## Next Steps 1. Push code to trigger first build 2. Verify image appears in GitHub Packages 3. Pull and deploy on production server 4. Set up similar workflow for slipmatz-backend