# Copyright (C) 2023 and later: Unicode, Inc. and others.
# License & terms of use: http://www.unicode.org/copyright.html
#
# GitHub Action configuration script for ICU environment test tasks.
#

name: GHA EnvTest

on:
  workflow_dispatch:
    # To trigger the Env Test workflow manually, follow the instructions in
    # https://docs.github.com/en/actions/managing-workflow-runs/manually-running-a-workflow

  schedule:
    # This cron schedule is set to run 10:23 UTC every SAT
    - cron: '23 10 * * SAT'

jobs:
  #=================================================================
  # locale env tests.
  env-test-locale:
    runs-on: ubuntu-latest
    strategy:
      # "fail-fast: false" let other jobs keep running even if the test break in some locales.
      fail-fast: false
      matrix:
        # Since we have total 500+ locales to run on three set of test, we create
        # many jobs to test concurrently.
        # shard is used to bucket the lines from the locale list into jobs.
        # Currently we run testing of 30 locales per shard, and we have total 17 shards.
        # 17x30 = 510 > 502 (the number of locales in 'locale -a').
        tests_per_shard: [30]
        shard: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
    steps:
      - name: Install all locales by apt-get
        run: |
          sudo apt-get update -y;
          sudo apt-get install -y locales-all;
      - name: Show installed locales post apt-get
        run: |
          locale -a;
      - name: Checkout and setup
        uses: actions/checkout@v2
      - name: Build
        run: |
          cd icu4c/source/;
          ./runConfigureICU Linux;
          make -j10 tests;
      - name: Test different locales as LC_ALL
        run: |
          echo "This job run the environment test of the following Locales";
          begin=$(( ${{matrix.shard}} * ${{matrix.tests_per_shard}} + 1));
          end=$(( (${{matrix.shard}}+1) * ${{matrix.tests_per_shard}} ));
          sedarg=${begin},${end}p;
          locale -a |sed -n ${sedarg};

          cd icu4c/source/test;
          for loc in `locale -a |sed -n ${sedarg}`;
          do
              echo "============================================";
              echo "Start Tests under LC_ALL=$loc locale";
              for test_dir in iotest cintltst intltest
              do
                  cd $test_dir;
                  LC_ALL=$loc make check;
                  cd ..;
              done

              echo "Complete Tests under LC_ALL=$loc locale";
              echo "============================================";
          done

          echo "This job completed the test of the following Locales";
          locale -a |sed -n ${sedarg};

  #=================================================================
  # tz env tests.
  env-test-tz:
    runs-on: ubuntu-latest
    strategy:
      # "fail-fast: false" let other jobs keep running even if the test break in some timezones.
      fail-fast: false
      matrix:
        # Since we have total 600+ timezones to run on three set of test, we create
        # many jobs to test concurrently.
        # shard is used to bucket the lines from the timezone list into jobs.
        # Currently we run testing of 30 timezones per shard, and we have total 21 shards.
        # 21x30 = 630 > 604 (the number of known timezones).
        tests_per_shard: [30]
        shard: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
    steps:
      - name: Install all locales by apt-get
        run: |
          sudo apt-get update -y;
          sudo apt-get install -y tzdata;
      - name: Show all the TimeZones
        run: |
          echo "Total number of TimeZone is "
          find /usr/share/zoneinfo/ -type f,l|egrep -v "/(right|posix)/"|egrep -v "\.tab"|wc -l;
          find /usr/share/zoneinfo/ -type f,l|egrep -v "/(right|posix)/"|egrep -v "\.tab"|cut -d '/' -f5-50;
      - name: Checkout and setup
        uses: actions/checkout@v2
      - name: Build
        run: |
          cd icu4c/source/;
          ./runConfigureICU Linux;
          make -j10 tests;
      - name: Test different locales as TZ
        run: |
          echo "This job run the environment test of the following TimeZones";
          begin=$(( ${{matrix.shard}} * ${{matrix.tests_per_shard}} + 1));
          end=$(( (${{matrix.shard}}+1) * ${{matrix.tests_per_shard}} ));
          sedarg=${begin},${end}p;
          find /usr/share/zoneinfo/ -type f,l|egrep -v "/(right|posix)/"|egrep -v "\.tab"|sed -n ${sedarg}|cut -d '/' -f5-50;

          cd icu4c/source/test;
          for tz in `find /usr/share/zoneinfo/ -type f,l|egrep -v "/(right|posix)/"|egrep -v "\.tab"|sed -n ${sedarg}|cut -d '/' -f5-50`;

          do
              echo "============================================";
              echo "Start Tests under TZ=$tz TimeZone";
              for test_dir in iotest cintltst intltest
              do
                  cd $test_dir;
                  TZ=$tz make check;
                  cd ..;
              done

              echo "Complete Tests under TZ=$tz TimeZone";
              echo "============================================";
          done

          echo "This job completed the test of the following TimeZones";
          find /usr/share/zoneinfo/ -type f,l|egrep -v "/(right|posix)/"|egrep -v "\.tab"|sed -n ${sedarg}|cut -d '/' -f5-50;

  #=================================================================
