# /ci

Continuous Integration configuration and automation scripts.

## Purpose
This directory contains CI/CD configuration files and automation scripts for the project, including automated file organization, testing, and deployment workflows.

## CI Workflows

### Auto-Sort Files (`auto-sort-files.yml`)
Automatically organizes datasheets and images based on filename prefixes.

#### How It Works
1. **Triggers**: Runs on push to main/develop branches and pull requests
2. **Detection**: Scans the entire repository for files with specific prefixes
3. **Organization**: Moves files to their correct directories
4. **Commit**: Automatically commits the reorganized files

#### Supported Prefixes
- **DS_**: Datasheets → moved to `docs/datasheets/`
- **IMG_**: Images → moved to `docs/images/`

#### Example Usage
```bash
# User uploads files anywhere in the project:
/some-folder/DS_STM32F401_datasheet_2024-08-11.pdf
/random-location/IMG_pcb-layout_top-view_v1.0.0_2024-08-11.png

# CI automatically moves them to:
docs/datasheets/DS_STM32F401_datasheet_2024-08-11.pdf
docs/images/IMG_pcb-layout_top-view_v1.0.0_2024-08-11.png
```

#### Supported File Types
**Datasheets (DS_):**
- PDF, DOC, DOCX, TXT

**Images (IMG_):**
- PNG, JPG, JPEG, SVG, GIF, PDF, WEBP

#### Configuration
The workflow can be customized by editing `auto-sort-files.yml`:
- Add new file extensions
- Modify destination directories
- Add new prefix categories
- Adjust trigger conditions

## Benefits of Auto-Sort System

### For Users
- **No manual organization**: Upload files anywhere with correct prefix
- **Consistent structure**: Files automatically end up in the right place
- **Reduced errors**: No need to remember directory structures
- **Time saving**: Focus on content, not file management

### For Teams
- **Enforced standards**: Automatic compliance with naming conventions
- **Reduced conflicts**: Files always in predictable locations
- **Better collaboration**: Team members can find files easily
- **Documentation quality**: Consistent organization improves documentation

### For Maintenance
- **Automated cleanup**: Misplaced files are automatically corrected
- **Audit trail**: Git history shows when files were moved
- **Scalability**: Works regardless of project size
- **Integration**: Works with existing workflows and tools

## Setup Instructions

### Gitea Actions (Recommended)
This template is optimized for Gitea Actions. The workflow is already configured in `.gitea/workflows/auto-sort-files.yml`.

#### Required Setup:
1. **Enable Gitea Actions** on your Gitea instance
2. **Create CI Bot Token**:
   - Go to your Gitea user settings → Applications → Generate New Token
   - Name: `CI Auto-Sort Bot`
   - Scopes: `repo` (full repository access)
   - Copy the generated token
3. **Add Repository Secret**:
   - Go to your repository → Settings → Secrets
   - Add new secret: `CI_BOT_TOKEN`
   - Value: Paste the token from step 2
4. **Enable Actions**: Go to repository Settings → Actions → Enable Actions

#### Token Configuration:
The workflow uses `${{ secrets.CI_BOT_TOKEN }}` to authenticate git operations. This token must have:
- **Repository access**: Read and write permissions
- **Contents permission**: To commit and push changes
- **Actions permission**: To run workflows

#### Verification:
- Push a test file with DS_ or IMG_ prefix to verify the workflow runs
- Check the Actions tab in your repository for workflow execution logs
- Verify that files are automatically moved to correct directories

### GitHub Actions (Alternative)
If using GitHub instead of Gitea:
1. Copy `.gitea/workflows/auto-sort-files.yml` to `.github/workflows/`
2. Replace `CI_BOT_TOKEN` with `GITHUB_TOKEN` in the workflow
3. Update the push URL to use GitHub's format

### GitLab CI (Alternative)
To adapt for GitLab CI, create `.gitlab-ci.yml`:
```yaml
auto-sort:
  stage: organize
  script:
    - # Copy the bash script from .gitea/workflows/auto-sort-files.yml
  only:
    - main
    - develop
```

### Other CI Systems
The bash script in `auto-sort-files.yml` can be adapted for:
- Jenkins
- Azure DevOps
- CircleCI
- Travis CI
- Any system that can run bash scripts

## Customization

### Adding New Prefixes
To add new file type prefixes, modify the workflow:

```bash
# Example: Add CAD files with CAD_ prefix
find . -name "CAD_*.step" -o -name "CAD_*.sldprt" | while read file; do
  if [[ "$file" != ./mechanical/cad/* ]]; then
    filename=$(basename "$file")
    move_file "$file" "mechanical/cad/$filename"
  fi
done
```

### Subdirectory Organization
For more sophisticated organization, add logic to sort into subdirectories:

```bash
# Example: Sort datasheets by component type
case "$filename" in
  DS_STM32*|DS_ESP32*) dest_dir="docs/datasheets/microcontrollers/" ;;
  DS_LM*|DS_AMS*) dest_dir="docs/datasheets/power-management/" ;;
  *) dest_dir="docs/datasheets/" ;;
esac
```

## Best Practices

### File Naming
- Always use the correct prefix (DS_, IMG_)
- Follow the established naming convention
- Include version numbers and dates
- Use descriptive filenames

### Repository Management
- Review auto-sort commits regularly
- Manually organize files into subdirectories as needed
- Keep the CI workflow updated with project needs
- Monitor for any files that might be missed

### Team Guidelines
- Train team members on prefix usage
- Document any custom prefixes or rules
- Include prefix requirements in contribution guidelines
- Set up notifications for auto-sort commits

## Troubleshooting

### Common Issues
1. **Files not moving**: Check filename prefix and extension
2. **Permission errors**: Ensure CI has write access to repository
3. **Workflow not running**: Check trigger conditions and branch names
4. **Duplicate files**: CI will not overwrite existing files

### Debugging
- Check workflow logs in CI system
- Verify file extensions are supported
- Ensure files are not already in correct location
- Test bash script locally before deploying

## Future Enhancements
- Add support for more file types
- Implement smart subdirectory sorting
- Add file validation and quality checks
- Integration with project management tools
- Automated file naming compliance checking
