name: i18n - Download Curriculum
on:
  workflow_dispatch:
  schedule:
    # runs every weekday at 12:30 PM UTC
    - cron: '30 12 * * 1-5'

env:
  GITHUB_TOKEN: ${{ secrets.CROWDIN_CAMPERBOT_PAT }}
  CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_CAMPERBOT_SERVICE_TOKEN }}
  CROWDIN_API_URL: 'https://freecodecamp.crowdin.com/api/v2/'
  CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID_CURRICULUM }}

jobs:
  i18n-download-curriculum-translations:
    name: Curriculum
    runs-on: ubuntu-20.04
    strategy:
      matrix:
        node-version: [18.x]
      fail-fast: true

    steps:
      - name: Checkout Source Files
        uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3
        with:
          token: ${{ secrets.CROWDIN_CAMPERBOT_PAT }}

      - name: Generate Crowdin Config
        uses: freecodecamp/crowdin-action@main
        env:
          PLUGIN: 'generate-config'
          PROJECT_NAME: 'curriculum'

      ##### Download Chinese #####
      - name: Crowdin Download Chinese Translations
        uses: crowdin/github-action@master
        # options: https://github.com/crowdin/github-action/blob/master/action.yml
        with:
          # uploads
          upload_sources: false
          upload_translations: false
          auto_approve_imported: false
          import_eq_suggestions: false

          # downloads
          download_translations: true
          download_language: zh-CN
          skip_untranslated_strings: false
          skip_untranslated_files: false
          export_only_approved: true

          push_translations: false

          # pull-request
          create_pull_request: false

          # global options
          config: './crowdin-config.yml'
          base_url: ${{ secrets.CROWDIN_BASE_URL_FCC }}

          # Uncomment below to debug
          # dryrun_action: true

      # Convert Simplified Chinese to Traditional #
      - name: Convert Chinese
        uses: freecodecamp/crowdin-action@main
        env:
          PLUGIN: 'convert-chinese'
          FILE_PATHS: '["/curriculum/challenges/chinese/", "/curriculum/dictionaries/chinese"]'

      ##### Download Espanol #####
      - name: Crowdin Download Espanol Translations
        uses: crowdin/github-action@master
        # options: https://github.com/crowdin/github-action/blob/master/action.yml
        with:
          # uploads
          upload_sources: false
          upload_translations: false
          auto_approve_imported: false
          import_eq_suggestions: false

          # downloads
          download_translations: true
          download_language: es-EM
          skip_untranslated_strings: false
          skip_untranslated_files: false
          export_only_approved: true

          push_translations: false

          # pull-request
          create_pull_request: false

          # global options
          config: './crowdin-config.yml'
          base_url: ${{ secrets.CROWDIN_BASE_URL_FCC }}

          # Uncomment below to debug
          # dryrun_action: true

      ##### Download Italian #####
      - name: Crowdin Download Italian Translations
        uses: crowdin/github-action@master
        # options: https://github.com/crowdin/github-action/blob/master/action.yml
        with:
          # uploads
          upload_sources: false
          upload_translations: false
          auto_approve_imported: false
          import_eq_suggestions: false

          # downloads
          download_translations: true
          download_language: it
          skip_untranslated_strings: false
          skip_untranslated_files: false
          export_only_approved: true

          push_translations: false

          # pull-request
          create_pull_request: false

          # global options
          config: './crowdin-config.yml'
          base_url: ${{ secrets.CROWDIN_BASE_URL_FCC }}

          # Uncomment below to debug
          # dryrun_action: true

      ##### Download Brazilian Portuguese #####
      - name: Crowdin Download Portuguese (Brazilian) Translations
        uses: crowdin/github-action@master
        # options: https://github.com/crowdin/github-action/blob/master/action.yml
        with:
          # uploads
          upload_sources: false
          upload_translations: false
          auto_approve_imported: false
          import_eq_suggestions: false

          # downloads
          download_translations: true
          download_language: pt-BR
          skip_untranslated_strings: false
          skip_untranslated_files: false
          export_only_approved: true

          push_translations: false

          # pull-request
          create_pull_request: false

          # global options
          config: './crowdin-config.yml'
          base_url: ${{ secrets.CROWDIN_BASE_URL_FCC }}

          # Uncomment below to debug
          # dryrun_action: true

          ##### Download Ukrainian #####
      - name: Crowdin Download Ukrainian Translations
        uses: crowdin/github-action@master
        # options: https://github.com/crowdin/github-action/blob/master/action.yml
        with:
          # uploads
          upload_sources: false
          upload_translations: false
          auto_approve_imported: false
          import_eq_suggestions: false

          # downloads
          download_translations: true
          download_language: uk
          skip_untranslated_strings: false
          skip_untranslated_files: false
          export_only_approved: true

          push_translations: false

          # pull-request
          create_pull_request: false

          # global options
          config: './crowdin-config.yml'
          base_url: ${{ secrets.CROWDIN_BASE_URL_FCC }}

          # Uncomment below to debug
          # dryrun_action: true

      ##### Download Japanese #####
      - name: Crowdin Download Japanese Translations
        uses: crowdin/github-action@master
        # options: https://github.com/crowdin/github-action/blob/master/action.yml
        with:
          # uploads
          upload_sources: false
          upload_translations: false
          auto_approve_imported: false
          import_eq_suggestions: false

          # downloads
          download_translations: true
          download_language: ja
          skip_untranslated_strings: false
          skip_untranslated_files: false
          export_only_approved: true

          push_translations: false

          # pull-request
          create_pull_request: false

          # global options
          config: './crowdin-config.yml'
          base_url: ${{ secrets.CROWDIN_BASE_URL_FCC }}

          # Uncomment below to debug
          # dryrun_action: true

      ##### Download German #####
      - name: Crowdin Download German Translations
        uses: crowdin/github-action@master
        # options: https://github.com/crowdin/github-action/blob/master/action.yml
        with:
          # uploads
          upload_sources: false
          upload_translations: false
          auto_approve_imported: false
          import_eq_suggestions: false

          # downloads
          download_translations: true
          download_language: de
          skip_untranslated_strings: false
          skip_untranslated_files: false
          export_only_approved: true

          push_translations: false

          # pull-request
          create_pull_request: false

          # global options
          config: './crowdin-config.yml'
          base_url: ${{ secrets.CROWDIN_BASE_URL_FCC }}

          # Uncomment below to debug
          # dryrun_action: true

      ##### Download Arabic #####
      - name: Crowdin Download Arabic Translations
        uses: crowdin/github-action@master
        # options: https://github.com/crowdin/github-action/blob/master/action.yml
        with:
          # uploads
          upload_sources: false
          upload_translations: false
          auto_approve_imported: false
          import_eq_suggestions: false
          # downloads
          download_translations: true
          download_language: ar
          skip_untranslated_strings: false
          skip_untranslated_files: false
          export_only_approved: true
          push_translations: false
          # pull-request
          create_pull_request: false
          # global options
          config: './crowdin-config.yml'
          base_url: ${{ secrets.CROWDIN_BASE_URL_FCC }}
          # Uncomment below to debug
          # dryrun_action: true

          ##### Download Swahili #####
      - name: Crowdin Download Swahili Translations
        uses: crowdin/github-action@master
        # options: https://github.com/crowdin/github-action/blob/master/action.yml
        with:
          # uploads
          upload_sources: false
          upload_translations: false
          auto_approve_imported: false
          import_eq_suggestions: false

          # downloads
          download_translations: true
          download_language: sw
          skip_untranslated_strings: false
          skip_untranslated_files: false
          export_only_approved: true

          push_translations: false

          # pull-request
          create_pull_request: false

          # global options
          config: './crowdin-config.yml'
          base_url: ${{ secrets.CROWDIN_BASE_URL_FCC }}

          # Uncomment below to debug
          # dryrun_action: true

      # Validate the Download #
      # All languages should go ABOVE this. #
      - name: Setup pnpm
        uses: pnpm/action-setup@v2
        with:
          version: 8

      - name: Use Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@e33196f7422957bea03ed53f6fbb155025ffc7b8 # v3
        with:
          node-version: ${{ matrix.node-version }}
          cache: pnpm

      - name: Set Environment variables
        run: |
          cp sample.env .env
          echo 'SHOW_NEW_CURRICULUM=true' >> .env
          cat .env

      - name: Build Source Files
        run: |
          echo pnpm version $(pnpm -v)
          pnpm install
          pnpm run create:config
          pnpm run build:curriculum
          pnpm run build:server

      - name: Lint and Format Files
        run: |
          pnpm run format:curriculum

      # We do not need to run tests because they are run after the PR is created.

      # Create Commit
      - name: Commit Changes
        uses: freecodecamp/crowdin-action@main
        env:
          PLUGIN: 'commit-changes'
          GH_USERNAME: 'camperbot'
          GH_EMAIL: ${{ secrets.ACTIONS_CAMPERBOT_EMAIL }}
          GH_BRANCH: 'i18n-sync-curriculum'
          GH_MESSAGE: 'chore(i18n,learn): processed translations'

      # Create PR
      - name: Create PR
        uses: freecodecamp/crowdin-action@main
        env:
          PLUGIN: 'pull-request'
          GH_TOKEN: ${{ secrets.CROWDIN_CAMPERBOT_PAT }}
          BRANCH: 'i18n-sync-curriculum'
          REPOSITORY: 'freecodecamp/freecodecamp'
          BASE: 'main'
          TITLE: 'chore(i18n,learn): processed translations'
          BODY: 'This PR was opened auto-magically by Crowdin.'
          LABELS: 'crowdin-sync'
          TEAM_REVIEWERS: 'i18n'
