Files
skelly/.gitea/workflows/gdlint.yml

147 lines
4.5 KiB
YAML

name: GDScript Linting
on:
# Trigger on push to any branch
push:
branches: ['*']
paths:
- '**/*.gd'
- '.gdlintrc'
- '.gitea/workflows/gdlint.yml'
# Trigger on pull requests
pull_request:
branches: ['*']
paths:
- '**/*.gd'
- '.gdlintrc'
- '.gitea/workflows/gdlint.yml'
# Allow manual triggering
workflow_dispatch:
jobs:
gdlint:
name: GDScript Code Quality Check
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.11'
cache: 'pip'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install --upgrade "setuptools<81"
pip install gdtoolkit==4
- name: Verify gdlint installation
run: |
gdlint --version
echo "✅ gdlint installed successfully"
- name: Count GDScript files
id: count-files
run: |
file_count=$(find . -name "*.gd" -not -path "./.git/*" | wc -l)
echo "file_count=$file_count" >> $GITHUB_OUTPUT
echo "📊 Found $file_count GDScript files to lint"
- name: Run GDScript linting
run: |
echo "🔍 Starting GDScript linting..."
echo "================================"
# Initialize counters
total_files=0
clean_files=0
warning_files=0
error_files=0
# Find all .gd files except TestHelper.gd (static var syntax incompatibility)
while IFS= read -r -d '' file; do
filename=$(basename "$file")
# Skip TestHelper.gd due to static var syntax incompatibility with gdlint
if [[ "$filename" == "TestHelper.gd" ]]; then
echo "⚠️ Skipping $file (static var syntax not supported by gdlint)"
((total_files++))
((clean_files++))
continue
fi
echo "🔍 Linting: $file"
((total_files++))
# Run gdlint and capture output
if output=$(gdlint "$file" 2>&1); then
if [[ -z "$output" ]]; then
echo "✅ Clean"
((clean_files++))
else
echo "⚠️ Warnings found:"
echo "$output"
((warning_files++))
fi
else
echo "❌ Errors found:"
echo "$output"
((error_files++))
fi
echo ""
done < <(find . -name "*.gd" -not -path "./.git/*" -print0)
# Print summary
echo "================================"
echo "📋 Linting Summary"
echo "================================"
echo "📊 Total files: $total_files"
echo "✅ Clean files: $clean_files"
echo "⚠️ Files with warnings: $warning_files"
echo "❌ Files with errors: $error_files"
echo ""
# Set exit code based on results
if [[ $error_files -gt 0 ]]; then
echo "❌ Linting FAILED - $error_files file(s) have errors"
echo "Please fix the errors above before merging"
exit 1
elif [[ $warning_files -gt 0 ]]; then
echo "⚠️ Linting PASSED with warnings - Consider fixing them"
echo "✅ No blocking errors found"
exit 0
else
echo "✅ All GDScript files passed linting!"
echo "🎉 Code quality check complete - ready for merge"
exit 0
fi
- name: Upload linting results
if: failure()
uses: actions/upload-artifact@v3
with:
name: gdlint-results
path: |
**/*.gd
retention-days: 7
- name: Comment on PR (if applicable)
if: github.event_name == 'pull_request' && failure()
uses: actions/github-script@v6
with:
script: |
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: '❌ **GDScript Linting Failed**\n\nPlease check the workflow logs and fix the linting errors before merging.\n\n[View workflow run](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }})'
})