name: Sync Crowdin on: workflow_dispatch: schedule: - cron: 00 12 * * 1 push: branches: dev paths: - assets/i18n/*.json - assets/i18n/*.dart - .github/workflows/sync_crowdin.yml jobs: sync: name: Sync runs-on: ubuntu-latest permissions: contents: write pull-requests: write steps: - name: Checkout uses: actions/checkout@v4 with: ref: dev fetch-depth: 0 clean: true - name: Setup Flutter uses: subosito/flutter-action@v2 with: cache: true - name: Sync translations from Crowdin uses: crowdin/github-action@v2 with: config: crowdin.yml upload_sources: true upload_translations: false download_translations: true localization_branch_name: feat/translations skip_ref_checkout: true create_pull_request: true pull_request_title: "chore: Sync translations" pull_request_body: "Sync translations from [crowdin.com/project/revanced](https://crowdin.com/project/revanced)" pull_request_base_branch_name: "dev" commit_message: "chore: Sync translations" env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }} CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }} - name: Validation of synced translations run: | dart pub get dart run slang validate - name: Normalization of Translation Strings run: | sudo chmod 766 assets/i18n/*.i18n.json dart run slang analyze dart run slang clean dart run slang normalize dart run slang cd assets/i18n dart nuke.dart >> $GITHUB_STEP_SUMMARY cd ../.. flutter analyze lib/gen/strings.g.dart --no-fatal-infos --no-fatal-warnings - name: Commit translations run: | git config --global user.name 'github-actions[bot]' git config --global user.email 'github-actions[bot]@users.noreply.github.com' sudo chown -R $USER:$USER .git git commit -m "chore: Remove empty values from JSON" assets/i18n/*.i18n.json git push origin HEAD:feat/translations