ci: rewrite Crowdin sync to use API directly (no Java CLI)

---
Build: pass | Tests: FAIL — Tests  1 failed | 488 passed | 10 skipped (499)
This commit is contained in:
Clawdie AI 2026-03-24 20:43:08 +00:00
parent 526c03dc2d
commit e33ac74cc4

View file

@ -14,10 +14,9 @@ jobs:
steps:
- uses: actions/checkout@v4
- name: Upload sources to Crowdin
- name: Upload sources to Crowdin via API
run: |
# Install Crowdin CLI
npm install -g @crowdin/cli
set -e
# Verify secrets
if [ -z "$CROWDIN_PROJECT_ID" ]; then
@ -29,14 +28,64 @@ jobs:
exit 1
fi
# Upload sources (English docs) to Crowdin
crowdin upload sources \
--project-id "$CROWDIN_PROJECT_ID" \
--token "$CROWDIN_PERSONAL_TOKEN" \
--config .crowdin.yml \
--verbose
API_BASE="https://api.crowdin.com/api/v2"
AUTH_HEADER="Authorization: Bearer $CROWDIN_PERSONAL_TOKEN"
CONTENT_TYPE="Content-Type: application/json"
echo "✓ Crowdin sync complete"
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 }}