Add comprehensive documentation for setting up the personal
access token required for the Forgejo Actions CI/CD pipeline
to push Docker images to the container registry.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Change from GITEA_TOKEN to FORGEJO_TOKEN to match the
configured repository secret.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
The docker:latest container doesn't have Node.js, which is
required by actions/checkout@v4. Use manual git clone instead.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Run the job in a docker:latest container which has Docker
pre-installed, avoiding the need to install it manually.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Remove DIND complexity in favor of standard Docker socket mounting:
- Use actions/checkout@v4 instead of manual git clone
- Remove DOCKER_HOST configuration
- Remove Docker installation steps
- Rely on runner's Docker daemon access
This requires runner to be configured with Docker socket mount.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Simplify Docker installation by downloading the static binary
directly. This avoids repository/OS version detection issues
and ensures we get a recent Docker client with API v1.44+.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
The docker.io package from apt provides Docker client API v1.41,
which is too old for the DIND server (requires v1.44+).
Install docker-ce-cli from Docker's official repository to get
a compatible client version.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add env.DOCKER_HOST at workflow level
- Use host IP that DIND is exposed on
- Ensures all docker commands use TCP connection to DIND
- Shows DOCKER_HOST value in logs for debugging
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Get default gateway IP from routing table
- Test connection to DIND on gateway
- Provide instructions if connection fails
- Network isolation might need runner configuration fix
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Test multiple possible DIND hostnames/IPs
- Try docker-runner.docker.internal, host.docker.internal, 172.17.0.1
- Automatically set DOCKER_HOST when connection succeeds
- Verify with docker version before proceeding
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Run workflow in docker:latest container (has docker CLI)
- Set DOCKER_HOST to connect to DIND daemon
- Install git in Alpine container
- Enables Docker commands in job container
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Clone repository and checkout specific SHA
- Build Docker image with latest and SHA tags
- Push to Forgejo container registry
- Clean and simple workflow now that DNS is fixed
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Use only built-in commands (cat, wget, bash)
- Test basic connectivity with /dev/tcp
- 5 second timeouts to prevent hanging
- Check if runner has ANY internet access
- Diagnose runner network configuration issues
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Install required debug tools first (iproute2, dnsutils, etc)
- Use fallbacks for commands that might not exist
- Better error handling in clone step
- Add IP-based clone fallback with SSL verification disabled
- Suppress apt-get errors for missing packages
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Check DNS configuration and resolv.conf
- Test DNS resolution with nslookup and dig
- Test network connectivity with ping and curl
- Show environment variables and git config
- Attempt IP-based clone if DNS fails
- Debug all network and DNS issues
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Remove GitHub Actions marketplace actions (uses directive)
- Use shell commands instead for better compatibility
- Switch from gitea context to github context variables
- Use Docker container to run build commands
Fixes YAML schema validation errors in Forgejo runner
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Remove hardcoded values from docker-compose.yml
- Use environment variables from .env file instead
- Update .env.example with placeholder values and instructions
- Update DOCKER_README.md with .env file setup instructions
- Fixes WebSocket origin check by allowing PHX_HOST to be configured per environment
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Reorder Dockerfile to create phoenix user before copying entrypoint.sh
- Use --chown flag to set proper ownership of entrypoint.sh
- Resolves "Permission denied" error when starting container
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add OpenSSL 3.x libraries to runtime stage (libcrypto3, libssl3, openssl-dev)
- Fix deprecation warning by adding parentheses to function calls in release.ex
- Resolves crypto library loading errors in Docker container
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Created .env.example with all required environment variables
- Updated .gitignore to exclude .env files from version control
- Includes instructions for generating secure SECRET_KEY_BASE
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
The phoenix-colocated JS files are generated during Elixir compilation.
Reordered steps to:
1. Compile Elixir code (generates phoenix-colocated files)
2. Copy assets
3. Deploy assets (esbuild can now find phoenix-colocated imports)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Modern Phoenix apps don't use npm. They use standalone esbuild and
tailwind binaries. Removed npm installation and npm ci/deploy commands.
The mix assets.deploy task handles all asset compilation.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
The release candidate version 1.19.0-rc.0-otp-28-alpine is not available
on Docker Hub. Switched to stable elixir:1.17-alpine which is compatible
with the application.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Automatically builds Docker image on push to main
- Pushes to Forgejo container registry
- Tags with latest, branch name, and commit SHA
- Includes build cache optimization
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Features:
- User registration and authentication with email/password
- Admin login with username-based authentication (separate from regular users)
- Review system for contractors to rate clients
- Star rating system with review forms
- Client identification with private data protection
- Contractor registration with document verification
- Admin dashboard for review management
- Contact form (demo, non-functional)
- Responsive navigation with DaisyUI components
- Docker Compose setup for production deployment
- PostgreSQL database with Ecto migrations
- High Vis color scheme (dark background with safety orange/green)
Admin credentials: username: admin, password: admin123
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>