87 lines
3.9 KiB
Markdown
87 lines
3.9 KiB
Markdown
# Tasks: add-ftps-deployment
|
|||
|
|
|
||
|
|
## Implementation Tasks
|
||
|
|
|
||
|
|
### 1. Create deployment script structure
|
||
|
|
- Create `scripts/` directory in project root if it doesn't exist
|
||
|
|
- Create `scripts/deploy.sh` with proper shebang and execution permissions
|
||
|
|
- Add basic script structure with functions for connection, upload, and error handling
|
||
|
|
- **Validates**: Script file exists and is executable
|
||
|
|
|
||
|
|
### 2. Implement prerequisite checks
|
||
|
|
- Check for existence and non-empty state of `public/` directory
|
||
|
|
- Verify `lftp` is installed and available in PATH
|
||
|
|
- Check that `FTPS_PASSWORD` environment variable is set
|
||
|
|
- Display clear error messages for any missing prerequisites
|
||
|
|
- **Validates**: Script exits early with helpful errors when prerequisites are missing
|
||
|
|
|
||
|
|
### 3. Implement FTPS connection logic
|
||
|
|
- Configure lftp connection to www.markusgraf.ch with username "gurix"
|
||
|
|
- Use `FTPS_PASSWORD` environment variable for authentication
|
||
|
|
- Set FTPS-specific lftp settings (SSL/TLS requirements)
|
||
|
|
- Implement connection timeout and retry logic
|
||
|
|
- **Validates**: Script can establish FTPS connection with correct credentials
|
||
|
|
|
||
|
|
### 4. Implement file upload functionality
|
||
|
|
- Use lftp mirror command to upload `public/` contents to `httpsdocs/`
|
||
|
|
- Configure upload to preserve file permissions and timestamps
|
||
|
|
- Enable parallel transfers for improved performance
|
||
|
|
- Handle special files (symlinks, hidden files) appropriately
|
||
|
|
- **Validates**: All files from public/ are correctly uploaded to httpsdocs/
|
||
|
|
|
||
|
|
### 5. Add progress and status reporting
|
||
|
|
- Display connection status messages
|
||
|
|
- Show upload progress (file counts, current file being uploaded)
|
||
|
|
- Report upload completion with summary statistics
|
||
|
|
- Ensure password is never displayed in output
|
||
|
|
- **Validates**: User receives clear feedback during deployment process
|
||
|
|
|
||
|
|
### 6. Implement error handling
|
||
|
|
- Catch connection failures with descriptive error messages
|
||
|
|
- Handle partial upload failures gracefully
|
||
|
|
- Provide actionable error messages for common failure scenarios
|
||
|
|
- Set appropriate exit codes (0 for success, non-zero for failures)
|
||
|
|
- **Validates**: Script handles errors gracefully and provides useful feedback
|
||
|
|
|
||
|
|
### 7. Add script documentation
|
||
|
|
- Add header comments explaining script purpose and usage
|
||
|
|
- Document required environment variables
|
||
|
|
- Include example usage in comments
|
||
|
|
- Add inline comments for complex lftp commands
|
||
|
|
- **Validates**: Script is self-documenting for future maintenance
|
||
|
|
|
||
|
|
### 8. Update project documentation
|
||
|
|
- Add deployment section to README.md or create DEPLOYMENT.md
|
||
|
|
- Document environment variable setup process
|
||
|
|
- Provide example deployment workflow (build → deploy)
|
||
|
|
- Include troubleshooting tips for common issues
|
||
|
|
- **Validates**: User documentation exists and covers deployment process
|
||
|
|
|
||
|
|
### 9. Test deployment script
|
||
|
|
- Test with missing prerequisites (no public/, no lftp, no password)
|
||
|
|
- Test with incorrect credentials
|
||
|
|
- Test successful deployment with valid credentials
|
||
|
|
- Verify uploaded files match local public/ directory
|
||
|
|
- **Validates**: Script behaves correctly in success and failure scenarios
|
||
|
|
|
||
|
|
### 10. Create .gitignore entry for environment files
|
||
|
|
- Ensure .env files are ignored if user creates them locally
|
||
|
|
- Verify credentials cannot be accidentally committed
|
||
|
|
- **Validates**: Git ignores any credential-containing files
|
||
|
|
|
||
|
|
## Dependency Notes
|
||
|
|
- Tasks 1-2 must complete before task 3
|
||
|
|
- Tasks 3-4 must complete before task 5
|
||
|
|
- Task 6 can be implemented in parallel with tasks 3-5
|
||
|
|
- Tasks 7-8 can be done after core implementation (tasks 1-6)
|
||
|
|
- Task 9 requires all implementation tasks (1-6) to be complete
|
||
|
|
- Task 10 can be done at any time
|
||
|
|
|
||
|
|
## Testing Strategy
|
||
|
|
Manual testing is sufficient for this change:
|
||
|
|
1. Test prerequisite checks by intentionally removing prerequisites
|
||
|
|
2. Test with invalid credentials to verify error handling
|
||
|
|
3. Test successful deployment to production server
|
||
|
|
4. Verify all files are present and correct on server after deployment
|
||
|
|
5. Test script output for clarity and absence of credential exposure
|