ICU-22913 Fix coverity warning in wrtxml.cpp #1135
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Copyright (C) 2021 and later: Unicode, Inc. and others. | |
# License & terms of use: http://www.unicode.org/copyright.html | |
# | |
# GitHub Action continuous integration script for ICU post-merge tasks. | |
name: GHA ICU Merge CI | |
on: | |
push: | |
branches: | |
- main | |
- 'maint/maint*' | |
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 | |
# For non-release branches (namely: PRs), only run CI on the most recent commit. Cancel | |
# runs on previous commits mid-flight when new commits are pushed. | |
# https://docs.github.com/en/actions/using-jobs/using-concurrency#example-only-cancel-in-progress-jobs-on-specific-branches | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: ${{ !contains(github.ref, 'maint/') && github.ref != 'main' }} | |
env: | |
SHARED_MVN_ARGS: '--show-version --no-transfer-progress' | |
permissions: | |
contents: read | |
jobs: | |
# Initialize the Maven artifact cache | |
# Uses Java 8 because Java version not deemed significant for downloading | |
# artifacts | |
# | |
# This job is created according to the cache strategy of reuse from a single job: | |
# https://github.com/actions/cache/blob/main/caching-strategies.md#make-cache-read-only--reuse-cache-from-centralized-job | |
icu4j-mvn-init-cache: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout and setup | |
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
with: | |
lfs: true | |
- name: Checkout lfs objects | |
run: git lfs pull | |
- name: Cache local Maven repository | |
uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 | |
with: | |
path: ~/.m2/repository | |
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} | |
- uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9 # v4.2.1 | |
with: | |
distribution: 'temurin' | |
java-version: '8' | |
# Download all of the artifacts needed for the code and build plugins | |
- name: Download all artifacts | |
run: | | |
cd icu4j; | |
mvn ${SHARED_MVN_ARGS} dependency:go-offline -P '!old_jdk_taglet' | |
# Test ICU4J with little-endian ICU4C data only | |
icu4j-little-endian-data-test: | |
needs: icu4j-mvn-init-cache | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout and setup | |
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
with: | |
lfs: true | |
- name: Checkout lfs objects | |
run: git lfs pull | |
- name: Lookup read-only cache of local Maven repository | |
uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 | |
with: | |
path: ~/.m2/repository | |
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} | |
restore-keys: | | |
${{ runner.os }}-maven- | |
lookup-only: true | |
- uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9 # v4.2.1 | |
with: | |
distribution: 'temurin' | |
java-version: '11' | |
- name: ICU4J little-endian | |
run: | | |
cd icu4c/source; | |
ICU_DATA_BUILDTOOL_OPTS=--include_uni_core_data ./runConfigureICU Linux; | |
make -j -l4.5 check; | |
mkdir /tmp/icu4j_data_test; | |
cp -P data/out/tmp/icudt*l* /tmp/icu4j_data_test/ | |
cd ../../icu4j; | |
mvn ${SHARED_MVN_ARGS} clean; | |
mvn ${SHARED_MVN_ARGS} -Dicu4c.data.path=/tmp/icu4j_data_test install | |
# Compile libraries used by all ICU4C performance tests. | |
icu4c-store-perf-libs: | |
# Run performance tests only on the main branch of the ICU repository. | |
if: github.repository == 'unicode-org/icu' && github.ref == 'refs/heads/main' | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
- name: Build ICU libraries | |
run: | | |
cd icu4c/source; | |
./runConfigureICU Linux; | |
make -j -l4.5 all; | |
cd lib; | |
cp -Ps ../tools/ctestfw/libicutest* . | |
- name: Upload ICU libraries | |
uses: actions/upload-artifact@0b2256b8c012f0828dc542b3febcab082c67f72b # v4.3.4 | |
with: | |
name: icu-perf-libs | |
path: icu4c/source/lib | |
retention-days: 1 | |
# Assorted ICU4C performance tests | |
icu4c-performance-tests: | |
# Run performance tests only on the main branch of the ICU repository. | |
if: github.repository == 'unicode-org/icu' && github.ref == 'refs/heads/main' | |
needs: icu4c-store-perf-libs | |
strategy: | |
fail-fast: false | |
matrix: | |
perf: [charperf, usetperf, utfperf] | |
include: | |
- perf: charperf | |
tests: TestIsAlpha TestIsUpper TestIsLower TestIsDigit TestIsSpace TestIsAlphaNumeric TestIsPrint TestIsControl TestToLower TestToUpper TestIsWhiteSpace | |
- perf: usetperf | |
tests: titlecase_letter_add titlecase_letter_contains titlecase_letter_iterator unassigned_add unassigned_contains unassigned_iterator pattern1 pattern2 pattern3 | |
- perf: utfperf | |
tests: Roundtrip FromUnicode FromUTF8 | |
file: "-f ../../icu4j/perf-tests/data/conversion/xuzhimo.txt" | |
flag: "-e gb18030" | |
permissions: | |
contents: write | |
deployments: write | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
- name: Create directory for lib files | |
run: mkdir icu4c/source/perflib | |
- name: Get ICU libs | |
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 | |
with: | |
name: icu-perf-libs | |
path: icu4c/source/lib | |
- name: Build and run ICU4C perf tests | |
run: | | |
cd icu4c/source; | |
./runConfigureICU Linux; | |
(cd test/perf && make -j -l4.5 everything && mkdir -p results && mkdir -p results/${{ matrix.perf }}) | |
LD_LIBRARY_PATH=lib ./test/perf/${{ matrix.perf }}/${{ matrix.perf }} ${{ matrix.flag }} -t 5 -p 10 ${{ matrix.file }} ${{ matrix.tests }} | tee test/perf/results/${{ matrix.perf }}/output.txt | |
- name: Store performance test results | |
uses: gregtatum/github-action-benchmark@d3f06f738e9612988d575db23fae5ca0008d3d12 | |
with: | |
# The perf tests result data is in ndjson format. | |
tool: 'ndjson' | |
output-file-path: icu4c/source/test/perf/results/${{ matrix.perf }}/output.txt | |
# Tentative setting. | |
alert-threshold: '200%' | |
fail-on-alert: true | |
gh-pages-branch: perfdata | |
benchmark-data-dir-path: perf/results/${{ matrix.perf }} | |
auto-push: true | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
comment-on-alert: true | |
# Assorted ICU4C performance tests using data files | |
icu4c-performance-tests-with-files: | |
# Run performance tests only on the main branch of the ICU repository. | |
if: github.repository == 'unicode-org/icu' && github.ref == 'refs/heads/main' | |
needs: icu4c-store-perf-libs | |
strategy: | |
fail-fast: false | |
# Matrix of test drivers and test data and, if applicable, flags. Note | |
# that GHA first excludes the 'exclude:' items from the total of | |
# combinations and then adds the 'include:' items. | |
matrix: | |
perf: [collperf, ustrperf, normperf] | |
data: [TestNames_Asian, TestNames_Chinese, TestNames_Japanese, TestNames_Japanese_h, TestNames_Japanese_k, TestNames_Korean, TestNames_Latin, TestNames_Russian, TestNames_SerbianSH, TestNames_SerbianSR, TestNames_Simplified_Chinese, TestNames_Thai, th18057, thesis, vfear11a] | |
include: | |
- perf: collperf | |
tests: TestIcu_KeyGen_null TestIcu_qsort_strcoll_null TestIcu_qsort_usekey TestIcu_BinarySearch_strcoll_null TestIcu_BinarySearch_usekey | |
- perf: ustrperf | |
tests: TestCtor TestCtor1 TestCtor2 TestCtor3 TestAssign TestAssign1 TestAssign2 TestGetch TestCatenate TestScan TestScan1 TestScan2 | |
flag: "-l -u" | |
- perf: normperf | |
tests: TestICU_NFC_NFD_Text TestICU_NFC_NFC_Text TestICU_NFC_Orig_Text TestICU_NFD_NFD_Text TestICU_NFD_NFC_Text TestICU_NFD_Orig_Text | |
exclude: | |
- perf: collperf | |
data: th18057 | |
- perf: collperf | |
data: thesis | |
- perf: collperf | |
data: vfear11a | |
- perf: ustrperf | |
data: TestNames_Japanese | |
- perf: ustrperf | |
data: thesis | |
- perf: ustrperf | |
data: vfear11a | |
- perf: normperf | |
data: TestNames_Simplified_Chinese | |
permissions: | |
contents: write | |
deployments: write | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
- name: Create directory for lib files | |
run: mkdir icu4c/source/perflib | |
- name: Get ICU libs | |
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 | |
with: | |
name: icu-perf-libs | |
path: icu4c/source/lib | |
- name: Build and run ICU4C perf tests | |
env: | |
DATA_FILE_PATH: ../../icu4j/perf-tests/data/collation | |
run: | | |
cd icu4c/source; | |
./runConfigureICU Linux; | |
(cd test/perf && make -j -l4.5 everything && mkdir -p results && mkdir -p results/${{ matrix.perf }} && mkdir -p results/${{ matrix.perf }}/${{ matrix.data }}) | |
LD_LIBRARY_PATH=lib ./test/perf/${{ matrix.perf }}/${{ matrix.perf }} ${{ matrix.flag }} -t 5 -p 10 -f $DATA_FILE_PATH/${{ matrix.data }}.txt ${{ matrix.tests }} | tee test/perf/results/${{ matrix.perf }}/${{ matrix.data }}/output.txt | |
- name: Store performance test results | |
uses: gregtatum/github-action-benchmark@d3f06f738e9612988d575db23fae5ca0008d3d12 | |
with: | |
# The perf tests result data is in ndjson format. | |
tool: 'ndjson' | |
output-file-path: icu4c/source/test/perf/results/${{ matrix.perf }}/${{ matrix.data }}/output.txt | |
# Tentative setting. | |
alert-threshold: '200%' | |
fail-on-alert: true | |
gh-pages-branch: perfdata | |
benchmark-data-dir-path: perf/results/${{ matrix.perf }}/${{ matrix.data }} | |
auto-push: true | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
comment-on-alert: true | |
# String search performance test | |
icu4c-strsrchperf: | |
# Run performance tests only on the main branch of the ICU repository. | |
if: github.repository == 'unicode-org/icu' && github.ref == 'refs/heads/main' | |
needs: icu4c-store-perf-libs | |
strategy: | |
fail-fast: false | |
# Matrix of locales and corresponding test data. | |
matrix: | |
locale: [de, en, fr, ja, ru, th, zh] | |
include: | |
- locale: de | |
data: udhr_deu_1996 | |
- locale: en | |
data: udhr_eng | |
- locale: fr | |
data: udhr_fra | |
- locale: ja | |
data: udhr_jpn | |
- locale: ru | |
data: udhr_rus | |
- locale: th | |
data: udhr_tha | |
- locale: zh | |
data: udhr_cmn_hans | |
permissions: | |
contents: write | |
deployments: write | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
- name: Create directory for lib files | |
run: mkdir icu4c/source/perflib | |
- name: Get ICU libs | |
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 | |
with: | |
name: icu-perf-libs | |
path: icu4c/source/lib | |
- name: Build and run strschrperf test | |
env: | |
DATA_FILE_PATH: ../../icu4j/perf-tests/data/udhr | |
run: | | |
cd icu4c/source; | |
./runConfigureICU Linux; | |
(cd test/perf && make -j -l4.5 everything && mkdir -p results && mkdir -p results/strsrchperf && mkdir -p results/strsrchperf/${{ matrix.locale }}) | |
LD_LIBRARY_PATH=lib ./test/perf/strsrchperf/strsrchperf -b Test_ICU_Forward_Search Test_ICU_Backward_Search -t 5 -p 10 -L ${{ matrix.locale }} -f $DATA_FILE_PATH/${{ matrix.data }}.txt | tee test/perf/results/strsrchperf/${{ matrix.locale }}/output.txt | |
- name: Store performance test results | |
uses: gregtatum/github-action-benchmark@d3f06f738e9612988d575db23fae5ca0008d3d12 | |
with: | |
# The perf tests result data is in ndjson format. | |
tool: 'ndjson' | |
output-file-path: icu4c/source/test/perf/results/strsrchperf/${{ matrix.locale }}/output.txt | |
# Tentative setting. | |
alert-threshold: '200%' | |
fail-on-alert: true | |
gh-pages-branch: perfdata | |
benchmark-data-dir-path: perf/results/strsrchperf/${{ matrix.locale }} | |
auto-push: true | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
comment-on-alert: true | |
# ICU4J performance test for Unicode sets | |
icu4j-unicodesetperf: | |
# Run performance tests only on the main branch of the ICU repository. | |
if: github.repository == 'unicode-org/icu' && github.ref == 'refs/heads/main' | |
needs: icu4j-mvn-init-cache | |
strategy: | |
fail-fast: false | |
matrix: | |
perf: [UnicodeSetAdd, UnicodeSetContains, UnicodeSetIterate] | |
permissions: | |
contents: write | |
deployments: write | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout and setup | |
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
with: | |
lfs: true | |
- name: Checkout lfs objects | |
run: git lfs pull | |
- name: Lookup read-only cache of local Maven repository | |
uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 | |
with: | |
path: ~/.m2/repository | |
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} | |
restore-keys: | | |
${{ runner.os }}-maven- | |
lookup-only: true | |
- uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9 # v4.2.1 | |
with: | |
distribution: 'temurin' | |
java-version: '8' | |
- name: Build and run unicodesetperf test | |
run: | | |
# This file needs to be restored otherwise GHA cannot | |
# check-out the perfdata branch. Setting up this task with GH lfs | |
# modifies the file but the details of why and how are unknown. | |
git restore --staged tools/multi/proj/icu4cscan/old-xmls.tar.bz2; | |
git restore tools/multi/proj/icu4cscan/old-xmls.tar.bz2; | |
cd icu4j; | |
mvn ${SHARED_MVN_ARGS} verify -DskipITs -DskipTests; | |
git status | |
cd perf-tests; | |
mkdir -p perf/results/j_unicodesetperf/${{ matrix.perf }}; | |
java -cp ./target/*:./target/dependency/* com.ibm.icu.dev.test.perf.UnicodeSetPerf ${{ matrix.perf }} -a -t 2 -p 4 [:Lt:] | tee perf/results/j_unicodesetperf/${{ matrix.perf }}/output.txt | |
- name: Store performance test results | |
uses: gregtatum/github-action-benchmark@d3f06f738e9612988d575db23fae5ca0008d3d12 | |
with: | |
# The perf tests result data is in ndjson format. | |
tool: 'ndjson' | |
output-file-path: icu4j/perf-tests/perf/results/j_unicodesetperf/${{ matrix.perf }}/output.txt | |
# Tentative setting. | |
alert-threshold: '200%' | |
fail-on-alert: true | |
gh-pages-branch: perfdata | |
benchmark-data-dir-path: perf/results/j_unicodesetperf/${{ matrix.perf }} | |
auto-push: true | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
comment-on-alert: true | |
# ICU4J performance test for character APIs | |
icu4j-ucharacterperf: | |
# Run performance tests only on the main branch of the ICU repository. | |
if: github.repository == 'unicode-org/icu' && github.ref == 'refs/heads/main' | |
needs: icu4j-mvn-init-cache | |
strategy: | |
fail-fast: false | |
permissions: | |
contents: write | |
deployments: write | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout and setup | |
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
with: | |
lfs: true | |
- name: Checkout lfs objects | |
run: git lfs pull | |
- name: Lookup read-only cache of local Maven repository | |
uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 | |
with: | |
path: ~/.m2/repository | |
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} | |
restore-keys: | | |
${{ runner.os }}-maven- | |
lookup-only: true | |
- uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9 # v4.2.1 | |
with: | |
distribution: 'temurin' | |
java-version: '8' | |
- name: Build and run ucharacterperf test | |
run: | | |
# This file needs to be restored otherwise GHA cannot | |
# check-out the perfdata branch. Setting up this task with GH lfs | |
# modifies the file but the details of why and how are unknown. | |
git restore --staged tools/multi/proj/icu4cscan/old-xmls.tar.bz2; | |
git restore tools/multi/proj/icu4cscan/old-xmls.tar.bz2; | |
cd icu4j; | |
mvn ${SHARED_MVN_ARGS} verify -DskipITs -DskipTests; | |
cd perf-tests; | |
mkdir -p perf/results/j_ucharacterperf; | |
java -cp ./target/*:./target/dependency/* com.ibm.icu.dev.test.perf.UCharacterPerf -a -t 2 -p 4 0 ffff | tee perf/results/j_ucharacterperf/output.txt | |
- name: Store performance test results | |
uses: gregtatum/github-action-benchmark@d3f06f738e9612988d575db23fae5ca0008d3d12 | |
with: | |
# The perf tests result data is in ndjson format. | |
tool: 'ndjson' | |
output-file-path: icu4j/perf-tests/perf/results/j_ucharacterperf/output.txt | |
# Tentative setting. | |
alert-threshold: '200%' | |
fail-on-alert: true | |
gh-pages-branch: perfdata | |
benchmark-data-dir-path: perf/results/j_ucharacterperf | |
auto-push: true | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
comment-on-alert: true | |
# ICU4J performance test for decimal formatting | |
icu4j-decimalformatperf: | |
# Run performance tests only on the main branch of the ICU repository. | |
if: github.repository == 'unicode-org/icu' && github.ref == 'refs/heads/main' | |
needs: icu4j-mvn-init-cache | |
strategy: | |
fail-fast: false | |
matrix: | |
perf: [TestICUConstruction, TestICUParse, TestICUFormat] | |
locale: [en_US, de_DE] | |
permissions: | |
contents: write | |
deployments: write | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout and setup | |
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
with: | |
lfs: true | |
- name: Checkout lfs objects | |
run: git lfs pull | |
- name: Lookup read-only cache of local Maven repository | |
uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 | |
with: | |
path: ~/.m2/repository | |
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} | |
restore-keys: | | |
${{ runner.os }}-maven- | |
lookup-only: true | |
- uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9 # v4.2.1 | |
with: | |
distribution: 'temurin' | |
java-version: '8' | |
- name: Build and run decimalformatperf | |
run: | | |
# This file needs to be restored otherwise GHA cannot | |
# check-out the perfdata branch. Setting up this task with GH lfs | |
# modifies the file but the details of why and how are unknown. | |
git restore --staged tools/multi/proj/icu4cscan/old-xmls.tar.bz2; | |
git restore tools/multi/proj/icu4cscan/old-xmls.tar.bz2; | |
cd icu4j; | |
mvn ${SHARED_MVN_ARGS} verify -DskipITs -DskipTests; | |
cd perf-tests; | |
mkdir -p perf/results/j_decimalformatperf/${{ matrix.locale }}/${{ matrix.perf }}; | |
# Delay execution by random number of seconds. Spreading execution of multiple | |
# tests over 180 secs. minimizes the possibility of push conflicts when storing | |
# tests results in the data branch. | |
sleep $(($RANDOM % 180)); | |
java -cp ./target/*:./target/dependency/* com.ibm.icu.dev.test.perf.DecimalFormatPerformanceTest ${{ matrix.perf }} -a -t 2 -p 4 -L ${{ matrix.locale }} "#,###.##" "1.234,56" -r 1 | tee perf/results/j_decimalformatperf/${{ matrix.locale }}/${{ matrix.perf }}/output.txt | |
- name: Store performance test results | |
uses: gregtatum/github-action-benchmark@d3f06f738e9612988d575db23fae5ca0008d3d12 | |
with: | |
# The perf tests result data is in ndjson format. | |
tool: 'ndjson' | |
output-file-path: icu4j/perf-tests/perf/results/j_decimalformatperf/${{ matrix.locale }}/${{ matrix.perf }}/output.txt | |
# Tentative setting. | |
alert-threshold: '200%' | |
fail-on-alert: true | |
gh-pages-branch: perfdata | |
benchmark-data-dir-path: perf/results/j_decimalformatperf/${{ matrix.locale }}/${{ matrix.perf }} | |
auto-push: true | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
comment-on-alert: true | |
# ICU4J performance test for normalization | |
icu4j-normperf: | |
# Run performance tests only on the main branch of the ICU repository. | |
if: github.repository == 'unicode-org/icu' && github.ref == 'refs/heads/main' | |
needs: icu4j-mvn-init-cache | |
strategy: | |
fail-fast: false | |
matrix: | |
perf: [TestICU_NFD_NFC_Text, TestICU_NFC_NFC_Text, TestICU_NFC_Orig_Text, TestICU_NFD_NFC_Text, TestICU_NFD_NFD_Text, TestICU_NFD_Orig_Text] | |
source_text: [TestNames_Asian, TestNames_Chinese, TestNames_SerbianSH] | |
mode: [-l] | |
permissions: | |
contents: write | |
deployments: write | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout and setup | |
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
with: | |
lfs: true | |
- name: Checkout lfs objects | |
run: git lfs pull | |
- name: Lookup read-only cache of local Maven repository | |
uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 | |
with: | |
path: ~/.m2/repository | |
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} | |
restore-keys: | | |
${{ runner.os }}-maven- | |
lookup-only: true | |
- uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9 # v4.2.1 | |
with: | |
distribution: 'temurin' | |
java-version: '8' | |
- name: Build and run normperf | |
env: | |
DATA_FILE_PATH: data/collation | |
run: | | |
# This file needs to be restored otherwise GHA cannot | |
# check-out the perfdata branch. Setting up this task with GH lfs | |
# modifies the file but the details of why and how are unknown. | |
git restore --staged tools/multi/proj/icu4cscan/old-xmls.tar.bz2; | |
git restore tools/multi/proj/icu4cscan/old-xmls.tar.bz2; | |
cd icu4j; | |
mvn ${SHARED_MVN_ARGS} verify -DskipITs -DskipTests; | |
cd perf-tests; | |
mkdir -p perf/results/j_normperf/${{ matrix.source_text }}/${{ matrix.perf }}; | |
# Delay execution by random number of seconds. Spreading execution of multiple | |
# tests over 180 secs. minimizes the possibility of push conflicts when storing | |
# tests results in the data branch. | |
sleep $(($RANDOM % 180)); | |
java -cp ./target/*:./target/dependency/* com.ibm.icu.dev.test.perf.NormalizerPerformanceTest ${{ matrix.perf }} -a -t 2 -p 4 -f $DATA_FILE_PATH/${{ matrix.source_text }}.txt -e UTF-8 ${{ matrix.mode }} | tee perf/results/j_normperf/${{ matrix.source_text }}/${{ matrix.perf }}/output.txt | |
cat perf/results/j_normperf/${{ matrix.source_text }}/${{ matrix.perf }}/output.txt | |
- name: Store performance test results | |
uses: gregtatum/github-action-benchmark@d3f06f738e9612988d575db23fae5ca0008d3d12 | |
with: | |
# The perf tests result data is in ndjson format. | |
tool: 'ndjson' | |
output-file-path: icu4j/perf-tests/perf/results/j_normperf/${{ matrix.source_text }}/${{ matrix.perf }}/output.txt | |
# Tentative setting. | |
alert-threshold: '200%' | |
fail-on-alert: true | |
gh-pages-branch: perfdata | |
benchmark-data-dir-path: perf/results/j_normperf/${{ matrix.source_text }}/${{ matrix.perf }} | |
auto-push: true | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
comment-on-alert: true | |
# ICU4J performance test for encoding conversion | |
icu4j-converterperf: | |
# Run performance tests only on the main branch of the ICU repository. | |
if: github.repository == 'unicode-org/icu' && github.ref == 'refs/heads/main' | |
needs: icu4j-mvn-init-cache | |
strategy: | |
fail-fast: false | |
matrix: | |
source_text: [arabic, english, french, greek, hebrew, hindi, japanese, korean, s-chinese] | |
perf: [TestCharsetDecoderICU, TestCharsetEncoderICU] | |
test_enc: [UTF-8] | |
include: | |
- test_enc: csisolatinarabic | |
source_text: arabic | |
perf: TestCharsetDecoderICU | |
- test_enc: csisolatinarabic | |
source_text: arabic | |
perf: TestCharsetEncoderICU | |
- test_enc: csisolatin1 | |
source_text: french | |
perf: TestCharsetDecoderICU | |
- test_enc: csisolatin1 | |
source_text: french | |
perf: TestCharsetEncoderICU | |
- test_enc: csisolatingreek | |
source_text: greek | |
perf: TestCharsetDecoderICU | |
- test_enc: csisolatingreek | |
source_text: greek | |
perf: TestCharsetEncoderICU | |
- test_enc: csisolatinhebrew | |
source_text: hebrew | |
perf: TestCharsetDecoderICU | |
- test_enc: csisolatinhebrew | |
source_text: hebrew | |
perf: TestCharsetEncoderICU | |
- test_enc: EUC-JP | |
source_text: japanese | |
perf: TestCharsetDecoderICU | |
- test_enc: EUC-JP | |
source_text: japanese | |
perf: TestCharsetEncoderICU | |
- test_enc: csiso2022jp | |
source_text: japanese | |
perf: TestCharsetDecoderICU | |
- test_enc: csiso2022jp | |
source_text: japanese | |
perf: TestCharsetEncoderICU | |
- test_enc: csiso2022kr | |
source_text: korean | |
perf: TestCharsetDecoderICU | |
- test_enc: csiso2022kr | |
source_text: korean | |
perf: TestCharsetEncoderICU | |
- test_enc: EUC-CN | |
source_text: s-chinese | |
perf: TestCharsetDecoderICU | |
- test_enc: EUC-CN | |
source_text: s-chinese | |
perf: TestCharsetEncoderICU | |
- test_enc: UTF-16BE | |
source_text: french | |
perf: TestCharsetDecoderICU | |
- test_enc: UTF-16BE | |
source_text: french | |
perf: TestCharsetEncoderICU | |
- test_enc: UTF-16LE | |
source_text: french | |
perf: TestCharsetDecoderICU | |
- test_enc: UTF-16LE | |
source_text: french | |
perf: TestCharsetEncoderICU | |
- test_enc: US-ASCII | |
source_text: english | |
perf: TestCharsetDecoderICU | |
- test_enc: US-ASCII | |
source_text: english | |
perf: TestCharsetEncoderICU | |
permissions: | |
contents: write | |
deployments: write | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout and setup | |
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
with: | |
lfs: true | |
- name: Checkout lfs objects | |
run: git lfs pull | |
- name: Lookup read-only cache of local Maven repository | |
uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 | |
with: | |
path: ~/.m2/repository | |
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} | |
restore-keys: | | |
${{ runner.os }}-maven- | |
lookup-only: true | |
- uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9 # v4.2.1 | |
with: | |
distribution: 'temurin' | |
java-version: '8' | |
- name: Build and run converterperf | |
env: | |
DATA_FILE_PATH: data/conversion | |
run: | | |
# This file needs to be restored otherwise GHA cannot | |
# check-out the perfdata branch. Setting up this task with GH lfs | |
# modifies the file but the details of why and how are unknown. | |
git restore --staged tools/multi/proj/icu4cscan/old-xmls.tar.bz2; | |
git restore tools/multi/proj/icu4cscan/old-xmls.tar.bz2; | |
cd icu4j; | |
mvn ${SHARED_MVN_ARGS} verify -DskipITs -DskipTests; | |
cd perf-tests; | |
mkdir -p perf/results/j_converterperf/${{ matrix.source_text }}/${{ matrix.test_enc }}/${{ matrix.perf }}; | |
# Delay execution by random number of seconds. Spreading execution of multiple | |
# tests over 180 secs. minimizes the possibility of push conflicts when storing | |
# tests results in the data branch. | |
sleep $(($RANDOM % 180)); | |
java -cp ./target/*:./target/dependency/*:../main/charset/target/* com.ibm.icu.dev.test.perf.ConverterPerformanceTest ${{ matrix.perf }} -a -t 2 -p 4 -f $DATA_FILE_PATH/${{ matrix.source_text }}.txt -e UTF-8 -T ${{ matrix.test_enc }} | tee perf/results/j_converterperf/${{ matrix.source_text }}/${{ matrix.test_enc }}/${{ matrix.perf }}/output.txt | |
- name: Store performance test results | |
uses: gregtatum/github-action-benchmark@d3f06f738e9612988d575db23fae5ca0008d3d12 | |
with: | |
# The perf tests result data is in ndjson format. | |
tool: 'ndjson' | |
output-file-path: icu4j/perf-tests/perf/results/j_converterperf/${{ matrix.source_text }}/${{ matrix.test_enc }}/${{ matrix.perf }}/output.txt | |
# Tentative setting. | |
alert-threshold: '200%' | |
fail-on-alert: true | |
gh-pages-branch: perfdata | |
benchmark-data-dir-path: perf/results/j_converterperf/${{ matrix.source_text }}/${{ matrix.test_enc }}/${{ matrix.perf }} | |
auto-push: true | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
comment-on-alert: true | |
# ICU4J performance test for date formatting | |
icu4j-dateformatperf: | |
# Run performance tests only on the main branch of the ICU repository. | |
if: github.repository == 'unicode-org/icu' && github.ref == 'refs/heads/main' | |
needs: icu4j-mvn-init-cache | |
strategy: | |
fail-fast: false | |
matrix: | |
perf: [TestICUConstruction, TestICUParse, TestICUFormat] | |
locale: [en_US] | |
# The parameters don't make for good directory names. Add an identifying digit | |
# at the end to be used as directory name for the results. | |
parms: ['"dddd MMM yyyy" "15 Jan 2007" 1', '"HH:mm" "13:13" 2', '"HH:mm zzzz" "13:13 Pacific Standard Time" 3', '"HH:mm z" "13:13 PST" 4', '"HH:mm Z" "13:13 -0800" 5'] | |
include: | |
- locale: sw_KE | |
parms: '"dddd MMM yyyy" "15 Jan 2007" 1' | |
perf: TestICUConstruction | |
- locale: sw_KE | |
parms: '"dddd MMM yyyy" "15 Jan 2007" 1' | |
perf: TestICUParse | |
- locale: sw_KE | |
parms: '"dddd MMM yyyy" "15 Jan 2007" 1' | |
perf: TestICUFormat | |
permissions: | |
contents: write | |
deployments: write | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout and setup | |
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
with: | |
lfs: true | |
- name: Checkout lfs objects | |
run: git lfs pull | |
- name: Lookup read-only cache of local Maven repository | |
uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 | |
with: | |
path: ~/.m2/repository | |
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} | |
restore-keys: | | |
${{ runner.os }}-maven- | |
lookup-only: true | |
- uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9 # v4.2.1 | |
with: | |
distribution: 'temurin' | |
java-version: '8' | |
- name: Extract identifying digit and parameter. | |
run: | | |
ddir='${{ matrix.parms }}'; | |
echo "PARM=${ddir:: -2}" >> $GITHUB_ENV; | |
echo "DDIR=${ddir: -1}" >> $GITHUB_ENV | |
- name: Build and run dateformatperf | |
run: | | |
# This file needs to be restored otherwise GHA cannot | |
# check-out the perfdata branch. Setting up this task with GH lfs | |
# modifies the file but the details of why and how are unknown. | |
git restore --staged tools/multi/proj/icu4cscan/old-xmls.tar.bz2 | |
git restore tools/multi/proj/icu4cscan/old-xmls.tar.bz2 | |
cd icu4j; | |
mvn ${SHARED_MVN_ARGS} verify -DskipITs -DskipTests; | |
cd perf-tests; | |
mkdir -p perf/results/j_dateformatperf/${{ matrix.locale }}/${{ matrix.perf }}/${{ env.DDIR }}; | |
# Delay execution by random number of seconds. Spreading execution of multiple | |
# tests over 180 secs. minimizes the possibility of push conflicts when storing | |
# tests results in the data branch. | |
sleep $(($RANDOM % 180)); | |
java -cp ./target/*:./target/dependency/* com.ibm.icu.dev.test.perf.DateFormatPerformanceTest ${{ matrix.perf }} -a -t 2 -p 4 -L ${{ matrix.locale }} ${{ env.PARM }} -r 1 | tee perf/results/j_dateformatperf/${{ matrix.locale }}/${{ matrix.perf }}/${{ env.DDIR }}/output.txt | |
- name: Store performance test results | |
uses: gregtatum/github-action-benchmark@d3f06f738e9612988d575db23fae5ca0008d3d12 | |
with: | |
# The perf tests result data is in ndjson format. | |
tool: 'ndjson' | |
output-file-path: icu4j/perf-tests/perf/results/j_dateformatperf/${{ matrix.locale }}/${{ matrix.perf }}/${{ env.DDIR }}/output.txt | |
# Tentative setting. | |
alert-threshold: '200%' | |
fail-on-alert: true | |
gh-pages-branch: perfdata | |
benchmark-data-dir-path: perf/results/j_dateformatperf/${{ matrix.locale }}/${{ matrix.perf }}/${{ env.DDIR }} | |
auto-push: true | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
comment-on-alert: true | |
# Retrieve performance test results and upload results to remote repository | |
perf-test-data-move: | |
# Run performance tests only on the main branch of the ICU repository. | |
if: github.repository == 'unicode-org/icu' && github.ref == 'refs/heads/main' | |
name: Copy perf data to remote repo for visualization | |
needs: [icu4c-performance-tests, icu4c-performance-tests-with-files, icu4c-strsrchperf, icu4j-unicodesetperf, icu4j-ucharacterperf, icu4j-decimalformatperf, icu4j-normperf, icu4j-converterperf, icu4j-dateformatperf] | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
- name: Switch to benchmark data storage branch. | |
run: | | |
git fetch | |
git checkout perfdata | |
- name: Publish data | |
uses: peaceiris/actions-gh-pages@4f9cc6602d3f66b9c108549d475ec49e8ef4d45e # v4.0.0 | |
with: | |
deploy_key: ${{ secrets.ACTIONS_DEPLOY_KEY }} | |
external_repository: unicode-org/icu-perf | |
publish_branch: main | |
publish_dir: ./perf | |
keep_files: true | |
# Build ICU and tests sample on some windows configurations | |
icu4c-windows-msvc-postmerge: | |
runs-on: windows-2022 | |
timeout-minutes: 30 | |
strategy: | |
matrix: | |
arch: [x64, x86] | |
config: [Debug, Release] | |
include: | |
- arch: x86 | |
platform: Win32 | |
- arch: x64 | |
platform: x64 | |
steps: | |
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
- name: Set up MSBuild | |
uses: microsoft/setup-msbuild@v2 | |
- name: Build Solution | |
run: msbuild icu4c/source/allinone/allinone.sln /p:Configuration=${{ matrix.config }} /p:Platform=${{ matrix.platform }} | |
- name: Run Tests (icucheck.bat) | |
run: icu4c/source/allinone/icucheck.bat ${{ matrix.arch }} ${{ matrix.config }} | |
- name: Build Sample Solution | |
run: msbuild icu4c/source/samples/all/all.sln /p:Configuration=${{ matrix.config }} /p:Platform=${{ matrix.arch }} | |
- name: Test Samples (samplecheck.bat) | |
run: icu4c/source/samples/all/samplecheck.bat ${{ matrix.arch }} ${{ matrix.config }} | |
icu4c-windows-cygwin-gcc: | |
runs-on: windows-latest | |
timeout-minutes: 50 | |
env: | |
ICU_CI_CACHE: c:\icu-ci-cache | |
CYG_URL: https://cygwin.com/setup-x86_64.exe | |
CYG_MIRROR: http://mirrors.kernel.org/sourceware/cygwin/ | |
CYG_PACKAGES: automake,gcc-core,gcc-g++,make,pkg-config,perl,python3 | |
CYG_ROOT: c:\cygwin-root | |
CYG_CACHE: 'c:\icu-ci-cache\cygwin64-v3' | |
CYG_CACHED_SETUP: 'c:\icu-ci-cache\cygwin64-v3\setup.exe' | |
CYG_VERSION_KEY: cygwin-3.2 | |
defaults: | |
run: | |
shell: cmd | |
steps: | |
- name: Configure Git to checkout with Unix line endings (LF) | |
run: | | |
git config --global core.autocrlf input | |
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
- name: Restore Cygwin cache | |
uses: actions/cache@v4 | |
with: | |
path: ${{ env.CYG_CACHE }} | |
key: ${{ hashFiles('.github/workflows/icu_merge_ci.yml') }} | |
- name: Download Cygwin setup | |
shell: pwsh | |
run: | | |
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 }} | |
Write-Host "Downloading Cygwin setup..." | |
$start_time = Get-Date | |
(New-Object System.Net.WebClient).DownloadFile("${{ env.CYG_URL }}", "${{ env.CYG_CACHED_SETUP }}") | |
Write-Output "Download took: $((Get-Date).Subtract($start_time).Seconds) second(s)." | |
} | |
- name: Install Cygwin | |
run: | | |
${{ env.CYG_CACHED_SETUP }} --no-verify --quiet-mode --no-shortcuts --no-startmenu --no-desktop --upgrade-also --only-site --site "${{ env.CYG_MIRROR }}" --root "${{ env.CYG_ROOT }}" --local-package-dir "${{ env.CYG_CACHE }}" --packages "${{ env.CYG_PACKAGES }}" | |
- name: Check Cygwin environment | |
run: | | |
${{ env.CYG_ROOT }}/bin/sh -lc 'echo Hello' && ${{ env.CYG_ROOT }}/bin/sh -lc 'uname -a' | |
- name: Build ICU (source and test) | |
run: | | |
${{ env.CYG_ROOT }}/bin/bash -lc "cd $(cygpath \"${{ github.workspace }}\") && cd icu4c/source && ./runConfigureICU Cygwin && make tests -j -l4.5" | |
env: | |
CC: gcc | |
CXX: g++ | |
- name: Run Tests | |
run: | | |
${{ env.CYG_ROOT }}/bin/bash -lc "cd $(cygpath \"${{ github.workspace }}\") && cd icu4c/source && make -j -l4.5 check" | |
env: | |
CC: gcc | |
CXX: g++ |