Skip to content
Snippets Groups Projects
translations.yml 4.51 KiB
Newer Older
---
name: Build translations

on:  # yamllint disable-line rule:truthy
  push:
    branches: [master, simplesamlphp-*]
    paths:
      - '**.po'
      - '**.php'
      - '**.twig'
  workflow_dispatch:

jobs:
  quality:
    name: Quality checks
    runs-on: ['ubuntu-latest']

    steps:
Tim van Dijen's avatar
Tim van Dijen committed
      - uses: actions/checkout@v4

      #- uses: actions/setup-python@v4
      #  with:
      #    python-version: '3.10'

      #- run: pip install lint-po

      #- name: Lint PO(T) files
      #  run: |
      #    lint-po locales/*/LC_MESSAGES/*.po
      #    lint-po modules/*/locales/*/LC_MESSAGES/*.po

  build:
    name: Build PO-files
    runs-on: ['ubuntu-latest']
    needs: quality

    outputs:
      files_changed: ${{ steps.changes.outputs.files_changed }}

    steps:
      - name: Setup PHP, with composer and extensions
        id: setup-php
        # https://github.com/shivammathur/setup-php
        uses: shivammathur/setup-php@v2
        with:
          # Should be the higest supported version, so we can use the newest tools
Tim van Dijen's avatar
Tim van Dijen committed
          php-version: '8.3'
          coverage: none

Tim van Dijen's avatar
Tim van Dijen committed
      - uses: actions/checkout@v4
        with:
          repository: ${{ github.event.pull_request.head.repo.full_name }}
          ref: ${{ github.event.pull_request.head.ref }}
          token: ${{ secrets.PAT_TOKEN }}

      - name: Install Composer dependencies
        run: composer install --no-progress --prefer-dist --optimize-autoloader

      - name: Generate new updated PO-files
        run: php bin/translations translations:update:translatable --module main

      - name: Diff the changes after building
        shell: pwsh
        # Give an id to the step, so we can reference it later
        id: changes
        run: |
          git add --all
          $Diff = git diff --cached --name-only

          # Check if any of the translation files have changed (added, modified, deleted)
          $SourceDiff = $Diff | Where-Object {
              $_ -match '^*.po'
          }
          echo "Changed files"
          echo $SourceDiff

          $HasSourceDiff = $SourceDiff.Length -gt 0
          echo "($($SourceDiff.Length) changes)"
          echo "files_changed=$HasSourceDiff" >> $env:GITHUB_OUTPUT

      - name: Zip artifact for deployment
        if: steps.changes.outputs.files_changed == 'true' || steps.changes.outputs.packages_changed
        run: zip build.zip -r .

      - uses: actions/upload-artifact@v4
        if: steps.changes.outputs.files_changed == 'true' || steps.changes.outputs.packages_changed
        with:
          name: build
          path: build.zip
          retention-days: 1

  commit:
    name: Commit changes to assets
    needs: build
    if: needs.build.outputs.files_changed == 'true'
    runs-on: [ubuntu-latest]

    steps:
      - uses: actions/download-artifact@v4
        with:
          name: build

      - name: unzip artifact for deployment
        run: |
          unzip build.zip
          rm build.zip

      - name: Add & Commit
        uses: EndBug/add-and-commit@v9
        with:
          # The arguments for the `git add` command (see the paragraph below for more info)
          # Default: '.'
          add: "['**/*.po']"

          # Determines the way the action fills missing author name and email. Three options are available:
          # - github_actor -> UserName <UserName@users.noreply.github.com>
          # - user_info -> Your Display Name <your-actual@email.com>
          # - github_actions -> github-actions <email associated with the github logo>
          # Default: github_actor
          default_author: github_actions

          # The message for the commit.
          # Default: 'Commit from GitHub Actions (name of the workflow)'
          message: "[skip ci] Auto-rebuild translations"

          # The way the action should handle pathspec errors from the add and remove commands.
          # Three options are available:
          # - ignore -> errors will be logged but the step won't fail
          # - exitImmediately -> the action will stop right away, and the step will fail
          # - exitAtEnd -> the action will go on, every pathspec error will be logged at the end, the step will fail.
          # Default: ignore
          pathspec_error_handling: exitImmediately

  cleanup:
    name: Cleanup artifacts
    needs: [build, commit]
    runs-on: [ubuntu-latest]
    if: |
      always() &&
      needs.commit.result == 'success' ||
      (needs.build.result == 'success' && needs.commit.result == 'skipped')

    steps:
      - uses: geekyeggo/delete-artifact@v4
        with:
          name: |
            build