# Azure Pipelines (VSTS) configuration for CI builds for ICU. trigger: branches: include: - main - maint/maint-* paths: include: - icu4c - .ci-builds/.azure-pipelines-icu4c.yml pr: branches: include: - main - maint/maint-* paths: include: - icu4c - .ci-builds/.azure-pipelines-icu4c.yml variables: MAVEN_ARGS: '--show-version --no-transfer-progress' jobs: #------------------------------------------------------------------------- - job: ICU4C_Clang_Ubuntu_2204 displayName: 'C: Linux Clang (Ubuntu 22.04)' timeoutInMinutes: 30 pool: vmImage: 'ubuntu-22.04' steps: - checkout: self lfs: true fetchDepth: 10 - script: | cd icu4c/source && ./runConfigureICU Linux && make -j -l2.5 check displayName: 'Build and Test' env: CC: clang CXX: clang++ - script: | cd icu4c/source/test/cintltst && LANG=C LD_LIBRARY_PATH=../../lib:../../tools/ctestfw ./cintltst /tsutil/cloctst/TestCDefaultLocale displayName: 'Test C Default locale' - script: | cd icu4c/source/test/cintltst && LANG=C.UTF-8 LD_LIBRARY_PATH=../../lib:../../tools/ctestfw ./cintltst /tsutil/cloctst/TestCDefaultLocale displayName: 'Test C.UTF-8 Default locale' #------------------------------------------------------------------------- - job: ICU4C_Clang_Ubuntu_DataFilter_2204 displayName: 'C: Linux Clang DataFilter (Ubuntu 22.04)' timeoutInMinutes: 30 pool: vmImage: 'ubuntu-22.04' steps: - checkout: self lfs: true fetchDepth: 10 # Note: This job uses `make -j2` instead of `make -j -l2.5` because with more parallelism (PR #2456) # this check became flaky. The build apparently was not done copying one or another .ucm file before # calling makeconv for it, although the Makefile has appropriate dependencies. - 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) && \ (cd test/cintltst && LANG=C LD_LIBRARY_PATH=../../lib:../../tools/ctestfw ./cintltst /tsutil/cloctst/TestEnglishExemplarCharacters /tsutil/cldrtest/TestCoverage) displayName: 'Build with Data Filter' env: CC: clang CXX: clang++ #------------------------------------------------------------------------- - job: ICU4C_Clang_Cpp17_Debug_Ubuntu_2204 displayName: 'C: Linux Clang C++17 Debug (Ubuntu 22.04)' timeoutInMinutes: 30 pool: vmImage: 'ubuntu-22.04' steps: - checkout: self lfs: true fetchDepth: 10 - script: | export CXXFLAGS="-std=c++17 -Winvalid-constexpr" && cd icu4c/source && ./runConfigureICU --enable-debug --disable-release Linux && make -j -l2.5 check displayName: 'Build and Test C++17' env: CC: clang CXX: clang++ #------------------------------------------------------------------------- - job: ICU4C_GCC_Ubuntu_2004 displayName: 'C: Linux GCC (Ubuntu 20.04)' timeoutInMinutes: 30 pool: vmImage: 'ubuntu-20.04' steps: - checkout: self lfs: true fetchDepth: 10 - script: | cd icu4c/source && ./runConfigureICU Linux && make -j -l2.5 check displayName: 'Build and Test' env: CC: gcc CXX: g++ #------------------------------------------------------------------------- - job: ICU4C_GCC11_Cpp20_Ubuntu_2004 displayName: 'C: Linux GCC-11 C++20 (Ubuntu 20.04)' timeoutInMinutes: 30 pool: vmImage: 'ubuntu-20.04' steps: - checkout: self lfs: true fetchDepth: 10 - script: | sudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt update sudo apt install gcc-11 g++-11 displayName: 'Install GCC-11' - script: | cd icu4c/source && ./runConfigureICU Linux && make -j -l2.5 check displayName: 'Build and Test' env: CC: gcc-11 CXX: g++-11 CXXFLAGS: '-std=c++20 -fext-numeric-literals' #------------------------------------------------------------------------- - job: ICU4C_Clang_Ubuntu_2004_LANG displayName: 'C: Linux Clang (Ubuntu 20.04) - LANG has extension tags' timeoutInMinutes: 30 pool: vmImage: 'ubuntu-20.04' steps: - checkout: self lfs: true fetchDepth: 10 - script: | cd icu4c/source && ./runConfigureICU Linux && make -j -l2.5 check displayName: 'Build and Test' env: CC: clang CXX: clang++ LANG: "en_US@calendar=gregorian;hours=h12" #------------------------------------------------------------------------- - job: ICU4C_Clang16_Ubuntu_2004_WarningsAsErrors displayName: 'C: Linux Clang-16 WarningsAsErrors (Ubuntu 20.04)' timeoutInMinutes: 30 pool: vmImage: 'ubuntu-20.04' steps: - checkout: self lfs: true fetchDepth: 10 # Install Clang-16 from https://apt.llvm.org/ - script: | curl -Ls https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add - sudo apt-add-repository 'deb http://apt.llvm.org/focal/ llvm-toolchain-focal-16 main' sudo apt update sudo apt install -qy clang-16 lld-16 libc++-16-dev libc++abi-16-dev displayName: 'Install Clang-16' - script: | cd icu4c/source && ./runConfigureICU Linux && make -j -l2.5 tests displayName: 'Build only (WarningsAsErrors)' env: CC: clang-16 CPPFLAGS: '-Werror -Wno-strict-prototypes -Wall -Wextra -Wextra-semi -Wundef -Wnon-virtual-dtor -Wsuggest-override' CXX: clang++-16 #------------------------------------------------------------------------- - job: ICU4C_Clang16_Cpp20_Ubuntu_2004 displayName: 'C: Linux Clang-16 C++20 (Ubuntu 20.04)' timeoutInMinutes: 30 pool: vmImage: 'ubuntu-20.04' steps: - checkout: self lfs: true fetchDepth: 10 # Install Clang-16 from https://apt.llvm.org/ - script: | curl -Ls https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add - sudo apt-add-repository 'deb http://apt.llvm.org/focal/ llvm-toolchain-focal-16 main' sudo apt update sudo apt install -qy clang-16 lld-16 libc++-16-dev libc++abi-16-dev displayName: 'Install Clang-16' - script: | cd icu4c/source && ./runConfigureICU Linux && make -j -l2.5 check displayName: 'Build and Test' env: CC: clang-16 CPPFLAGS: '-Werror -Wno-strict-prototypes' CXX: clang++-16 CXXFLAGS: '-std=c++20' #------------------------------------------------------------------------- - job: ICU4C_Clang16_Cpp20_libcpp_Ubuntu_2004 displayName: 'C: Linux Clang-16 C++20 libc++ (Ubuntu 20.04)' timeoutInMinutes: 30 pool: vmImage: 'ubuntu-20.04' steps: - checkout: self lfs: true fetchDepth: 10 # Install Clang-16 from https://apt.llvm.org/ - script: | curl -Ls https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add - sudo apt-add-repository 'deb http://apt.llvm.org/focal/ llvm-toolchain-focal-16 main' sudo apt update sudo apt install -qy clang-16 lld-16 libc++-16-dev libc++abi-16-dev displayName: 'Install Clang-16' - script: | cd icu4c/source && ./runConfigureICU Linux && make -j -l2.5 check displayName: 'Build and Test' env: CC: clang-16 CPPFLAGS: '-Werror -Wno-strict-prototypes' CXX: clang++-16 CXXFLAGS: '-std=c++20 -stdlib=libc++' #------------------------------------------------------------------------- # VS 2022 Builds #------------------------------------------------------------------------- - job: ICU4C_MSVC_x64_Release_Distrelease displayName: 'C: MSVC 64-bit Release (VS 2022) + Distrelease' timeoutInMinutes: 30 pool: vmImage: 'windows-2022' demands: - msbuild - visualstudio - Cmd steps: - checkout: self lfs: true fetchDepth: 10 - 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_x64_Release_DataFilter displayName: 'C: MSVC 64-bit Release DataFilter (VS 2022)' timeoutInMinutes: 30 pool: vmImage: 'windows-2022' demands: - msbuild - visualstudio - Cmd steps: - 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_Release_Distrelease displayName: 'C: MSVC 32-bit Release (VS 2022) + Distrelease' timeoutInMinutes: 30 pool: vmImage: 'windows-2022' demands: - msbuild - visualstudio - Cmd steps: - checkout: self lfs: true fetchDepth: 10 - task: VSBuild@1 displayName: 'Build Solution' inputs: solution: icu4c/source/allinone/allinone.sln platform: Win32 configuration: Release - task: BatchScript@1 displayName: 'Run Tests (icucheck.bat)' inputs: filename: icu4c/source/allinone/icucheck.bat arguments: 'x86 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_Release displayName: 'C: MSVC x64 ARM32 Release (VS 2022)' timeoutInMinutes: 35 pool: vmImage: 'windows-2022' demands: - msbuild - visualstudio - Cmd steps: - checkout: self lfs: true fetchDepth: 10 - 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 #------------------------------------------------------------------------- - job: ICU4C_MSVC_x64_ARM64_Release_Distrelease displayName: 'C: MSVC x64 ARM64 Release (VS 2022) + Distrelease' timeoutInMinutes: 35 pool: vmImage: 'windows-2022' demands: - msbuild - visualstudio - Cmd steps: - checkout: self lfs: true fetchDepth: 10 - task: VSBuild@1 displayName: 'Build Solution' inputs: solution: icu4c/source/allinone/allinone.sln platform: x64 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_Debug displayName: 'C: MSVC x64 Debug (VS 2022)' timeoutInMinutes: 35 pool: vmImage: 'windows-2022' demands: - msbuild - visualstudio - Cmd steps: - checkout: self lfs: true fetchDepth: 10 - task: VSBuild@1 displayName: 'Build Solution' inputs: solution: icu4c/source/allinone/allinone.sln platform: x64 configuration: Debug - task: BatchScript@1 displayName: 'Run x64 Debug Tests (icucheck.bat)' inputs: filename: icu4c/source/allinone/icucheck.bat arguments: 'x64 Debug' #------------------------------------------------------------------------- - job: ICU4C_MSVC_ARM64_Debug displayName: 'C: MSVC ARM64 Debug (VS 2022)' timeoutInMinutes: 35 pool: vmImage: 'windows-2022' demands: - msbuild - visualstudio - Cmd steps: - checkout: self lfs: true fetchDepth: 10 - task: VSBuild@1 displayName: 'Build Solution' inputs: solution: icu4c/source/allinone/allinone.sln platform: x64 configuration: Debug - task: VSBuild@1 displayName: 'Build ARM64 Debug' inputs: solution: icu4c/source/allinone/allinone.sln platform: ARM64 configuration: Debug #------------------------------------------------------------------------- # There is no /std:c++20 yet, so use c++latest as that includes many of # the C++20 compiler and library changes. - job: ICU4C_MSVC_x64_Release_CppLatest displayName: 'C: MSVC 64-bit Release (VS 2022) /std:c++latest' timeoutInMinutes: 30 pool: vmImage: 'windows-2022' demands: - msbuild - visualstudio - Cmd steps: - checkout: self lfs: true fetchDepth: 10 - task: VSBuild@1 displayName: 'Build Solution' inputs: solution: icu4c/source/allinone/allinone.sln platform: x64 configuration: Release msbuildArgs: '/p:LanguageStandard="stdcpplatest"' - task: BatchScript@1 displayName: 'Run Tests (icucheck.bat)' inputs: filename: icu4c/source/allinone/icucheck.bat arguments: 'x64 Release' #------------------------------------------------------------------------- # VS 2019 Builds #------------------------------------------------------------------------- - job: ICU4C_MSVC_x64_Release_VS2019 displayName: 'C: MSVC 64-bit Release (VS 2019)' timeoutInMinutes: 30 pool: vmImage: 'windows-2019' demands: - msbuild - visualstudio - Cmd steps: - checkout: self lfs: true fetchDepth: 10 - 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' #------------------------------------------------------------------------- - job: ICU4C_MSVC_x86_Debug_VS2019 displayName: 'C: MSVC 32-bit Debug (VS 2019)' timeoutInMinutes: 60 pool: vmImage: 'windows-2019' demands: - msbuild - visualstudio - Cmd steps: - checkout: self lfs: true fetchDepth: 10 - 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: 'windows-2019' demands: - Cmd steps: - checkout: self lfs: true fetchDepth: 10 - 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 -j -l2.5 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_MacOS_WarningsAsErrors displayName: 'C: macOS(Latest) Clang WarningsAsErrors' timeoutInMinutes: 30 pool: vmImage: 'macOS-latest' steps: - checkout: self lfs: true fetchDepth: 10 - script: | export CPPFLAGS="-Werror -Wall -Wextra -Wextra-semi -Wundef -Wnon-virtual-dtor" && cd icu4c/source && ./runConfigureICU MacOSX && make -j -l2.5 check displayName: 'Build and Test (WarningsAsErrors)' env: CC: clang CXX: clang++ #------------------------------------------------------------------------- - job: ICU4C_icuexportdata_Ubuntu_2204 displayName: 'C: Create Artifacts from icuexportdata' timeoutInMinutes: 30 pool: vmImage: 'ubuntu-22.04' steps: - checkout: self lfs: true fetchDepth: 10 - script: | cd icu4c/source && ./runConfigureICU Linux && make -j -l2.5 displayName: 'Build' env: CC: clang CXX: clang++ - script: | cd icu4c/source mkdir -p icuexportdata/uprops/fast ./bin/icuexportdata --mode uprops --index --copyright --verbose --destdir icuexportdata/uprops/fast --trie-type fast --all mkdir -p icuexportdata/uprops/small ./bin/icuexportdata --mode uprops --index --copyright --verbose --destdir icuexportdata/uprops/small --trie-type small --all displayName: 'Build property data files' env: LD_LIBRARY_PATH: lib - script: | cd icu4c/source mkdir -p icuexportdata/norm/fast ./bin/icuexportdata --mode norm --index --copyright --verbose --destdir icuexportdata/norm/fast --trie-type fast --all mkdir -p icuexportdata/norm/small ./bin/icuexportdata --mode norm --index --copyright --verbose --destdir icuexportdata/norm/small --trie-type small --all displayName: 'Build normalization data files' env: LD_LIBRARY_PATH: lib - script: | cd icu4c/source mkdir -p icuexportdata/ucase/fast ./bin/icuexportdata --mode ucase --index --copyright --verbose --destdir icuexportdata/ucase/fast --trie-type fast --all mkdir -p icuexportdata/ucase/small ./bin/icuexportdata --mode ucase --index --copyright --verbose --destdir icuexportdata/ucase/small --trie-type small --all displayName: 'Build case data files' env: LD_LIBRARY_PATH: lib - script: | cd icu4c/source FILES=`ls data/coll "*.txt"` mkdir -p icuexportdata/collation/unihan ./bin/genrb -X -s data/coll/ --ucadata data/in/coll/ucadata-unihan-icu4x.icu -d icuexportdata/collation/unihan $FILES rm icuexportdata/collation/unihan/*.res mkdir -p icuexportdata/collation/implicithan ./bin/genrb -X -s data/coll/ --ucadata data/in/coll/ucadata-implicithan-icu4x.icu -d icuexportdata/collation/implicithan $FILES rm icuexportdata/collation/implicithan/*.res displayName: 'Build collation data files' env: LD_LIBRARY_PATH: lib - script: | cd icu4c/source mkdir -p icuexportdata/segmenter/dictionary for FILE in `ls data/brkitr/dictionaries` do ./bin/gendict --uchars --toml data/brkitr/dictionaries/$FILE icuexportdata/segmenter/dictionary/`basename $FILE .txt`.toml done displayName: 'Build segmenter dictionary files' env: LD_LIBRARY_PATH: lib - task: ArchiveFiles@2 displayName: 'Zip' inputs: rootFolderOrFile: 'icu4c/source/icuexportdata' includeRootFolder: false archiveFile: 'icuexportdata_tag-goes-here.zip' - task: PublishBuildArtifacts@1 displayName: 'Publish Artifact' inputs: PathtoPublish: 'icuexportdata_tag-goes-here.zip' ArtifactName: 'icuexportdata_output' #------------------------------------------------------------------------- # Builds MSVC with cpp exceptions turned off - job: ICU4C_MSVC_x64_Release_NoExceptions displayName: 'C: MSVC 64-bit Release No Exceptions' timeoutInMinutes: 30 pool: vmImage: 'windows-2022' demands: - msbuild - visualstudio - Cmd steps: - checkout: self lfs: true fetchDepth: 10 - task: VSBuild@1 displayName: 'Build Solution' inputs: solution: icu4c/source/allinone/allinone.sln platform: x64 configuration: Release msbuildArgs: '/p:_HAS_EXCEPTIONS=0' - task: BatchScript@1 displayName: 'Run Tests (icucheck.bat)' inputs: filename: icu4c/source/allinone/icucheck.bat arguments: 'x64 Release'