Automatically commit and push changes to GitHub with zero manual intervention. Features: - File watcher mode: Auto-detects changes in real-time - Timer mode: Commits at regular intervals (default 5 minutes) - Smart exclusions: Ignores temp files, sessions, cache, db files - Retry logic: Auto-retries failed pushes - Change summaries: Detailed commit messages with file lists Components: - auto-deploy.ps1: Core CD engine with file watcher - start-cd.ps1: Easy-to-use wrapper with commands - .cd-config.json: Configuration file - CONTINUOUS_DELIVERY_GUIDE.md: Complete documentation Usage: .\start-cd.ps1 watch # Start file watcher (recommended) .\start-cd.ps1 start # Timer mode (every 5 min) .\start-cd.ps1 once # One-time commit Also removed db_data/ from git tracking (now in .gitignore). Database runtime files should never be committed. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
429 lines
9.6 KiB
Markdown
429 lines
9.6 KiB
Markdown
# EasyStream Continuous Delivery Guide
|
||
|
||
Automatically commit and push your changes to GitHub with zero manual intervention.
|
||
|
||
## Features
|
||
|
||
- **File Watcher Mode**: Detects file changes in real-time and auto-commits after 30 seconds of inactivity
|
||
- **Timer Mode**: Commits and pushes at regular intervals (default: 5 minutes)
|
||
- **Smart Exclusions**: Automatically excludes temporary files, sessions, cache, and database files
|
||
- **Retry Logic**: Automatically retries failed pushes with exponential backoff
|
||
- **Change Summaries**: Generates detailed commit messages with file change lists
|
||
- **Zero Configuration**: Works out of the box with sensible defaults
|
||
|
||
## Quick Start
|
||
|
||
### Option 1: File Watcher Mode (Recommended)
|
||
|
||
This mode monitors your files and automatically commits changes 30 seconds after you stop editing:
|
||
|
||
```powershell
|
||
.\start-cd.ps1 watch
|
||
```
|
||
|
||
You'll see:
|
||
```
|
||
========================================
|
||
EasyStream File Watcher Started
|
||
========================================
|
||
Watching: E:\repos\easystream-main
|
||
Branch: dev
|
||
Debounce: 30 seconds after last change
|
||
========================================
|
||
|
||
✓ File watcher active. Monitoring for changes...
|
||
```
|
||
|
||
When you save a file:
|
||
```
|
||
[14:23:45] Changed: setup.php
|
||
[14:23:47] Changed: f_core/config.href.php
|
||
[14:23:50] Changed: docker-compose.yml
|
||
|
||
Debounce period elapsed. Processing 3 changes...
|
||
ℹ Found 3 changed files
|
||
✓ Committed changes
|
||
✓ Successfully pushed to GitHub
|
||
```
|
||
|
||
### Option 2: Timer Mode
|
||
|
||
Commits and pushes at regular intervals (every 5 minutes by default):
|
||
|
||
```powershell
|
||
.\start-cd.ps1 start
|
||
```
|
||
|
||
Change the interval to 1 minute:
|
||
```powershell
|
||
.\start-cd.ps1 start -Interval 60
|
||
```
|
||
|
||
### Option 3: One-Time Commit
|
||
|
||
Manually trigger a single commit and push:
|
||
|
||
```powershell
|
||
.\start-cd.ps1 once
|
||
```
|
||
|
||
## Configuration
|
||
|
||
Edit [.cd-config.json](.cd-config.json) to customize behavior:
|
||
|
||
```json
|
||
{
|
||
"intervalSeconds": 300,
|
||
"branch": "dev",
|
||
"commitPrefix": "auto:",
|
||
"excludePatterns": [
|
||
"f_data/data_sessions/*",
|
||
"f_data/data_cache/_c_tpl/*",
|
||
".setup_complete",
|
||
"*.log",
|
||
"db_data/*",
|
||
"node_modules/*",
|
||
"vendor/*"
|
||
],
|
||
"enableNotifications": true,
|
||
"autoStart": false
|
||
}
|
||
```
|
||
|
||
### Configuration Options
|
||
|
||
| Option | Description | Default |
|
||
|--------|-------------|---------|
|
||
| `intervalSeconds` | Time between auto-commits (timer mode) | 300 (5 min) |
|
||
| `branch` | Git branch to push to | "dev" |
|
||
| `commitPrefix` | Prefix for auto-generated commit messages | "auto:" |
|
||
| `excludePatterns` | File patterns to ignore | See above |
|
||
| `enableNotifications` | Show Windows notifications (future) | true |
|
||
| `autoStart` | Start CD on system boot (future) | false |
|
||
|
||
## Commands Reference
|
||
|
||
### start-cd.ps1 Commands
|
||
|
||
```powershell
|
||
# Start file watcher mode
|
||
.\start-cd.ps1 watch
|
||
|
||
# Start timer mode (default interval: 5 minutes)
|
||
.\start-cd.ps1 start
|
||
|
||
# Start timer mode with custom interval (60 seconds)
|
||
.\start-cd.ps1 start -Interval 60
|
||
|
||
# Run one-time commit and push
|
||
.\start-cd.ps1 once
|
||
|
||
# Check git status
|
||
.\start-cd.ps1 status
|
||
|
||
# Stop all running CD processes
|
||
.\start-cd.ps1 stop
|
||
|
||
# Show help
|
||
.\start-cd.ps1 help
|
||
```
|
||
|
||
### auto-deploy.ps1 Advanced Usage
|
||
|
||
Direct script usage for advanced scenarios:
|
||
|
||
```powershell
|
||
# File watcher mode with verbose output
|
||
.\auto-deploy.ps1 -WatchMode -Verbose
|
||
|
||
# Timer mode with custom interval and branch
|
||
.\auto-deploy.ps1 -IntervalSeconds 120 -Branch main -Verbose
|
||
|
||
# Custom commit prefix
|
||
.\auto-deploy.ps1 -CommitPrefix "wip:" -IntervalSeconds 60
|
||
```
|
||
|
||
## How It Works
|
||
|
||
### File Watcher Mode
|
||
|
||
1. **Monitors**: Watches all files in the repository using .NET FileSystemWatcher
|
||
2. **Debounces**: Waits 30 seconds after the last file change to avoid committing partial edits
|
||
3. **Excludes**: Filters out temporary files based on `.gitignore` and config patterns
|
||
4. **Commits**: Stages all changes and creates a commit with file change summary
|
||
5. **Pushes**: Uploads to GitHub with retry logic
|
||
6. **Repeats**: Continues monitoring for the next change
|
||
|
||
### Timer Mode
|
||
|
||
1. **Checks**: Scans for changes at regular intervals
|
||
2. **Stages**: Adds all modified, new, and deleted files
|
||
3. **Commits**: Creates a timestamped commit with change summary
|
||
4. **Pushes**: Uploads to GitHub if there are new commits
|
||
5. **Waits**: Sleeps for the configured interval before next check
|
||
|
||
## Commit Message Format
|
||
|
||
Auto-generated commits include:
|
||
|
||
```
|
||
auto: Update at 2025-10-26 14:30:00
|
||
|
||
Changed files:
|
||
- setup.php
|
||
- docker-compose.yml
|
||
- f_core/config.href.php
|
||
- ... and 5 more files
|
||
|
||
🤖 Generated with Claude Code Continuous Delivery
|
||
|
||
Co-Authored-By: Claude <noreply@anthropic.com>
|
||
```
|
||
|
||
## Excluded Files
|
||
|
||
The following files are automatically excluded from commits:
|
||
|
||
- Session files: `f_data/data_sessions/sess_*`
|
||
- Cache files: `f_data/data_cache/_c_tpl/*`
|
||
- Setup marker: `.setup_complete`
|
||
- Database files: `db_data/*`
|
||
- Log files: `*.log`
|
||
- Dependencies: `node_modules/*`, `vendor/*`
|
||
- IDE files: `.vscode/*`, `.idea/*`
|
||
|
||
## Troubleshooting
|
||
|
||
### CD not detecting changes
|
||
|
||
**Problem**: Files changed but no commit triggered
|
||
|
||
**Solution**:
|
||
```powershell
|
||
# Check if files are excluded
|
||
git status
|
||
|
||
# Verify .gitignore doesn't over-exclude
|
||
cat .gitignore
|
||
|
||
# Check CD config
|
||
cat .cd-config.json
|
||
```
|
||
|
||
### Push failed: Authentication required
|
||
|
||
**Problem**: Git asks for credentials
|
||
|
||
**Solution**:
|
||
```powershell
|
||
# Set up Git credential helper (Windows)
|
||
git config --global credential.helper manager
|
||
|
||
# Or use SSH keys
|
||
git remote set-url origin git@github.com:SamiAhmed7777/easystream-main.git
|
||
```
|
||
|
||
### Multiple CD processes running
|
||
|
||
**Problem**: CD commits too frequently
|
||
|
||
**Solution**:
|
||
```powershell
|
||
# Stop all CD processes
|
||
.\start-cd.ps1 stop
|
||
|
||
# Restart with single instance
|
||
.\start-cd.ps1 watch
|
||
```
|
||
|
||
### Large files rejected by GitHub
|
||
|
||
**Problem**: `db_data/*` files are too large
|
||
|
||
**Solution**:
|
||
These files are already excluded in `.gitignore`. If they're already tracked:
|
||
```powershell
|
||
# Remove from git but keep locally
|
||
git rm --cached -r db_data/
|
||
git commit -m "Remove database files from tracking"
|
||
git push
|
||
```
|
||
|
||
## Running as Background Service
|
||
|
||
### Option 1: Windows Task Scheduler
|
||
|
||
1. Open Task Scheduler
|
||
2. Create Basic Task
|
||
3. Trigger: At system startup
|
||
4. Action: Start a program
|
||
- Program: `powershell.exe`
|
||
- Arguments: `-WindowStyle Hidden -File "E:\repos\easystream-main\start-cd.ps1" watch`
|
||
|
||
### Option 2: PowerShell Background Job
|
||
|
||
```powershell
|
||
# Start in background
|
||
Start-Job -ScriptBlock {
|
||
Set-Location "E:\repos\easystream-main"
|
||
.\start-cd.ps1 watch
|
||
}
|
||
|
||
# Check status
|
||
Get-Job
|
||
|
||
# View output
|
||
Receive-Job -Id 1 -Keep
|
||
|
||
# Stop
|
||
Stop-Job -Id 1
|
||
Remove-Job -Id 1
|
||
```
|
||
|
||
### Option 3: Screen/Tmux (Windows Terminal)
|
||
|
||
```powershell
|
||
# Open new Windows Terminal tab
|
||
wt -w 0 nt -d E:\repos\easystream-main powershell -NoExit -Command ".\start-cd.ps1 watch"
|
||
```
|
||
|
||
## Security Considerations
|
||
|
||
### What Gets Committed
|
||
|
||
- Application code (PHP, JavaScript, CSS)
|
||
- Configuration files (docker-compose.yml, .env templates)
|
||
- Documentation (Markdown files)
|
||
- SQL schema files
|
||
|
||
### What's Excluded
|
||
|
||
- Session data (user sessions)
|
||
- Cache (compiled templates)
|
||
- Database runtime files (actual data)
|
||
- Secrets (`.env` files are tracked but should only contain templates)
|
||
|
||
### Best Practices
|
||
|
||
1. **Review `.gitignore`**: Ensure sensitive files are excluded
|
||
2. **Use environment variables**: Never commit actual passwords or API keys
|
||
3. **Separate repos for secrets**: Use a private repo for production `.env` files
|
||
4. **Monitor commits**: Occasionally review auto-commits for unwanted files
|
||
|
||
## Performance Tips
|
||
|
||
### For Large Repositories
|
||
|
||
```json
|
||
{
|
||
"intervalSeconds": 600,
|
||
"excludePatterns": [
|
||
"f_data/*",
|
||
"uploads/*",
|
||
"*.mp4",
|
||
"*.mkv"
|
||
]
|
||
}
|
||
```
|
||
|
||
### For Active Development
|
||
|
||
```json
|
||
{
|
||
"intervalSeconds": 180,
|
||
"commitPrefix": "wip:"
|
||
}
|
||
```
|
||
|
||
## Integration with IDE
|
||
|
||
### VS Code
|
||
|
||
Add to `.vscode/tasks.json`:
|
||
|
||
```json
|
||
{
|
||
"version": "2.0.0",
|
||
"tasks": [
|
||
{
|
||
"label": "Start Continuous Delivery",
|
||
"type": "shell",
|
||
"command": ".\\start-cd.ps1 watch",
|
||
"presentation": {
|
||
"reveal": "always",
|
||
"panel": "dedicated"
|
||
},
|
||
"problemMatcher": []
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
Run with: `Ctrl+Shift+P` → `Tasks: Run Task` → `Start Continuous Delivery`
|
||
|
||
## FAQ
|
||
|
||
**Q: Will this commit every keystroke?**
|
||
A: No. File watcher mode waits 30 seconds after the last change before committing.
|
||
|
||
**Q: Can I customize commit messages?**
|
||
A: Yes, edit the commit message generation in [auto-deploy.ps1:176-188](auto-deploy.ps1#L176-L188)
|
||
|
||
**Q: Does this work with pull requests?**
|
||
A: Yes, but you may want to squash auto-commits before merging. Consider using a feature branch.
|
||
|
||
**Q: Can I run this on Linux/Mac?**
|
||
A: The scripts are PowerShell-specific. For Linux/Mac, use Git hooks or tools like `watchman` + bash scripts.
|
||
|
||
**Q: Will this conflict with manual commits?**
|
||
A: No. The CD system checks for changes and only commits if there are uncommitted files.
|
||
|
||
**Q: How do I temporarily pause CD?**
|
||
A: Press `Ctrl+C` in the CD terminal, or run `.\start-cd.ps1 stop`
|
||
|
||
## Examples
|
||
|
||
### Development Workflow
|
||
|
||
```powershell
|
||
# Morning: Start CD
|
||
.\start-cd.ps1 watch
|
||
|
||
# Work normally - changes auto-commit as you save
|
||
|
||
# End of day: Review commits
|
||
git log --oneline --since="8 hours ago"
|
||
|
||
# Squash if needed before PR
|
||
git rebase -i HEAD~20
|
||
```
|
||
|
||
### Emergency Hotfix
|
||
|
||
```powershell
|
||
# Stop CD
|
||
.\start-cd.ps1 stop
|
||
|
||
# Make critical fix
|
||
# ... edit files ...
|
||
|
||
# Manual commit with detailed message
|
||
git add .
|
||
git commit -m "fix: Critical security patch for XSS vulnerability"
|
||
git push
|
||
|
||
# Resume CD
|
||
.\start-cd.ps1 watch
|
||
```
|
||
|
||
## Support
|
||
|
||
For issues or questions:
|
||
- GitHub Issues: https://github.com/SamiAhmed7777/easystream-main/issues
|
||
- Check logs in terminal output
|
||
- Use `-Verbose` flag for detailed diagnostics
|
||
|
||
---
|
||
|
||
**Next Steps**: [Start using CD now!](#quick-start)
|