clawdie-ai/.github/workflows/crowdin-sync.yml
Clawdie AI e33ac74cc4 ci: rewrite Crowdin sync to use API directly (no Java CLI)
---
Build: pass | Tests: FAIL — Tests  1 failed | 488 passed | 10 skipped (499)
2026-03-24 20:43:08 +00:00

92 lines
2.7 KiB
YAML

name: Crowdin Sync
on:
push:
branches:
- main
paths:
- 'docs/**/*.md'
- '.crowdin.yml'
jobs:
sync:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Upload sources to Crowdin via API
run: |
set -e
# Verify secrets
if [ -z "$CROWDIN_PROJECT_ID" ]; then
echo "ERROR: CROWDIN_PROJECT_ID not set"
exit 1
fi
if [ -z "$CROWDIN_PERSONAL_TOKEN" ]; then
echo "ERROR: CROWDIN_PERSONAL_TOKEN not set"
exit 1
fi
API_BASE="https://api.crowdin.com/api/v2"
AUTH_HEADER="Authorization: Bearer $CROWDIN_PERSONAL_TOKEN"
CONTENT_TYPE="Content-Type: application/json"
echo "📤 Uploading English sources to Crowdin project $CROWDIN_PROJECT_ID..."
# Iterate through all markdown files in docs/
for doc_file in docs/*.md; do
if [ ! -f "$doc_file" ]; then
echo "⚠️ No markdown files found in docs/"
continue
fi
filename=$(basename "$doc_file")
echo " • $filename"
# Step 1: Upload file content to storage
storage_response=$(curl -s -X POST "$API_BASE/storages" \
-H "$AUTH_HEADER" \
-H "Content-Type: multipart/form-data" \
-F "file=@$doc_file")
storage_id=$(echo "$storage_response" | grep -o '"id":[0-9]*' | head -1 | cut -d: -f2)
if [ -z "$storage_id" ]; then
echo " ERROR: Failed to upload $filename"
echo " Response: $storage_response"
exit 1
fi
# Step 2: Create/update source file in project
file_payload=$(cat <<EOF
{
"storageId": $storage_id,
"name": "/$filename",
"title": "$filename",
"directoryId": null
}
EOF
)
file_response=$(curl -s -X POST "$API_BASE/projects/$CROWDIN_PROJECT_ID/files" \
-H "$AUTH_HEADER" \
-H "$CONTENT_TYPE" \
-d "$file_payload")
file_id=$(echo "$file_response" | grep -o '"id":[0-9]*' | head -1 | cut -d: -f2)
if [ -z "$file_id" ]; then
echo " ⚠️ File update response: $file_response"
else
echo " ✓ Uploaded (ID: $file_id)"
fi
done
echo ""
echo "✅ Crowdin sync complete"
echo "📊 Check: https://crowdin.com/project/$CROWDIN_PROJECT_ID/sources"
env:
CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }}
CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }}