Skip to content

ICU-22721 Add workflow that enforces required checks #3

ICU-22721 Add workflow that enforces required checks

ICU-22721 Add workflow that enforces required checks #3

Workflow file for this run

# 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@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.3
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@65a9edc5881444af0b9093a5e628f2fe47ea3b2e # v4.1.7
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@65a9edc5881444af0b9093a5e628f2fe47ea3b2e # v4.1.7
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@65a9edc5881444af0b9093a5e628f2fe47ea3b2e # v4.1.7
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