Skip to content

Crowdin Pull

Crowdin Pull #139

Workflow file for this run

name: Crowdin Pull
on:
schedule:
- cron: '0 6 * * *'
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
pull-from-crowdin:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
# Without this, the default GITHUB_TOKEN gets saved in the local git
# settings, and it might be overriding the GITHUB_TOKEN we set
# below for the crowdin action, and apparently the default
# GITHUB_TOKEN does not trigger actions because... reasons.
# https://github.com/orgs/community/discussions/25702#discussioncomment-6313966
persist-credentials: false
- name: Install Node.js, NPM and Yarn
uses: actions/setup-node@v4
with:
node-version: 18
- name: Cache node modules
uses: actions/cache@v4
id: cache
with:
path: node_modules
key: node-modules-${{ hashFiles('**/package-lock.json') }}
- name: Install node dependencies
if: steps.cache.outputs.cache-hit != 'true'
run: npm install
# Need this for pre-commit linting of Ruby
- name: Install Ruby and gems
uses: ruby/setup-ruby@v1
with:
bundler-cache: true
- name: Sync with Crowdin
uses: crowdin/github-action@v2
with:
# Note: a lot of the way this behaves is controlled in crowdin.yml,
# e.g. the path to the source files and paths to translations
# Upload options
upload_sources: false
upload_translations: false
# Download options
download_translations: true
skip_untranslated_strings: true
export_only_approved: true
# Without this, the action will force push changes to the branch
# before we get a chance to normalize and validate in the next
# step
push_translations: false
# Pull request options
create_pull_request: false
env:
GITHUB_TOKEN: ${{ secrets.CROWDIN_GITHUB_TOKEN }}
CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }}
CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }}
# The crowdin action adds new files owned by root. We need the default
# user to own them so we can move them around
- name: Change ownership
run: sudo chown -R $USER *
# Move files named with crowdin locales to files named with iNat
# locales. This will also fail if there's invalid FTL. We might want to
# separate those things in the future if it's easier to notice
# validation failures in the PR
- name: Normalize and validate
run: npm run translate
- name: Prepare Fastlane metadata directories
run: npm run prepare-fastlane-metadata
- name: Make pull request
# The original doesn't support making a pull request without
# downloading, which we don't want to do b/c that would recreate the
# Crowdin-named files that we just removed in the previous step, so
# we're using a fork.
uses: inaturalist/crowdin-github-action@pr-without-download
with:
# Note: a lot of the way this behaves is controlled in crowdin.yml,
# e.g. the path to the source files and paths to translations
# Upload options
upload_sources: false
upload_translations: false
# Download options
download_translations: false
# Pull request options
create_pull_request: true
localization_branch_name: l10n_main
pull_request_title: 'New Crowdin Translations'
pull_request_body: 'New Crowdin translations by [Crowdin GH Action](https://github.com/crowdin/github-action)'
pull_request_base_branch_name: main
env:
GITHUB_TOKEN: ${{ secrets.CROWDIN_GITHUB_TOKEN }}
CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }}
CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }}
notify:
name: Notify Slack
needs: pull-from-crowdin
if: ${{ failure() }}
runs-on: ubuntu-latest
steps:
- uses: iRoachie/slack-github-actions@v2.3.2
if: env.SLACK_WEBHOOK_URL != null
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_BUILDS_WEBHOOK_URL }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}