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

name: GHA CI

on:
  push:
    branches:
      - main
      - 'maint/maint*'
  pull_request:
    branches: '**'

jobs:

  # ICU4C docs build using doxygen..
  icu4c-docs-build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2

      - name: ICU4C doc
        run: |
          sudo apt-get -y install doxygen;
          cd icu4c/source;
          ./runConfigureICU Linux --disable-renaming;
           # Fail if 'warning:' appears in doxygen's output, but ignore warnings from file Doxyfile.
           # Regex note: (?! ... ) is a negative lookahead. Succeed if the pattern is not present. 
          set +o pipefail && make doc 2>&1 | tee doxygen.log && ( ! grep -P 'warning:(?! .* file .?Doxyfile)' doxygen.log )

  # ICU4J build and unit test using Ant
  icu4j-ant-build-and-test:
    strategy:
      fail-fast: false
      matrix:
        java-version: [ '8', '11', '17' ]
    runs-on: ubuntu-latest
    steps:
      - name: Checkout and setup
        uses: actions/checkout@v2
        with:
          lfs: true
      - name: Checkout lfs objects
        run: git lfs pull
      - uses: actions/setup-java@v3
        with:
          distribution: 'temurin'
          java-version: ${{ matrix.java-version }}
      - name: ICU4J
        run: |
          cd icu4j;
          ant init;
          ant check;
          ant localespiCheck
      - name: List failures (if any)
        run: |
          [ -d icu4j/out/junit-results ] && cd icu4j && cat `find out/junit-results -name "*.txt" -exec grep -l FAILED {} \;`;
        if: ${{ failure() }}

  # ICU4J build and unit tests using Maven
  # https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-maven

  # Run `test` to execute unit tests and ensure it is possible for tests to run even without packaging submodule
  # dependencies as jar files
  icu4j-test-maven:
    name: Run unit tests with Maven for Java version
    runs-on: ubuntu-latest
    # Make this unit test target job depend on a later phase target job to prevent race condition when
    # trying to persist the Maven cache to the Github cache, knowing that artifacts needed for
    # the later phase `verify` are a superset of the artifacts needed for the earlier phase `test`.
    needs: icu4j-verify-maven
    strategy:
      fail-fast: false
      matrix:
        java-version: [ '8', '11', '17' ]
    steps:
      - name: Checkout and setup
        uses: actions/checkout@v2
        with:
          lfs: true
      - name: Checkout lfs objects
        run: git lfs pull
      - uses: actions/setup-java@v3
        with:
          distribution: 'temurin'
          java-version: ${{ matrix.java-version }}
          cache: maven
      - name: Run Maven test
        run: |
          cd icu4j/maven-build;
          mvn --batch-mode test

  # Run `verify` to ensure that `package` (creating .jar files) and `integration-test` (special setup for localespi tests) work
  icu4j-verify-maven:
    name: Run integration tests with Maven for Java version
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        java-version: [ '8', '11', '17' ]
    steps:
      - name: Checkout and setup
        uses: actions/checkout@v2
        with:
          lfs: true
      - name: Checkout lfs objects
        run: git lfs pull
      - uses: actions/setup-java@v3
        with:
          distribution: 'temurin'
          java-version: ${{ matrix.java-version }}
          cache: maven
      # The Maven `verify` phase causes the following to happen first, and in order:
      # build/compile (`compile`), unit tests (`test`), Jar building (`package`),
      # integration tests, if any (`integration-test`)
      - name: Run Maven verify
        run: |
          cd icu4j/maven-build;
          mvn --batch-mode verify

  # ICU4J build and unit test under lstm
  lstm-icu4j-build-and-test:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout and setup
        uses: actions/checkout@v2
        with:
          lfs: true
      - name: Checkout lfs objects
        run: git lfs pull
      - uses: actions/setup-java@v3
        with:
          distribution: 'temurin'
          java-version: '11'
      - name: Config LSTM and Rebuild data jar
        run: |
          cd icu4c/source;
          ICU_DATA_BUILDTOOL_OPTS=--include_uni_core_data ICU_DATA_FILTER_FILE=../../.github/lstm_for_th_my.json ./runConfigureICU --enable-debug --disable-release Linux -disable-layoutex;
          make clean;
          make -j2 ICU4J_ROOT=../../../icu4j icu4j-data-install;
          cd ../..
      - name: ICU4J
        run: |
          cd icu4j;
          ant init;
          ant check;
          ant localespiCheck
      - name: List failures (if any)
        run: |
          [ -d icu4j/out/junit-results ] && cd icu4j && cat `find out/junit-results -name "*.txt" -exec grep -l FAILED {} \;`;
        if: ${{ failure() }}

  # ICU4J build and unit test under adaboost
  adaboost-icu4j-build-and-test:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout and setup
        uses: actions/checkout@v2
        with:
          lfs: true
      - name: Checkout lfs objects
        run: git lfs pull
      - uses: actions/setup-java@v3
        with:
          distribution: 'temurin'
          java-version: '11'
      - name: Config Adaboost and Rebuild data jar
        run: |
          cd icu4c/source;
          ICU_DATA_BUILDTOOL_OPTS=--include_uni_core_data ICU_DATA_FILTER_FILE=../../.github/adaboost.json CPPFLAGS=-DUCONFIG_USE_ML_PHRASE_BREAKING=1 ./runConfigureICU --enable-debug --disable-release Linux -disable-layoutex;
          make clean;
          make -j2 ICU4J_ROOT=../../../icu4j icu4j-data-install;
          cd ../..
      - name: ICU4J
        run: |
          cd icu4j;
          ant init;
          ant -Dcom.ibm.icu.impl.breakiter.useMLPhraseBreaking=true check;
          ant localespiCheck
      - name: List failures (if any)
        run: |
          [ -d icu4j/out/junit-results ] && cd icu4j && cat `find out/junit-results -name "*.txt" -exec grep -l FAILED {} \;`;
        if: ${{ failure() }}

  # gcc debug build.
  # Includes dependency checker.
  # Note - the dependency checker needs to be run on both a debug and an optimized build.
  # This one (gcc) for debug, and linux clang (see job below) for optimized.
  #
  # Test both out-of-source and in-source builds. This one (gcc) for out-of-source,
  # and linux clang (below) for in-source.
  #
  # Invokes test/hdrtst to check public headers compliance.
  gcc-debug-build-and-test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2

      - name: ICU4C with gcc
        env:
          PREFIX: /tmp/icu-prefix
        run: |
          mkdir build;
          cd build;
          ../icu4c/source/runConfigureICU --enable-debug --disable-release Linux/gcc --prefix=$PREFIX --enable-tracing;
          make -j2;
          make -j2 check;
          ( cd ../icu4c/source/test/depstest && ./depstest.py ../../../../build/ );
          make install;
          PATH=$PREFIX/bin:$PATH make -C test/hdrtst check

  # clang release build with some options to enforce useful constraints.
  # Includes dependency checker on an in-source, optimized build.
  # Includes checking @draft etc. API tags vs. ifndef guards like
  # U_HIDE_DRAFT_API and U_FORCE_HIDE_DRAFT_API.
  # (FORCE guards make this tool pass but won't compile to working code.
  # See the testtagsguards.sh script for details.)
  clang-release-build-and-test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2

      - name: ICU4C with clang
        env:
          CPPFLAGS: -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1
          CFLAGS: -Wimplicit-fallthrough
          CXXFLAGS: -Wimplicit-fallthrough
        run: |
          sudo apt-get -y install doxygen;
          cd icu4c/source;
          ./runConfigureICU Linux;
          make -j 2;
          make -j 2 check;
          ( cd test/depstest && python3 depstest.py ../../../source/ );
          ( cd .. && source/test/hdrtst/testtagsguards.sh );
          make dist

  # Out of source build with gcc 10, c++14, and extra warnings; executes icuinfo.
  gcc-10-stdlib14:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2

      - name: ICU4C with gcc 10 and c++14 and extra warnings.
        env:
          PREFIX: /tmp/icu-prefix
          CC: gcc-10
          CXX: g++-10
          CXXFLAGS: -std=c++14 -Wextra
        run: |
          mkdir build;
          cd build;
          ../icu4c/source/runConfigureICU Linux --disable-layout --disable-layoutex --prefix=$PREFIX;
          make -j2;
          make -j2 check;
          make install;
          cd $PREFIX/bin;
          LD_LIBRARY_PATH=../lib ./icuinfo

  # Clang Linux with address sanitizer.
  clang-asan:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2

      - name: ICU4C with clang and asan
        run: |
          cd icu4c/source;
          ./runConfigureICU --enable-debug --disable-release Linux --disable-renaming --enable-tracing;
          make -j2;
          make -j2 check
        env:
          CPPFLAGS: -fsanitize=address
          LDFLAGS: -fsanitize=address
  # Clang Linux with undefined-behavior sanitizer.
  clang-ubsan:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2

      - name: ICU4C with clang and ubsan +alignment
        run: |
          cd icu4c/source;
          ./runConfigureICU --enable-debug --disable-release Linux --disable-renaming;
          make -j2;
          make -j2 check
        env:
          CPPFLAGS: -fsanitize=undefined -fsanitize=alignment -fno-sanitize-recover=undefined,alignment
          CFLAGS: -fsanitize=undefined -fsanitize=alignment -fno-sanitize-recover=undefined,alignment
          LDFLAGS: -fsanitize=undefined -fsanitize=alignment -fno-sanitize-recover=undefined,alignment
  # Control Flow Integrity.
  clang-cfi:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2

      - name: ICU4C with clang using CFI
        run: |
          cd icu4c/source;
          ./runConfigureICU Linux --disable-renaming;
          make -j2;
          make -j2 check
        env:
          CC: clang
          CXX: clang++
          # add -fsanitize=cfi-vcall -fsanitize=cfi-icall  later
          CXXFLAGS: -flto -fvisibility=hidden -fsanitize=cfi-derived-cast -fno-sanitize-trap=cfi -fno-inline-functions -fno-inline -fno-omit-frame-pointer -O1
          # add -fsanitize=cfi-vcall -fsanitize=cfi-icall  later
          LDFLAGS: -flto -fvisibility=hidden -fuse-ld=gold -fsanitize=cfi-derived-cast -fsanitize=cfi-unrelated-cast -fno-sanitize-trap=cfi -fsanitize-cfi-icall-generalize-pointers

  # Clang Linux with thread sanitizer.
  clang-tsan:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2

      - name: ICU4C with clang and tsan
        run: |
          cd icu4c/source;
          ./runConfigureICU --enable-debug --disable-release Linux --disable-renaming
          make -j2;
          make -j2 -C test;
          make -j2 -C test/intltest check
        env:
          INTLTEST_OPTS: utility/MultithreadTest
          CPPFLAGS: -fsanitize=thread
          LDFLAGS: -fsanitize=thread

  # MacOS with clang
  macos-clang:
    runs-on: macos-latest
    steps:
      - uses: actions/checkout@v2

      - name: ICU4C with clang on MacOS
        run: |
          cd icu4c/source;
          PYTHON=python3 ./runConfigureICU MacOSX;
          make -j2 check

  # Run ICU4C tests with stubdata.
  run-with-stubdata:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2

      - name: ICU4C tests with stubdata
        run: |
          cd icu4c/source;
          ./runConfigureICU Linux;
          make -j2 check;
          rm lib/libicudata.so*;
          cp -P stubdata/libicudata.so* lib;

          cd test/cintltst;
          echo 'Running ICU4C cintltst with stubdata.';
          # Note: 'Elapsed Time: ' is printed by makefile upon final success.
          CINTLTST_OPTS=-w make check 2>&1 | tee stubdata_ctest.log;
          if ! grep 'Elapsed Time: ' stubdata_ctest.log
          then
            echo
            echo cintltst run with stubdata failed
            echo
            echo See
            echo https://unicode-org.github.io/icu/processes/release/tasks/integration.html#run-tests-without-icu-data
            echo for how to reproduce and debug the failure
            exit 1
          fi

          cd ../intltest;
          echo 'Running ICU4C intltest with stubdata.';
          INTLTEST_OPTS=-w make check 2>&1 | tee stubdata_intltest.log;
          if ! grep 'Elapsed Time: ' stubdata_intltest.log
          then
            echo
            echo intltest run with stubdata failed
            echo
            echo See
            echo https://unicode-org.github.io/icu/processes/release/tasks/integration.html#run-tests-without-icu-data
            echo for how to reproduce and debug the failure
            exit 1
          fi

  # Test U_CHARSET_IS_UTF8
  u-charset-is-utf8-test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - run: |
          cd icu4c/source;
          ./runConfigureICU Linux CPPFLAGS="-DU_CHARSET_IS_UTF8=1";
          make -j2 check

  # Test U_OVERRIDE_CXX_ALLOCATION-is-0-test
  u-override-cxx-allocation-is-0-test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - run: |
          cd icu4c/source;
          ./runConfigureICU Linux CPPFLAGS="-DU_OVERRIDE_CXX_ALLOCATION=0";
          make clean;
          make -j2 check

  # Test LSTM
  lstm-test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - run: |
          cd icu4c/source;
          ICU_DATA_FILTER_FILE=../../.github/lstm_for_th_my.json ./runConfigureICU --enable-debug --disable-release Linux -disable-layoutex;
          make clean;
          make -j2 check

  # Test adaboost
  adaboost-test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - run: |
          cd icu4c/source;
          ICU_DATA_FILTER_FILE=../../.github/adaboost.json CPPFLAGS=-DUCONFIG_USE_ML_PHRASE_BREAKING=1 ./runConfigureICU --enable-debug --disable-release Linux -disable-layoutex;
          make clean;
          make -j2 check

  # Build and run testmap
  testmap:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - run: |
          cd icu4c/source;
          ./runConfigureICU Linux;
          make -j2 check;
          CONFIG_FILES=test/testmap/Makefile ./config.status;
          cd test/testmap;
          make check | grep '*** PASS PASS PASS, test PASSED!!!!!!!!'

  # Copyright scan
  copyright-scan:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - run: perl tools/scripts/cpysearch/cpyscan.pl

  # Check compilation of internal headers.
  internal-header-compilation:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - run: cd icu4c/source; test/hdrtst/testinternalheaders.sh

  # Check source files for valid UTF-8 and for absence of BOM.
  valid-UTF-8-and-no-BOM-check:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - run: tools/scripts/icu-file-utf8-check.py

  # Verify icu4c release tools buildability.
  icu4c-release-tools:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - run: mvn -f tools/release/java/pom.xml package dependency:analyze

  # Run unit tests with UCONFIG_NO_XXX variations.
  uconfig-unit-tests:
    runs-on: ubuntu-latest
    strategy:
      # "fail-fast: false" lets other jobs keep running even if the test breaks in some other uconfig.
      fail-fast: false
      matrix:
        uconfig_cppflags:
         # Ignore the following two.
         # - "-DUCONFIG_NO_FILE_IO=1"
         # - "-DUCONFIG_NO_CONVERSION=1"
         - "-DUCONFIG_NO_LEGACY_CONVERSION=1"
         - "-DUCONFIG_NO_NORMALIZATION=1"
         - "-DUCONFIG_NO_BREAK_ITERATION=1"
         - "-DUCONFIG_NO_IDNA=1"
         - "-DUCONFIG_NO_COLLATION=1"
         - "-DUCONFIG_NO_FORMATTING=1"
         - "-DUCONFIG_NO_TRANSLITERATION=1"
         - "-DUCONFIG_NO_REGULAR_EXPRESSIONS=1"
         - "-DUCONFIG_NO_SERVICN=1"
         - "-DUCONFIG_NO_FILTERED_BREAK_ITERATION=1"
         # Turn on all the options in one test.
         - "-DUCONFIG_NO_LEGACY_CONVERSION=1 -DUCONFIG_NO_NORMALIZATION=1 -DUCONFIG_NO_BREAK_ITERATION=1 -DUCONFIG_NO_IDNA=1 -DUCONFIG_NO_COLLATION=1 -DUCONFIG_NO_FORMATTING=1 -DUCONFIG_NO_TRANSLITERATION=1 -DUCONFIG_NO_REGULAR_EXPRESSIONS=1 -DUCONFIG_NO_SERVICN=1 -DUCONFIG_NO_FILTERED_BREAK_ITERATION=1"
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: Verify no additional new UCONFIG_NO_xxx added
        run: |
          # Test that we have exactly 12 "#ifndef UCONFIG_NO_" in uconfig.h. If the number changes, we need to also
          # adjust the uconfig_cppflags above to include the new one and update the "12" below.
          expected_count="12";
          count=`egrep "#ifndef UCONFIG_NO_" icu4c/source/common/unicode/uconfig.h| wc -l`;
          if [ $expected_count != $count ]; then
              echo "More than %s UCONFIG_NO_* defined in uconfig.h, please adjust uconfig_cppflags above to include any newly added flag" % $expected_count;
              echo "Currently UCONFIG_NO_* defined in uconfig.h:";
              egrep "#ifndef UCONFIG_NO_" icu4c/source/common/unicode/uconfig.h;
              exit -1
          fi
      - name: Build and Test
        env:
          CPPFLAGS: ${{ matrix.uconfig_cppflags }}
        run: |
          cd icu4c/source/;
          ./runConfigureICU Linux;
          make -j2 tests;

  # Run header tests with UCONFIG_NO_XXX variations.
  uconfig-header-tests:
    runs-on: ubuntu-latest
    strategy:
      # "fail-fast: false" lets other jobs keep running even if the test breaks in some other uconfig.
      fail-fast: false
      matrix:
        uconfig_cppflags:
         # Ignore the following two.
         # - "-DUCONFIG_NO_FILE_IO=1"
         # - "-DUCONFIG_NO_CONVERSION=1"
         - "-DUCONFIG_NO_LEGACY_CONVERSION=1"
         - "-DUCONFIG_NO_NORMALIZATION=1"
         - "-DUCONFIG_NO_BREAK_ITERATION=1"
         - "-DUCONFIG_NO_IDNA=1"
         - "-DUCONFIG_NO_COLLATION=1"
         - "-DUCONFIG_NO_FORMATTING=1"
         - "-DUCONFIG_NO_TRANSLITERATION=1"
         - "-DUCONFIG_NO_REGULAR_EXPRESSIONS=1"
         - "-DUCONFIG_NO_SERVICN=1"
         - "-DUCONFIG_NO_FILTERED_BREAK_ITERATION=1"
         # Turn on all the options in one test.
         - "-DUCONFIG_NO_LEGACY_CONVERSION=1 -DUCONFIG_NO_NORMALIZATION=1 -DUCONFIG_NO_BREAK_ITERATION=1 -DUCONFIG_NO_IDNA=1 -DUCONFIG_NO_COLLATION=1 -DUCONFIG_NO_FORMATTING=1 -DUCONFIG_NO_TRANSLITERATION=1 -DUCONFIG_NO_REGULAR_EXPRESSIONS=1 -DUCONFIG_NO_SERVICN=1 -DUCONFIG_NO_FILTERED_BREAK_ITERATION=1"
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: Verify no additional new UCONFIG_NO_xxx added
        run: |
          # Test that we have exactly 12 "#ifndef UCONFIG_NO_" in uconfig.h. If the number changes, we need to also
          # adjust the uconfig_cppflags above to include the new one and update the "12" below.
          count=`egrep "#ifndef UCONFIG_NO_" icu4c/source/common/unicode/uconfig.h| wc -l`;
          if [ "12" != $count ]; then
              echo "More than %s UCONFIG_NO_* defined in uconfig.h, please adjust uconfig_cppflags above to include any newly added flag" % $count;
              echo "Currently UCONFIG_NO_* defined in uconfig.h:";
              egrep "#ifndef UCONFIG_NO_" icu4c/source/common/unicode/uconfig.h;
              exit -1
          fi
      - name: Build and Install
        run: |
          cd icu4c/source/;
          mkdir /tmp/icu_cnfg;
          ./runConfigureICU Linux --prefix=/tmp/icu_cnfg;
          make -j2 install;
      - name: Test
        env:
          UCONFIG_NO: ${{ matrix.uconfig_cppflags }}
        run: |
          cd icu4c/source/;
          PATH=/tmp/icu_cnfg/bin:$PATH make -C test/hdrtst check;

  # Build Unicode update tools
  unicode-update-tools:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - uses: bazelbuild/setup-bazelisk@v1
    - name: Get CI Linux runner VM version
      id: linux-version
      run: |
        echo "LINUX_VERSION=$(grep -F VERSION_ID /etc/os-release | cut -d'"' -f2)" >> $GITHUB_OUTPUT
    - name: Mount bazel cache
      uses: actions/cache@v2
      with:
        path: "~/.cache/bazel"
        key: bazel-${{ runner.os }}-${{ steps.linux-version.outputs.LINUX_VERSION }}

    - name: Generate the data
      run: |
        export ICU_SRC=`pwd`;
        icu4c/source/data/unidata/generate.sh;
        if $?
        then
          echo
          echo Build of Unicode update tools failed.
          echo See
          echo https://unicode-org.github.io/icu/processes/unicode-update#bazel-build-process
          echo for how to reproduce and debug the failure
          exit 1
        fi

        git diff --exit-code;
        if $?
        then
          echo
          echo ICU unicode data has changed!
          echo Did you forget to include the changed data files in this PR?
          exit 1
        fi

