Skip to content

update retrofunding s7 projects #9

update retrofunding s7 projects

update retrofunding s7 projects #9

Workflow file for this run

name: Validate CSV Project Names
on:
pull_request:
types: [opened, synchronize]
paths:
- "data/**/*.csv"
jobs:
validate_csv:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Install uv
uses: astral-sh/setup-uv@v5
- name: Install dependencies
run: uv sync
- name: Find modified CSV files
id: find_csv
run: |
set -x
FILES=$(git diff --name-only origin/${{ github.base_ref }} | grep '\.csv$' || echo "")
echo "Modified CSV files (raw):"
echo "$FILES"
# Join files into a comma-separated list, to avoid multiline output issues
FILES_COMMA=$(echo "$FILES" | paste -sd, -)
echo "Modified CSV files (comma-separated):"
echo "$FILES_COMMA"
echo "csv_files=$FILES_COMMA" >> $GITHUB_OUTPUT
if [ -z "$FILES_COMMA" ]; then
echo "No CSV files were modified. Skipping validation."
echo "csv_found=false" >> $GITHUB_OUTPUT
else
echo "csv_found=true" >> $GITHUB_OUTPUT
fi
- name: Validate project names in CSV files
if: steps.find_csv.outputs.csv_found == 'true'
id: validate
run: |
# Create a file to store validation results
echo "# 🔍 CSV Validation Results" > validation_results.md
echo "" >> validation_results.md
INVALID_FOUND=false
TOTAL_FILES=0
FAILED_FILES=0
for file in ${{ steps.find_csv.outputs.csv_files }}; do
TOTAL_FILES=$((TOTAL_FILES + 1))
FILENAME=$(basename "$file")
OUTPUT=$(uv run src/validate_csv.py "$file")
INVALID_COUNT=$(echo "$OUTPUT" | grep "Invalid projects:" | sed 's/Invalid projects: //')
if [ "$INVALID_COUNT" -gt 0 ]; then
INVALID_FOUND=true
FAILED_FILES=$((FAILED_FILES + 1))
echo "## ❌ [\`$FILENAME\`]($file) - FAILED" >> validation_results.md
echo "" >> validation_results.md
echo "**Invalid project names:**" >> validation_results.md
echo "" >> validation_results.md
INVALID_PROJECTS=$(echo "$OUTPUT" | sed -n '/The following project names/,$p' | grep "^- " | sort)
echo "\`\`\`" >> validation_results.md
echo "$INVALID_PROJECTS" >> validation_results.md
echo "\`\`\`" >> validation_results.md
echo "" >> validation_results.md
echo "---" >> validation_results.md
fi
done
if [ "$INVALID_FOUND" = false ]; then
echo "## ✅ All CSV Files Passed Validation" >> validation_results.md
echo "" >> validation_results.md
echo "All $TOTAL_FILES CSV files contain valid project names recognized in the OSO database." >> validation_results.md
else
echo "## ❌ Summary: $FAILED_FILES of $TOTAL_FILES files failed validation" >> validation_results.md
echo "" >> validation_results.md
echo "This PR cannot be merged until **all** project names are valid." >> validation_results.md
fi
echo "invalid_found=$INVALID_FOUND" >> $GITHUB_OUTPUT
- name: Comment on PR with validation results
if: steps.find_csv.outputs.csv_found == 'true'
uses: actions/github-script@v6
with:
github-token: ${{secrets.GITHUB_TOKEN}}
script: |
const fs = require('fs');
const results = fs.readFileSync('validation_results.md', 'utf8');
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: results
});
- name: Fail workflow if invalid projects found
if: steps.validate.outputs.invalid_found == 'true'
run: |
echo "::error::Invalid project names found in CSV files. See PR comment for details."
exit 1