| # 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*' |
| |
| jobs: |
| |
| # Test ICU4J with little-endian ICU4C data only |
| icu4j-little-endian-data-test: |
| runs-on: ubuntu-latest |
| steps: |
| - name: Checkout and setup |
| uses: actions/checkout@v2 |
| with: |
| lfs: true |
| - name: Checkout lfs objects |
| run: git lfs pull |
| - uses: actions/setup-java@v1 |
| with: |
| java-version: '11' |
| - name: ICU4J little-endian |
| run: | |
| cd icu4c/source; |
| ICU_DATA_BUILDTOOL_OPTS=--include_uni_core_data ./runConfigureICU Linux; |
| make -j2 check; |
| mkdir /tmp/icu4j_data_test; |
| cp -P data/out/tmp/icudt*l* /tmp/icu4j_data_test/ |
| cd ../../icu4j; |
| ant clean; |
| ant -Dicu4c.data.path=/tmp/icu4j_data_test check; |
| |
| # Compile libraries used by all ICU4C performance tests. |
| icu4c-store-perf-libs: |
| runs-on: ubuntu-latest |
| steps: |
| - uses: actions/checkout@v2 |
| |
| - name: Build ICU libraries |
| run: | |
| cd icu4c/source; |
| ./runConfigureICU Linux; |
| make -j 2 all; |
| cd lib; |
| cp -Ps ../tools/ctestfw/libicutest* . |
| - name: Upload ICU libraries |
| uses: actions/upload-artifact@v2 |
| with: |
| name: icu-perf-libs |
| path: icu4c/source/lib |
| retention-days: 1 |
| |
| # Assorted ICU4C performance tests |
| icu4c-performance-tests: |
| 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" |
| |
| runs-on: ubuntu-latest |
| steps: |
| - uses: actions/checkout@v2 |
| - name: Create directory for lib files |
| run: mkdir icu4c/source/perflib |
| - name: Get ICU libs |
| uses: actions/download-artifact@v2 |
| 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 -j2 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: |
| 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 |
| |
| runs-on: ubuntu-latest |
| steps: |
| - uses: actions/checkout@v2 |
| - name: Create directory for lib files |
| run: mkdir icu4c/source/perflib |
| - name: Get ICU libs |
| uses: actions/download-artifact@v2 |
| 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 -j2 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 |
| |
| # Retrieve performance test results and upload results to remote repository |
| perf-test-data-move: |
| name: Copy perf data to remote repo for visualization |
| needs: [icu4c-performance-tests, icu4c-performance-tests-with-files] |
| runs-on: ubuntu-latest |
| steps: |
| - uses: actions/checkout@v2 |
| |
| - name: Switch to benchmark data storage branch. |
| run: | |
| git fetch |
| git checkout perfdata |
| |
| - name: Publish data |
| uses: peaceiris/actions-gh-pages@v3 |
| with: |
| deploy_key: ${{ secrets.ACTIONS_DEPLOY_KEY }} |
| external_repository: unicode-org/icu-perf |
| publish_branch: main |
| publish_dir: ./perf |