Crowdin Download Action #1
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Crowdin Download Action | |
on: | |
workflow_dispatch: | |
schedule: | |
- cron: "0 * * * *" | |
jobs: | |
download-sources-from-crowdin: | |
runs-on: ubuntu-latest | |
permissions: | |
contents: write # needed to commit changes into the PR | |
pull-requests: write # needed to update PR description, labels, etc | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
ref: ${{ github.head_ref }} | |
- name: Download sources | |
id: crowdin-download | |
uses: crowdin/github-action@v1 | |
with: | |
upload_sources: false | |
upload_translations: false | |
download_sources: false | |
download_translations: true | |
export_only_approved: true | |
localization_branch_name: i18n_crowdin_translations | |
create_pull_request: true | |
pull_request_title: 'I18n: Download translations from Crowdin' | |
pull_request_body: | | |
:robot: Automatic download of translations from Crowdin. | |
Steps for merging: | |
1. A quick sanity check of the changes and approve. Things to look out for: | |
- No changes in the English file. The source of truth is in the main branch, NOT in Crowdin. | |
- Translations maybe be removed if the English phrase was removed, but there should not be many of these | |
- Anything else that looks 'funky'. Ask if you're not sure. | |
2. Approve & (Auto-)merge. :tada: | |
If there's a conflict, close the pull request and **delete the branch**. A GH action will recreate the pull request. | |
Remember, the longer this pull request is open, the more likely it is that it'll get conflicts. | |
pull_request_labels: 'area/frontend, area/internationalization, no-changelog, no-backport' | |
pull_request_reviewers: 'grafana-frontend-platform' | |
pull_request_base_branch_name: 'main' | |
base_url: 'https://grafana.api.crowdin.com' | |
config: 'crowdin.yml' | |
source: 'public/locales/en-US/grafana.json' | |
translation: 'public/locales/%locale%/%original_file_name%' | |
# Magic details of the github-actions bot user, to pass CLA checks | |
github_user_name: "github-actions[bot]" | |
github_user_email: "41898282+github-actions[bot]@users.noreply.github.com" | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }} | |
CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }} | |
- name: Generate token | |
if: steps.crowdin-download.outputs.pull_request_url | |
id: generate_token | |
uses: tibdex/github-app-token@b62528385c34dbc9f38e5f4225ac829252d1ea92 | |
with: | |
app_id: ${{ secrets.GRAFANA_PR_AUTOMATION_APP_ID }} | |
private_key: ${{ secrets.GRAFANA_PR_AUTOMATION_APP_PEM }} | |
- name: Get pull request ID | |
if: steps.crowdin-download.outputs.pull_request_url | |
shell: bash | |
# Crowdin action returns us the URL of the pull request, but we need an ID for the GraphQL API | |
# that looks like 'PR_kwDOAOaWjc5mP_GU' | |
run: | | |
pr_id=$(gh pr view ${{ steps.crowdin-download.outputs.pull_request_url }} --json id -q .id) | |
echo "PULL_REQUEST_ID=$pr_id" >> "$GITHUB_ENV" | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Get project board ID | |
uses: octokit/[email protected] | |
id: get-project-id | |
if: steps.crowdin-download.outputs.pull_request_url | |
with: | |
# Frontend Platform project - https://github.com/orgs/grafana/projects/78 | |
org: grafana | |
project_number: 78 | |
query: | | |
query getProjectId($org: String!, $project_number: Int!){ | |
organization(login: $org) { | |
projectV2(number: $project_number) { | |
title | |
id | |
} | |
} | |
} | |
env: | |
GITHUB_TOKEN: ${{ steps.generate_token.outputs.token }} | |
- name: Add to project board | |
uses: octokit/[email protected] | |
if: steps.crowdin-download.outputs.pull_request_url | |
with: | |
projectid: ${{ fromJson(steps.get-project-id.outputs.data).organization.projectV2.id }} | |
prid: ${{ env.PULL_REQUEST_ID }} | |
query: | | |
mutation addPullRequestToProject($projectid: ID!, $prid: ID!){ | |
addProjectV2ItemById(input: {projectId: $projectid, contentId: $prid}) { | |
item { | |
id | |
} | |
} | |
} | |
env: | |
GITHUB_TOKEN: ${{ steps.generate_token.outputs.token }} |