# Build and run ICU4C samples
  icu4c-test-samples:
      runs-on: ubuntu-latest
      steps:
      - uses: actions/checkout@v2

      - name: ICU4C configure and build
        run: |
          # Perform an out-of-source build of icu4c
          mkdir /tmp/icu_samples
          cd icu4c/source
          ./runConfigureICU Linux -prefix=/tmp/icu_samples
          make install
          # Reference the paths in the new build
          cd samples
          # To clean all the test binaries
          make clean-samples-recursive
          # To rebuild them all
          echo "Make all samples"
          PATH=$PATH:/tmp/icu_samples/bin LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/tmp/icu_samples/lib make all-samples-recursive
          # To run all tests serially
          echo "Run all samples"
          pwd
          PATH=$PATH:/tmp/icu_samples/bin LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/tmp/icu_samples/lib make check-samples-recursive

  # https://unicode-org.github.io/icu/processes/release/tasks/integration.html#verify-that-icu4c-tests-pass-without-collation-rule-strings
  icu4c-without-collation-rule-strings:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Install hjson dependency
        run: |
          sudo apt-get install python3-pip
          pip3 install hjson
      - name: Create data filter file to remove collation rule strings
        run: |
          cat > icu4c/coll-norules.hjson <<EOL
          {
            resourceFilters: [
              {
                categories: [
                  coll_tree
                ]
                rules: [
                  -/UCARules
                  -/collations/*/Sequence
                ]
              }
            ]
          }
          EOL
      - name: Configure ICU4C with the data filter file
        env:
          ICU_DATA_FILTER_FILE: ../coll-norules.hjson
        run: |
          cd icu4c/source
          ./runConfigureICU Linux
      - name: Run tests with data-errors-as-warnings
        env:
          INTLTEST_OPTS: -w
          CINTLTST_OPTS: -w
        run: |
          cd icu4c/source
          make -j2 check
  
  # https://unicode-org.github.io/icu/processes/release/tasks/healthy-code.html#test-uconfig_no_conversion
  icu4c-uconfig-no-version:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Set UCONFIG_NO_CONVERSION and configure ICU4C
        env:
          UCONFIG_NO_CONVERSION: 1
        run: |
          cd icu4c/source
          ./runConfigureICU Linux
      - name: Run make for stubdata, common, i18n
        run: |
          cd icu4c/source
          pushd stubdata && make -j 2 && popd
          # Ensure lib directory for output object file exists
          mkdir -p lib
          pushd common && make -j 2 && popd
          pushd i18n && make -j 2 && popd
