Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
169 changes: 169 additions & 0 deletions .github/workflows/crowdin-sync.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,172 @@ jobs:
steps:
- name: Checkout repo
uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f # v2.3.4

- name: Setup git config
run: |
git config user.name "github-actions"
git config user.email "<>"

- name: Get Crowndin Sync Branch
id: branch
run: |
BRANCH_NAME=crowdin-auto-sync
BRANCH_EXISTS=true

git fetch -a
git switch master
if [ $(git branch -a | egrep "remotes/origin/${BRANCH_NAME}$" | wc -l) -eq 0 ]; then
BRANCH_EXISTS=false
git switch -c $BRANCH_NAME
else
git switch $BRANCH_NAME
fi
git branch

echo "::set-output name=branch-exists::$BRANCH_EXISTS"
echo "::set-output name=branch-name::$BRANCH_NAME"

- name: Login to Azure
uses: Azure/login@77f1b2e3fb80c0e8645114159d17008b8a2e475a
with:
creds: ${{ secrets.AZURE_PROD_KV_CREDENTIALS }}

- name: Retrieve secrets
id: retrieve-secrets
uses: Azure/get-keyvault-secrets@80ccd3fafe5662407cc2e55f202ee34bfff8c403
with:
keyvault: "bitwarden-prod-kv"
secrets: "crowdin-api-token"

- name: Get Crowdin master branch id
id: crowdin-master-branch
env:
CROWDIN_API_TOKEN: ${{ steps.retrieve-secrets.outputs.crowdin-api-token }}
run: |
# Step 1: GET master branchId
BRANCH_ID=$(
curl -s -H "Authorization: Bearer $CROWDIN_API_TOKEN" \
$CROWDIN_BASE_URL/$CROWDIN_PROJECT_ID/branches | jq -r '.data[0].data.id'
)
echo "[*] Crowin master branch id: $BRANCH_ID"
echo "::set-output name=id::$BRANCH_ID"

- name: Get Crowdin build id
id: crowdin-build
env:
CROWDIN_API_TOKEN: ${{ steps.retrieve-secrets.outputs.crowdin-api-token }}
CROWDIN_MASTER_BRANCH_ID: ${{ steps.crowdin-master-branch.outputs.id }}
run: |
# Step 2: POST Build the translations and get store build id
BUILD_ID=$(
curl -X POST -s \
-H "Authorization: Bearer $CROWDIN_API_TOKEN" \
-H "Content-Type: application/json" \
$CROWDIN_BASE_URL/$CROWDIN_PROJECT_ID/translations/builds \
-d "{\"branchId\": $CROWDIN_MASTER_BRANCH_ID}" | jq -r '.data.id'
)
echo "[*] Crowin translations build id: $BRANCH_ID"
echo "::set-output name=id::$BUILD_ID"

- name: Wait for Crowdin build to finish
env:
MAX_TRIES: 12
CROWDIN_API_TOKEN: ${{ steps.retrieve-secrets.outputs.crowdin-api-token }}
CROWDIN_BUILD_ID: ${{ steps.crowdin-build.outputs.id }}
run: |
for try in {1..$MAX_TRIES}; do
BRANCH_STATUS=$(
curl -s -H "Authorization: Bearer $CROWDIN_API_TOKEN" \
$CROWDIN_BASE_URL/$CROWDIN_PROJECT_ID/translations/builds/$CROWDIN_BUILD_ID | jq -r '.data.status'
)
echo "[*] Build status: $BRANCH_STATUS"
if [[ "$BRANCH_STATUS" == "finished" ]]; then break; fi
if [[ "$try" == "$MAX_TRIES" ]]; then
echo "[!] Exceeded tries: $try"
exit 1
else
sleep 5
fi
done

- name: Get Crowdin download URL
id: crowdin-download-url
env:
CROWDIN_API_TOKEN: ${{ steps.retrieve-secrets.outputs.crowdin-api-token }}
CROWDIN_BUILD_ID: ${{ steps.crowdin-build.outputs.id }}
run: |
# Step 4: when build is finished, get download url
DOWNLOAD_URL=$(
curl -s -H "Authorization: Bearer $CROWDIN_API_TOKEN" \
$CROWDIN_BASE_URL/$CROWDIN_PROJECT_ID/translations/builds/$CROWDIN_BUILD_ID/download | jq -r '.data.url'
)
echo "[*] Crowin translations download url: $DOWNLOAD_URL"
echo "::set-output name=value::$DOWNLOAD_URL"

- name: Download Crowdin translations
env:
CROWDIN_API_TOKEN: ${{ steps.retrieve-secrets.outputs.crowdin-api-token }}
CROWDIN_DOWNLOAD_URL: ${{ steps.crowdin-download-url.outputs.value }}
SAVE_FILE: "translations.zip"
run: |
# Step 5: download the translations via the download url
curl -s $CROWDIN_DOWNLOAD_URL --output $SAVE_FILE
echo "[*] Saved to: $SAVE_FILE"
unzip -o $SAVE_FILE
rm $SAVE_FILE

- name: Check changes
id: files-changed
env:
BRANCH_NAME: ${{ steps.branch.outputs.branch-name }}
BRANCH_EXISTS: ${{ steps.branch.outputs.branch-exists }}
run: |
DIFF_BRANCH=master
if [[ "$BRANCH_EXISTS" == "true" ]]; then
DIFF_BRANCH=$BRANCH_NAME
fi

DIFF_LEN=$(git diff origin/${DIFF_BRANCH} | wc -l | xargs)
echo "[*] git diff lines: ${DIFF_LEN}"
echo "::set-output name=num::$DIFF_LEN"

- name: Commit changes
env:
BRANCH_NAME: ${{ steps.branch.outputs.branch-name }}
BRANCH_EXISTS: ${{ steps.branch.outputs.branch-exists }}
DIFF_BRANCH: master
DIFF_LEN: ${{ steps.files-changed.outputs.num }}
run: |
echo "=====Translations Changed====="
git diff --name-only origin/${DIFF_BRANCH}
echo "=============================="

if [ "$DIFF_LEN" != "0" ]; then
echo "[*] Adding new translations"
git add .
echo "[*] Committing"
git commit -m "Autosync Crowdin translations"
echo "[*] Pushing"
if [ "$BRANCH_EXISTS" == "false" ]; then
git push -u origin $BRANCH_NAME
else
git push
fi
else
echo "[*] No new docs"
fi

- name: Create/Update PR
if: ${{ steps.files-changed.outputs.num }} != 0
env:
BRANCH_NAME: ${{ steps.branch.outputs.branch-name }}
BRANCH_EXISTS: ${{ steps.branch.outputs.branch-exists }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
if [ "$BRANCH_EXISTS" == "false" ]; then
echo "[*] Creating PR"
gh pr create --title "Autosync Crowdin Translations" \
--body "Autosync the updated translations"
else
echo "[*] Existing PR updated"
fi