# 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 with: lfs: true - name: Checkout lfs objects run: git lfs pull - 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 with: lfs: true - name: Checkout lfs objects run: git lfs pull - 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@cc203385981b70ca67e1cc392babf9cc229d5806 # v4.1.9 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@cc203385981b70ca67e1cc392babf9cc229d5806 # v4.1.9 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@cc203385981b70ca67e1cc392babf9cc229d5806 # v4.1.9 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 with: lfs: true - name: Checkout lfs objects run: git lfs pull - 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 with: lfs: true - name: Checkout lfs objects run: git lfs pull - 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 with: lfs: true - name: Checkout lfs objects run: git lfs pull - 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 with: lfs: true - name: Checkout lfs objects run: git lfs pull - 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 with: lfs: true - name: Checkout lfs objects run: git lfs pull - 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 with: lfs: true - name: Checkout lfs objects run: git lfs pull - 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++