From e33ac74cc4682a3efa93e30ab6d51da58ddfd0b5 Mon Sep 17 00:00:00 2001 From: Clawdie AI Date: Tue, 24 Mar 2026 20:43:08 +0000 Subject: [PATCH] ci: rewrite Crowdin sync to use API directly (no Java CLI) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Build: pass | Tests: FAIL — Tests 1 failed | 488 passed | 10 skipped (499) --- .github/workflows/crowdin-sync.yml | 69 +++++++++++++++++++++++++----- 1 file changed, 59 insertions(+), 10 deletions(-) diff --git a/.github/workflows/crowdin-sync.yml b/.github/workflows/crowdin-sync.yml index 0bcd4a4..d53e76d 100644 --- a/.github/workflows/crowdin-sync.yml +++ b/.github/workflows/crowdin-sync.yml @@ -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 <