name: localize

on:
  push:
    branches: [nightly]
    paths:  # prevents workflow from running unless these files change
      - '.github/workflows/localize.yml'
      - 'sunshine/**'
      - 'locale/sunshine.po'
  workflow_dispatch:

env:
  file: ./locale/sunshine.po

jobs:
  localize:
    name: Update Localization
    runs-on: ubuntu-latest

    steps:
    - name: Checkout
      uses: actions/checkout@v3

    - name: Install Python 3.9
      uses: actions/setup-python@v4  # https://github.com/actions/setup-python
      with:
        python-version: '3.9'

    - name: Set up Python 3.9 Dependencies
      run: |
        cd ./scripts
        python -m pip install --upgrade pip setuptools
        python -m pip install -r requirements.txt

    - name: Set up xgettext
      run: |
        sudo apt-get update -y && \
        sudo apt-get --reinstall install -y \
        gettext

    - name: Update Strings
      run: |
        # first, try to remove existing file as xgettext does not remove unused translations
        if [ -f "${{ env.file }}" ];
        then
            rm ${{ env.file }}
            echo "new_file=false" >> $GITHUB_ENV
        else
            echo "new_file=true" >> $GITHUB_ENV
        fi

        # extract the new strings
        python ./scripts/_locale.py --extract

    - name: git diff
      if: ${{ env.new_file == 'false' }}
      run: |
        # disable the pager
        git config --global pager.diff false

        # print the git diff
        git diff locale/sunshine.po

        # set the variable with minimal output
        OUTPUT=$(git diff --numstat locale/sunshine.po)
        echo "git_diff=${OUTPUT}" >> $GITHUB_ENV

    - name: git reset
      # only run if a single line changed (date/time) and file already existed
      if: ${{ env.git_diff == '1	1	locale/sunshine.po' && env.new_file == 'false' }}
      run: |
        git reset --hard

    - name: Create/Update Pull Request
      uses: peter-evans/create-pull-request@v4
      with:
        add-paths: |
          locale/*.po
        token: ${{ secrets.GH_PAT }}  # must trigger PR tests
        commit-message: New localization template
        branch: localize/update
        delete-branch: true
        base: nightly
        title: New Babel Updates
        body: |
          Update report
          - Updated with *today's* date
          - Auto-generated by [create-pull-request][1]

          [1]: https://github.com/peter-evans/create-pull-request
        labels: |
          babel
          l10n
