# 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:
      - master
      - '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
  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@v1
        with:
          java-version: '11'
      - name: ICU4J
        run: |
          cd icu4j;
          ant init;
          ant check;

  # 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 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 | grep 'Elapsed Time: ';
          cd ../intltest;
          echo 'Running ICU4C intltest with stubdata.';
          INTLTEST_OPTS=-w make check 2>&1 | grep 'Elapsed Time: '

  # 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
