Files
b4l-project-template/.gitea/workflows/auto-sort-files.yml
grabowski eff0142a22 Fix git tracking issue in file movement
- Replace mv with git mv to preserve git file tracking
- Remove unnecessary git add step since git mv automatically stages changes
- Fix issue where moved files appeared as deleted in git status
- Ensure proper git history preservation when files are reorganized
- Files will now show as moved/renamed instead of deleted/added in git log
2025-08-11 11:36:49 +07:00

139 lines
5.5 KiB
YAML
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Gitea Actions Auto-Sort Configuration for Datasheets and Images
# This workflow automatically moves files with specific prefixes to their correct directories
name: Auto-Sort Files
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main ]
jobs:
auto-sort:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
token: ${{ secrets.CI_BOT_TOKEN }}
- name: Auto-sort datasheets and images
run: |
#!/bin/bash
set -e
# Flag to track if any files were moved
FILES_MOVED=false
# Function to move files with logging
move_file() {
local src="$1"
local dest="$2"
local dest_dir=$(dirname "$dest")
# Create destination directory if it doesn't exist
mkdir -p "$dest_dir"
# Move file if it's not already in the correct location
if [ "$src" != "$dest" ] && [ -f "$src" ]; then
echo "Moving: $src -> $dest"
# Use git mv to preserve git tracking
git mv "$src" "$dest"
return 0 # Success - file was moved
fi
return 1 # No file moved
}
# Find and move datasheet files (DS_ prefix)
echo "Searching for datasheet files with DS_ prefix..."
mapfile -t datasheet_files < <(find . -name "DS_*.pdf" -o -name "DS_*.doc" -o -name "DS_*.docx" -o -name "DS_*.txt")
for file in "${datasheet_files[@]}"; do
if [[ -n "$file" && "$file" != ./docs/datasheets/* ]]; then
filename=$(basename "$file")
if move_file "$file" "docs/datasheets/$filename"; then
FILES_MOVED=true
fi
fi
done
# Find and move image files (IMG_ prefix)
echo "Searching for image files with IMG_ prefix..."
mapfile -t image_files < <(find . -name "IMG_*.png" -o -name "IMG_*.jpg" -o -name "IMG_*.jpeg" -o -name "IMG_*.svg" -o -name "IMG_*.gif" -o -name "IMG_*.pdf" -o -name "IMG_*.webp")
for file in "${image_files[@]}"; do
if [[ -n "$file" && "$file" != ./docs/images/* ]]; then
filename=$(basename "$file")
if move_file "$file" "docs/images/$filename"; then
FILES_MOVED=true
fi
fi
done
# Check if any files were moved
if [ "$FILES_MOVED" = true ]; then
echo "Files were moved. Setting output for commit step."
echo "files_moved=true" >> $GITHUB_OUTPUT
else
echo "No files needed to be moved."
echo "files_moved=false" >> $GITHUB_OUTPUT
fi
id: sort_files
- name: Commit moved files
if: steps.sort_files.outputs.files_moved == 'true'
run: |
git config --local user.email "${{ vars.WORKER_EMAIL }}"
git config --local user.name "${{ vars.WORKER_USERNAME }}"
# git mv already stages the changes, so no need for git add
git commit -m "Auto-sort: Move DS_ and IMG_ prefixed files to correct directories
- Moved datasheet files (DS_*) to docs/datasheets/
- Moved image files (IMG_*) to docs/images/
- Automated by Gitea Actions auto-sort workflow"
- name: Push changes
if: steps.sort_files.outputs.files_moved == 'true'
run: |
# Get the repository URL dynamically
REPO_URL=$(git config --get remote.origin.url)
# Extract the base URL and repository path
if [[ $REPO_URL == https://* ]]; then
# HTTPS URL format: https://git.b4l.co.th/B4L/repo-name.git
DOMAIN=$(echo $REPO_URL | sed 's|https://\([^/]*\)/.*|\1|')
REPO_PATH=$(echo $REPO_URL | sed 's|https://[^/]*/\(.*\)|\1|')
PUSH_URL="https://${{ vars.WORKER_USERNAME }}:${{ secrets.CI_BOT_TOKEN }}@${DOMAIN}/${REPO_PATH}"
else
# SSH URL format: git@git.b4l.co.th:B4L/repo-name.git
DOMAIN=$(echo $REPO_URL | sed 's|git@\([^:]*\):.*|\1|')
REPO_PATH=$(echo $REPO_URL | sed 's|git@[^:]*:\(.*\)|\1|')
PUSH_URL="https://${{ vars.WORKER_USERNAME }}:${{ secrets.CI_BOT_TOKEN }}@${DOMAIN}/${REPO_PATH}"
fi
echo "Repository URL: $REPO_URL"
echo "Domain: $DOMAIN"
echo "Repository Path: $REPO_PATH"
echo "Worker: ${{ vars.WORKER_USERNAME }}"
echo "Pushing to: https://${DOMAIN}/${REPO_PATH} (with authentication)"
git push $PUSH_URL HEAD:${{ github.ref_name }}
- name: Create summary
run: |
echo "## Auto-Sort Results" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
if [ "${{ steps.sort_files.outputs.files_moved }}" = "true" ]; then
echo "✅ Files were automatically moved to correct directories" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "### Moved Files:" >> $GITHUB_STEP_SUMMARY
echo "- Datasheet files (DS_*) → docs/datasheets/" >> $GITHUB_STEP_SUMMARY
echo "- Image files (IMG_*) → docs/images/" >> $GITHUB_STEP_SUMMARY
else
echo " No files needed to be moved - all files are properly organized" >> $GITHUB_STEP_SUMMARY
fi
echo "" >> $GITHUB_STEP_SUMMARY
echo "### Supported Prefixes:" >> $GITHUB_STEP_SUMMARY
echo "- **DS_**: Datasheets (PDF, DOC, DOCX, TXT)" >> $GITHUB_STEP_SUMMARY
echo "- **IMG_**: Images (PNG, JPG, SVG, GIF, PDF, WEBP)" >> $GITHUB_STEP_SUMMARY