blob: 8a7a74766f370a4205b68c1f67353f20f218b9b0 [file] [log] [blame]
# 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