ICU-21032 backport CI stuff

backport of CI stuff from c163f7dc29ea21cacd7c7c9000f1ba8a2f0698b1
so that we can actually test this branch
diff --git a/.appveyor.yml b/.appveyor.yml
new file mode 100644
index 0000000..88ed0f1
--- /dev/null
+++ b/.appveyor.yml
@@ -0,0 +1,79 @@
+# AppVeyor configuration for CI Builds of ICU4C.
+
+image: Visual Studio 2017
+platform: x64
+
+# Don't clone the entire repo.
+clone_depth: 1
+
+# Cache things between builds to speed things up and save bandwidth.
+cache:
+  - c:\icu-ci-cache
+
+# Notes:
+#  - The VS2017 build is disabled (commented out) below, as we build both VS2015 and VS2017
+#    on Azure Pipelines instead, since that is much faster.
+#
+#  - For the Cygwin build, the CYG_MIRROR URL below is from the "Cygwin Time Machine" archive,
+#    and that URL maps to the 64-bit version of Cygwin 2.11.2-1 (with timestamp 1550062412).
+#    This was the last release of Cygwin 2.11 before version 3.0.0 was released.
+#    See: http://www.crouchingtigerhiddenfruitbat.org/Cygwin/timemachine.html
+#
+#    Note: The archived Cygwin repo does not keep or retain any file signature files, so we
+#    must use the "-X" or "--no-verify" option below in the setup command.
+
+environment:
+  global:
+    ICU_CI_CACHE: c:\icu-ci-cache
+    CYG_URL: https://cygwin.com/setup-x86_64.exe
+    CYG_MIRROR: http://ctm.crouchingtigerhiddenfruitbat.org/pub/cygwin/circa/64bit/2019/02/13/045332
+    CYG_PACKAGES: automake,gcc-core,gcc-g++,make,pkg-config,perl,python3
+    CYG_ROOT: c:\cygwin-root
+    CYG_CACHE: '%ICU_CI_CACHE%\cygwin64'
+    CYG_CACHED_SETUP: '%CYG_CACHE%\setup.exe'
+
+  matrix:
+    - BUILDSYSTEM: cygwin64-gcc
+      CC: gcc
+      CXX: g++
+      APPVEYOR_SAVE_CACHE_ON_ERROR: true
+#    - BUILDSYSTEM: VS2017
+#      configuration: Release
+#      APPVEYOR_CACHE_SKIP_RESTORE: true
+#      APPVEYOR_CACHE_SKIP_SAVE: true
+
+for:
+  -
+    matrix:
+      only:
+        - BUILDSYSTEM: cygwin64-gcc
+
+    install:
+      - ps: >-
+          if ( !(Test-Path "${env:CYG_CACHED_SETUP}" -NewerThan (Get-Date).AddDays(-7)) )
+          {
+            Write-Host "Cached Cygwin setup does not exist or is older than 7 days, downloading from external site."
+            New-Item -Force -Type Directory $env:CYG_CACHE
+            Invoke-WebRequest $env:CYG_URL -OutFile $env:CYG_CACHED_SETUP
+          }
+      - cmd: >-
+          %CYG_CACHED_SETUP% --no-verify --quiet-mode --no-shortcuts --no-startmenu --no-desktop --upgrade-also --only-site --site "%CYG_MIRROR%" --root "%CYG_ROOT%"  --local-package-dir "%CYG_CACHE%" --packages "%CYG_PACKAGES%"
+
+    # Check that we have a working Cygwin environment before building.
+    before_build:
+      - "%CYG_ROOT%\\bin\\sh -lc 'echo Hello'"
+      - "%CYG_ROOT%\\bin\\sh -lc 'uname -a'"
+
+    build_script:
+      - '%CYG_ROOT%\\bin\\bash -lc "cd $(cygpath ${APPVEYOR_BUILD_FOLDER}) && cd icu4c/source && ./runConfigureICU Cygwin && make check"'
+
+#  -
+#    matrix:
+#      only:
+#        - BUILDSYSTEM: VS2017
+#
+#    build:
+#      project: icu4c/source/allinone/allinone.sln
+#
+#    test_script:
+#      - icu4c/source/allinone/icucheck.bat x64 Release
diff --git a/.ci-builds/.azure-exhaustive-tests.yml b/.ci-builds/.azure-exhaustive-tests.yml
new file mode 100644
index 0000000..9589702
--- /dev/null
+++ b/.ci-builds/.azure-exhaustive-tests.yml
@@ -0,0 +1,62 @@
+# Azure Pipelines configuration for Exhaustive Tests for ICU.
+# 
+# Note: The exhaustive test configuration is in a separate file
+# so that it can be run independently from the regular builds.
+#
+# Only run the exhaustive tests on the master and maint branches, and
+# also batch up any pending changes so that we will only have at most
+# one build running at a given time (since they take a long time).
+trigger:
+  batch: true
+  branches:
+    include:
+    - master
+    - maint/maint-*
+
+jobs:
+#-------------------------------------------------------------------------
+# Note: The exhaustive tests for J take longer than the C tests. They 
+# take roughly 85 min to complete on the Azure VMs.
+- job: ICU4J_OpenJDK_Ubuntu_1604
+  displayName: 'J: Linux OpenJDK (Ubuntu 16.04)'
+  timeoutInMinutes: 100
+  pool:
+    vmImage: 'Ubuntu 16.04'
+    demands: ant
+  steps:
+    - checkout: self
+      lfs: true
+      fetchDepth: 1
+    - script: |
+        echo "Building ICU4J" && cd icu4j && ant init && ant exhaustiveCheck
+      displayName: 'Build and Exhaustive Tests'
+      env:
+        BUILD: ICU4J
+    - script: |
+        [ -d icu4j/out/junit-results ] && cd icu4j && cat `find out/junit-results -name "*.txt" -exec grep -l FAILED {} \;`
+      condition: failed() # only run if the build fails.
+      displayName: 'List failures (if any)'
+      timeoutInMinutes: 2
+#-------------------------------------------------------------------------
+# Note: The exhaustive tests take roughly 65 mins to complete on the
+# Azure VMs.
+- job: ICU4C_Clang_Exhaustive_Ubuntu_1604
+  displayName: 'C: Linux Clang Exhaustive Tests (Ubuntu 16.04)'
+  timeoutInMinutes: 80
+  pool:
+    vmImage: 'Ubuntu 16.04'
+  steps:
+    - checkout: self
+      lfs: true
+      fetchDepth: 1
+    - script: |
+        cd icu4c/source && ./runConfigureICU Linux && make -j2
+      displayName: 'Build'
+    - script: |
+        cd icu4c/source && make check-exhaustive
+      displayName: 'Exhaustive Tests'
+      env:
+        CC: clang
+        CXX: clang++
+#-------------------------------------------------------------------------
+
diff --git a/.ci-builds/.azure-pipelines.yml b/.ci-builds/.azure-pipelines.yml
new file mode 100644
index 0000000..a444024
--- /dev/null
+++ b/.ci-builds/.azure-pipelines.yml
@@ -0,0 +1,289 @@
+# Azure Pipelines (VSTS) configuration for CI builds for ICU.
+
+jobs:
+#-------------------------------------------------------------------------
+- job: ICU4J_OpenJDK_Ubuntu_1604
+  displayName: 'J: Linux OpenJDK (Ubuntu 16.04)'
+  timeoutInMinutes: 20
+  pool:
+    vmImage: 'Ubuntu 16.04'
+    demands: ant
+  steps:
+    - checkout: self
+      lfs: true
+      fetchDepth: 1
+    - script: |
+        echo "Building ICU4J" && cd icu4j && ant init && ant check 
+      displayName: 'Build and Test'
+      env:
+        BUILD: ICU4J
+    - script: |
+        [ -d icu4j/out/junit-results ] && cd icu4j && cat `find out/junit-results -name "*.txt" -exec grep -l FAILED {} \;`
+      condition: failed() # only run if the build fails.
+      displayName: 'List failures (if any)'
+#-------------------------------------------------------------------------
+- job: ICU4C_Clang_Ubuntu_1604
+  displayName: 'C: Linux Clang (Ubuntu 16.04)'
+  timeoutInMinutes: 30
+  pool:
+    vmImage: 'Ubuntu 16.04'
+  steps:
+    - checkout: self
+      lfs: true
+      fetchDepth: 1
+    - script: |
+        cd icu4c/source && ./runConfigureICU Linux && make -j2 check
+      displayName: 'Build and Test'
+      env:
+        CC: clang
+        CXX: clang++
+#-------------------------------------------------------------------------
+- job: ICU4C_Clang_Ubuntu_1604_WarningsAsWarnings
+  displayName: 'C: Linux Clang WarningsAsWarnings (Ubuntu 16.04)'
+  timeoutInMinutes: 30
+  pool:
+    vmImage: 'Ubuntu 16.04'
+  steps:
+    - checkout: self
+      lfs: true
+      fetchDepth: 1
+    - script: |
+        export CPPFLAGS="-Wall -Wextra -Wextra-semi -Wundef -Wnon-virtual-dtor" && cd icu4c/source && ./runConfigureICU Linux && make -j2 tests
+      displayName: 'Build only (WarningsAsWarnings)'
+      env:
+        CC: clang
+        CXX: clang++
+#-------------------------------------------------------------------------
+- job: ICU4C_Clang_Ubuntu_DataFilter_1604
+  displayName: 'C: Linux Clang DataFilter (Ubuntu 16.04)'
+  timeoutInMinutes: 30
+  pool:
+    vmImage: 'Ubuntu 16.04'
+  steps:
+    - checkout: self
+      lfs: true
+      fetchDepth: 1
+    - script: |
+        cd icu4c/source && \
+        ICU_DATA_FILTER_FILE=../../.ci-builds/data-filter.json ./runConfigureICU Linux && \
+        make -j2 tests && \
+        \[ ! -d data/out/build/icudt66l/translit \] && \
+        (cd test/intltest && LD_LIBRARY_PATH=../../lib:../../tools/ctestfw ./intltest translit/TransliteratorTest/TestBasicTransliteratorEvenWithoutData)
+      displayName: 'Build with Data Filter'
+      env:
+        CC: clang
+        CXX: clang++
+#-------------------------------------------------------------------------
+- job: ICU4C_MSVC_x64_Release_Distrelease
+  displayName: 'C: MSVC 64-bit Release (VS 2017) + Distrelease'
+  timeoutInMinutes: 30
+  pool:
+    vmImage: 'vs2017-win2016'
+    demands: 
+      - msbuild
+      - visualstudio
+      - Cmd
+  steps:
+    - checkout: self
+      lfs: true
+      fetchDepth: 1
+    - task: VSBuild@1
+      displayName: 'Build Solution'
+      inputs:
+        solution: icu4c/source/allinone/allinone.sln
+        platform: x64
+        configuration: Release
+    - task: BatchScript@1
+      displayName: 'Run Tests (icucheck.bat)'
+      inputs:
+        filename: icu4c/source/allinone/icucheck.bat
+        arguments: 'x64 Release'
+    - task: PowerShell@2
+      displayName: 'PowerShell: Distrelease script (x64)'
+      inputs:
+        targetType: filePath
+        filePath: 'icu4c/packaging/distrelease.ps1'
+        arguments: '-arch x64'
+        workingDirectory: icu4c
+    - task: PublishBuildArtifacts@1
+      displayName: 'Publish x64 Artifacts: icu-windows.zip'
+      inputs:
+        PathtoPublish: 'icu4c/source/dist/icu-windows.zip'
+        ArtifactName: '$(Build.BuildNumber)_ICU4C_MSVC_x64_Release'
+#-------------------------------------------------------------------------
+- job: ICU4C_MSVC_x86_Release_Distrelease
+  displayName: 'C: MSVC 32-bit Release (VS 2017) + Distrelease'
+  timeoutInMinutes: 30
+  pool:
+    vmImage: 'vs2017-win2016'
+    demands: 
+      - msbuild
+      - visualstudio
+      - Cmd
+  steps:
+    - checkout: self
+      lfs: true
+      fetchDepth: 1
+    - task: VSBuild@1
+      displayName: 'Build Solution'
+      inputs:
+        solution: icu4c/source/allinone/allinone.sln
+        platform: Win32
+        configuration: Release
+    - task: PowerShell@2
+      displayName: 'PowerShell: Distrelease script (x86)'
+      inputs:
+        targetType: filePath
+        filePath: 'icu4c/packaging/distrelease.ps1'
+        arguments: '-arch x86'
+        workingDirectory: icu4c
+    - task: PublishBuildArtifacts@1
+      displayName: 'Publish x86 Artifacts: icu-windows.zip'
+      inputs:
+        PathtoPublish: 'icu4c/source/dist/icu-windows.zip'
+        ArtifactName: '$(Build.BuildNumber)_ICU4C_MSVC_x86_Release'
+#-------------------------------------------------------------------------
+- job: ICU4C_MSVC_x64_ARM32_ARM64_Release_Distrelease
+  displayName: 'C: MSVC x64 ARM32 ARM64 Release (VS 2017) + Distrelease ARM64'
+  timeoutInMinutes: 60
+  pool:
+    vmImage: 'vs2017-win2016'
+    demands: 
+      - msbuild
+      - visualstudio
+      - Cmd
+  steps:
+    - checkout: self
+      lfs: true
+      fetchDepth: 1
+    - task: VSBuild@1
+      displayName: 'Build Solution'
+      inputs:
+        solution: icu4c/source/allinone/allinone.sln
+        platform: x64
+        configuration: Release
+    - task: VSBuild@1
+      displayName: 'Build ARM32'
+      inputs:
+        solution: icu4c/source/allinone/allinone.sln
+        platform: ARM
+        configuration: Release
+    - task: VSBuild@1
+      displayName: 'Build ARM64'
+      inputs:
+        solution: icu4c/source/allinone/allinone.sln
+        platform: ARM64
+        configuration: Release
+    - task: PowerShell@2
+      displayName: 'PowerShell: Distrelease script (ARM64)'
+      inputs:
+        targetType: filePath
+        filePath: 'icu4c/packaging/distrelease.ps1'
+        arguments: '-arch ARM64'
+        workingDirectory: icu4c
+    - task: PublishBuildArtifacts@1
+      displayName: 'Publish ARM64 Artifacts: icu-windows.zip'
+      inputs:
+        PathtoPublish: 'icu4c/source/dist/icu-windows.zip'
+        ArtifactName: '$(Build.BuildNumber)_ICU4C_MSVC_ARM64_Release'
+#-------------------------------------------------------------------------
+- job: ICU4C_MSVC_x64_Release_DataFilter
+  displayName: 'C: MSVC 64-bit Release DataFilter (VS 2017)'
+  timeoutInMinutes: 30
+  pool:
+    vmImage: 'vs2017-win2016'
+    demands: 
+      - msbuild
+      - visualstudio
+      - Cmd
+  steps:
+    - checkout: self
+      lfs: true
+      fetchDepth: 1
+    - powershell: |
+        $filterPath = $Env:BUILD_SOURCESDIRECTORY + "\.ci-builds\data-filter.json"
+        $vstsCommandString = "vso[task.setvariable variable=ICU_DATA_FILTER_FILE]" + $filterPath
+        Write-Host "##$vstsCommandString"
+    - task: VSBuild@1
+      displayName: 'Build Solution with Data Filter'
+      inputs:
+        solution: icu4c/source/allinone/allinone.sln
+        platform: x64
+        configuration: Release
+        msbuildArgs: '/p:SkipUWP=true'
+#-------------------------------------------------------------------------
+- job: ICU4C_MSVC_x86_Debug
+  displayName: 'C: MSVC 32-bit Debug (VS 2017)'
+  timeoutInMinutes: 60
+  pool:
+    vmImage: 'vs2017-win2016'
+    demands: 
+      - msbuild
+      - visualstudio
+      - Cmd
+  steps:
+    - checkout: self
+      lfs: true
+      fetchDepth: 1
+    - task: VSBuild@1
+      displayName: 'Build Solution'
+      inputs:
+        solution: icu4c/source/allinone/allinone.sln
+        platform: Win32
+        configuration: Debug
+    - task: BatchScript@1
+      displayName: 'Run Tests (icucheck.bat)'
+      inputs:
+        filename: icu4c/source/allinone/icucheck.bat
+        arguments: 'x86 Debug'
+#-------------------------------------------------------------------------
+- job: ICU4C_MSYS2_GCC_x86_64_Release
+  displayName: 'C: MSYS2 GCC x86_64 Release'
+  timeoutInMinutes: 45
+  pool:
+    vmImage: 'vs2017-win2016'
+    demands:
+      - Cmd
+  steps:
+    - checkout: self
+      lfs: true
+      fetchDepth: 1
+    - script: |
+       choco install -y msys2
+       rem refreshenv
+      displayName: 'Install MSYS2'
+    - script: |
+       c:\tools\msys64\usr\bin\bash.exe -lc "echo 'Hello World' && uname -a"
+       c:\tools\msys64\usr\bin\bash.exe -lc "pacman --noconfirm -S mingw-w64-x86_64-toolchain"
+       c:\tools\msys64\usr\bin\bash.exe -lc "pacman --noconfirm -S make"
+       exit
+      displayName: 'Install mingw-w64-x86_64-toolchain'
+    - script: |
+       set MSYSTEM=MINGW64
+       c:\tools\msys64\usr\bin\bash.exe -lc "cd $BUILD_SOURCESDIRECTORY && cd icu4c/source && ./runConfigureICU MinGW --prefix='/tmp/build-icu' && make -j2 check"
+      displayName: 'Build and Test'
+    - script: |
+       set MSYSTEM=MINGW64
+       c:\tools\msys64\usr\bin\bash.exe -lc "cd $BUILD_SOURCESDIRECTORY && cd icu4c/source && make install && cd /tmp/build-icu && echo 'Recursive ls' && ls -lR"
+      displayName: 'make install'
+    - script: |
+       set MSYSTEM=MINGW64
+       c:\tools\msys64\usr\bin\bash.exe -lc "echo 'Run icuinfo from MSYS shell' && cd /tmp/build-icu/bin && ./icuinfo.exe"
+       echo 'Run icuinfo from CMD shell' && cd /d C:\tools\msys64\tmp\build-icu\bin && set PATH=C:\tools\msys64\mingw64\bin;%PATH% && icuinfo.exe"
+      displayName: 'run icuinfo'
+#-------------------------------------------------------------------------
+- job: ICU4C_Clang_MacOSX_WarningsAsWarnings
+  displayName: 'C: macOSX Clang WarningsAsWarnings (Mojave 10.14)'
+  timeoutInMinutes: 30
+  pool:
+    vmImage: 'macOS-10.14'
+  steps:
+    - checkout: self
+      lfs: true
+      fetchDepth: 1
+    - script: |
+        export CPPFLAGS="-Wall -Wextra -Wextra-semi -Wundef -Wnon-virtual-dtor" && cd icu4c/source && ./runConfigureICU MacOSX && make -j2 tests
+      displayName: 'Build only (WarningsAsErrors)'
+      env:
+        CC: clang
+        CXX: clang++
diff --git a/.ci-builds/.azure-valgrind.yml b/.ci-builds/.azure-valgrind.yml
new file mode 100644
index 0000000..47bc888
--- /dev/null
+++ b/.ci-builds/.azure-valgrind.yml
@@ -0,0 +1,73 @@
+# Azure Pipelines configuration for Valgrind for ICU4C.
+# 
+# Note: The valgrind test configuration is in a separate file
+# so that it can be run independently from the regular builds.
+#
+# The Ubuntu images don't have valgrind installed by default, so we need
+# install it first.
+#
+# Only run valgrind on the master and maint branches, and
+# batch up any pending changes so that we will only have at most
+# one build running at a given time (since it takes time).
+trigger:
+  batch: true
+  branches:
+    include:
+    - master
+    - maint/maint-*
+  paths:
+    include:
+    - '*'
+    exclude:
+    - docs/*
+    - icu4j/*
+    - tools/*
+    - vendor/*
+    - .appveyor.xml
+    - .cpyskip.txt
+    - .travis.yml
+    - KEYS
+    - README.md
+
+jobs:
+#-------------------------------------------------------------------------
+- job: ICU4C_Clang_Valgrind_Ubuntu_1604
+  displayName: 'C: Linux Clang Valgrind (Ubuntu 16.04)'
+  timeoutInMinutes: 60
+  pool:
+    vmImage: 'Ubuntu 16.04'
+  steps:
+    - checkout: self
+      lfs: true
+      fetchDepth: 1
+    - script: |
+        set -ex
+        sudo apt -y update
+        sudo apt install -y valgrind
+      displayName: 'Install valgrind'
+      timeoutInMinutes: 5
+    - script: |
+        cd icu4c/source && ./runConfigureICU --enable-debug Linux --disable-renaming --disable-layout --disable-layoutex && make -j2 tests
+      displayName: 'Build'
+      timeoutInMinutes: 10
+      env:
+        CC: clang
+        CXX: clang++
+    - script: |
+        cd icu4c/source/test/intltest && LD_LIBRARY_PATH=../../lib:../../stubdata:../../tools/ctestfw:$LD_LIBRARY_PATH valgrind --tool=memcheck --error-exitcode=1 --leak-check=full --show-reachable=yes ./intltest
+      displayName: 'Valgrind intltest'
+      timeoutInMinutes: 45
+    - script: |
+        cd icu4c/source/test/cintltst && LD_LIBRARY_PATH=../../lib:../../stubdata:../../tools/ctestfw:$LD_LIBRARY_PATH valgrind --tool=memcheck --error-exitcode=1 --leak-check=full --show-reachable=yes ./cintltst
+      displayName: 'Valgrind cintltst'
+      timeoutInMinutes: 15
+    - script: |
+        cd icu4c/source/test/iotest && LD_LIBRARY_PATH=../../lib:../../stubdata:../../tools/ctestfw:$LD_LIBRARY_PATH valgrind --tool=memcheck --error-exitcode=1 --leak-check=full --show-reachable=yes ./iotest
+      displayName: 'Valgrind iotest'
+      timeoutInMinutes: 5
+    - script: |
+        cd icu4c/source/tools/icuinfo && LD_LIBRARY_PATH=../../lib:../../stubdata:../../tools/ctestfw:$LD_LIBRARY_PATH valgrind --tool=memcheck --error-exitcode=1 --leak-check=full --show-reachable=yes ./icuinfo
+      displayName: 'Valgrind icuinfo'
+      timeoutInMinutes: 5
+
+#-------------------------------------------------------------------------
diff --git a/.ci-builds/data-filter.json b/.ci-builds/data-filter.json
new file mode 100644
index 0000000..d2dd74d
--- /dev/null
+++ b/.ci-builds/data-filter.json
@@ -0,0 +1,38 @@
+{
+  "localeFilter": {
+    "filterType": "language",
+    "whitelist": [
+      "en",
+      "de",
+      "zh"
+    ]
+  },
+// Test mixed feature filter and resource filter
+// Exlude translit data so we can run test for ICU-20673
+  "featureFilters": {
+    "misc": {
+      "whitelist": ["supplementalData"]
+    },
+    "translit": "exclude"
+  },
+  "resourceFilters": [
+    {
+      "categories": ["misc"],
+      "files": {
+        "whitelist": ["supplementalData"]
+      },
+      "rules": ["+/*"]
+    }
+  ],
+// Test fileReplacements (relative path)
+  "fileReplacements": {
+    "directory": "$SRC",
+    "replacements": [
+      {
+        "src": "brkitr/rules/line.txt",
+        "dest": "brkitr/rules/line_normal.txt"
+      },
+      "misc/dayPeriods.txt"
+    ]
+  }
+}
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..cd3b048
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,173 @@
+matrix:
+  include:
+
+    # ICU4C Docs Build
+    #    TODO: publish the latest built docs from master on GitHub pages.
+    #          See https://gist.github.com/vidavidorra/548ffbcdae99d752da02 for ideas.
+    - name:     "c: docs"
+      dist:     xenial
+      language: cpp
+      addons:
+         apt:
+           update: true
+           packages:
+             - doxygen
+      before_script:
+        - cd icu4c/source
+        - ./runConfigureICU Linux --disable-renaming
+      script:
+        # fail if 'warning:' appears in doxygen's output, but ignore warnings from file Doxyfile.
+        # The Doxygen version from Travis is down-rev, and doesn't recognize some options
+        # in the Doxyfile config file.
+        # 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 )
+        # in this branch, we have doc warnings.
+        make doc
+
+
+    - name: "j"
+      language: java
+      addons:
+        apt:
+          packages:
+            - ant
+            - ant-optional
+      env:      BUILD=ICU4J
+      before_script:
+        - cd icu4j
+        - ant init
+      script:
+        - ant check
+      after_failure:
+          -  cat `find out/junit-results -name "*.txt" -exec grep -l FAILED {} \;`
+
+    - name: "c: linux gcc 8 Wextra"
+      dist:     bionic
+      language: cpp
+      addons:
+         apt:
+           packages:
+             - g++-8
+      env: PREFIX=/tmp/icu-prefix CC=gcc-8 CXX=g++-8 CXXFLAGS="-Wextra"
+      before_script:
+        - mkdir build
+        - cd build
+        - ../icu4c/source/runConfigureICU Linux --disable-debug --enable-release --disable-layoutex --prefix="${PREFIX}" || (tail -100 config.log ; false)
+        - make -j2
+      script:
+        - make -j2 check
+        - make install
+        #- PATH="${PREFIX}/bin:$PATH" make -C test/hdrtst 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 (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.
+
+    - name: "c: linux gcc"
+      dist:     xenial
+      language: cpp
+      compiler: gcc
+      env:      PREFIX=/tmp/icu-prefix
+      before_script:
+        - mkdir build
+        - cd build
+        - ../icu4c/source/runConfigureICU --enable-debug --disable-release Linux --prefix="${PREFIX}" --enable-tracing
+        - make -j2
+      script:
+        - 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.)
+    - name: "c: linux clang"
+      dist:     xenial
+      language: cpp
+      env:
+        - CPPFLAGS="-DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1"
+        - CFLAGS="-Wimplicit-fallthrough"
+        - CXXFLAGS="-Wimplicit-fallthrough"
+      compiler: clang
+      before_install:
+        - sudo apt-get -y install doxygen  # for make dist
+      before_script:
+        - cd icu4c/source
+        - ./runConfigureICU Linux
+        - make -j2
+      script:
+        - make -j2 check
+        - ( cd test/depstest && python3 depstest.py ../../../source/ )
+        #- ( cd .. && source/test/hdrtst/testtagsguards.sh )
+        #- make dist # not sure if this is -j safe everywhere.
+
+    - name: "c: osx clang"
+      language: cpp
+      env:      BUILD=MACINTOSH
+      os:       osx
+      compiler: clang
+      # Use the macOS target to test Python 2 in data build script.
+      # TODO(ICU-20301): Change this back to the default Python version 3.
+      script:   cd icu4c/source && PYTHON=python2 ./runConfigureICU MacOSX && make -j2 check
+
+    # Clang Linux with address sanitizer.
+    # Note - the 'sudo: true' option forces Travis to use a Virtual machine on GCE instead of
+    #        a Container on EC2 or Packet. Asan builds of ICU fail otherwise.
+    - name: "c: linux asan"
+      language: cpp
+      env:
+        - CPPFLAGS="-fsanitize=address"
+        - LDFLAGS="-fsanitize=address"
+      os:       linux
+      dist:     xenial
+      sudo:     true
+      compiler: clang
+      before_script:
+        - cd icu4c/source
+        - ./runConfigureICU --enable-debug --disable-release Linux --disable-renaming --enable-tracing
+        - make -j2
+      script:
+        - make -j2 check
+
+
+    # Clang Linux with thread sanitizer.
+    #
+    - name: "c: linux tsan"
+      language: cpp
+      env:
+          - INTLTEST_OPTS="utility/MultithreadTest"
+          - CPPFLAGS="-fsanitize=thread"
+          - LDFLAGS=-fsanitize=thread
+      os:       linux
+      dist:     xenial
+      sudo:     true
+      compiler: clang
+      script:
+          - cd icu4c/source
+          - ./runConfigureICU --enable-debug --disable-release Linux --disable-renaming
+          - make -j2
+          - make -j2 -C test
+          - make -j2 -C test/intltest check
+
+    # copyright scan / future linter
+    # - name: "lint"
+    #   script:
+    #       - perl tools/scripts/cpysearch/cpyscan.pl
+
+    # - name: "j: icu4c release tools"
+    #   language: "java"
+    #   script:
+    #     - mvn -f tools/release/java/pom.xml package dependency:analyze
+    #   cache:
+    #     directories:
+    #     - $HOME/.m2