| # 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 |
| # Using Java 11 because Java version is not deemed significant for downloading artifacts, |
| # and is the lowest version we support, so the cached artifacts can be used by any other version. |
| # |
| # 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-22.04 # Updated in BRS |
| steps: |
| - name: Checkout and setup |
| uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 |
| - name: Cache local Maven repository |
| uses: actions/cache@v4.2.0 |
| with: |
| path: ~/.m2/repository |
| key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} |
| - uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9 # v4.2.1 |
| with: |
| distribution: 'temurin' |
| java-version: '11' |
| # 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-22.04 # Updated in BRS |
| steps: |
| - name: Checkout and setup |
| uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 |
| - name: Lookup read-only cache of local Maven repository |
| uses: actions/cache@v4.2.0 |
| 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-22.04 # Updated in BRS |
| 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-22.04 # Updated in BRS |
| 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@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 |
| 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-22.04 # Updated in BRS |
| 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@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 |
| 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-22.04 # Updated in BRS |
| 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@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 |
| 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-22.04 # Updated in BRS |
| steps: |
| - name: Checkout and setup |
| uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 |
| - name: Lookup read-only cache of local Maven repository |
| uses: actions/cache@v4.2.0 |
| 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: Build and run unicodesetperf test |
| run: | |
| cd icu4j; |
| mvn ${SHARED_MVN_ARGS} install -DskipITs -DskipTests; |
| git status |
| cd perf-tests; |
| mkdir -p perf/results/j_unicodesetperf/${{ matrix.perf }}; |
| mvn dependency:copy-dependencies |
| 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-22.04 # Updated in BRS |
| steps: |
| - name: Checkout and setup |
| uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 |
| - name: Lookup read-only cache of local Maven repository |
| uses: actions/cache@v4.2.0 |
| 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: Build and run ucharacterperf test |
| run: | |
| cd icu4j; |
| mvn ${SHARED_MVN_ARGS} install -DskipITs -DskipTests; |
| cd perf-tests; |
| mkdir -p perf/results/j_ucharacterperf; |
| mvn dependency:copy-dependencies |
| 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-22.04 # Updated in BRS |
| steps: |
| - name: Checkout and setup |
| uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 |
| - name: Lookup read-only cache of local Maven repository |
| uses: actions/cache@v4.2.0 |
| 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: Build and run decimalformatperf |
| run: | |
| cd icu4j; |
| mvn ${SHARED_MVN_ARGS} install -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)); |
| mvn dependency:copy-dependencies |
| 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-22.04 # Updated in BRS |
| steps: |
| - name: Checkout and setup |
| uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 |
| - name: Lookup read-only cache of local Maven repository |
| uses: actions/cache@v4.2.0 |
| 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: Build and run normperf |
| env: |
| DATA_FILE_PATH: data/collation |
| run: | |
| cd icu4j; |
| mvn ${SHARED_MVN_ARGS} install -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)); |
| mvn dependency:copy-dependencies |
| 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-22.04 # Updated in BRS |
| steps: |
| - name: Checkout and setup |
| uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 |
| - name: Lookup read-only cache of local Maven repository |
| uses: actions/cache@v4.2.0 |
| 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: Build and run converterperf |
| env: |
| DATA_FILE_PATH: data/conversion |
| run: | |
| cd icu4j; |
| mvn ${SHARED_MVN_ARGS} install -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)); |
| mvn dependency:copy-dependencies |
| java -cp ./target/*:./target/dependency/* 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-22.04 # Updated in BRS |
| steps: |
| - name: Checkout and setup |
| uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 |
| - name: Lookup read-only cache of local Maven repository |
| uses: actions/cache@v4.2.0 |
| 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: 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: | |
| cd icu4j; |
| mvn ${SHARED_MVN_ARGS} install -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)); |
| mvn dependency:copy-dependencies |
| 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-22.04 # Updated in BRS |
| 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 # Updated in BRS |
| 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 }} /p:SkipUWP=true |
| - 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 }} /p:SkipUWP=true |
| - name: Test Samples (samplecheck.bat) |
| run: icu4c/source/samples/all/samplecheck.bat ${{ matrix.arch }} ${{ matrix.config }} |
| |
| icu4c-windows-cygwin-gcc: |
| runs-on: windows-2022 # Updated in BRS |
| 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++ |