Skip to content

Commit d5a9e4d

Browse files
authored
Merge pull request #113 from wxbty/master
add workflow conf for benchmark
2 parents 6d5163f + c5d0d4a commit d5a9e4d

1 file changed

Lines changed: 230 additions & 0 deletions

File tree

Lines changed: 230 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,230 @@
1+
name: Manually Triggered benchmark for Dubbo Samples
2+
3+
on:
4+
repository_dispatch:
5+
types: [ manual-trigger ]
6+
7+
permissions:
8+
contents: read
9+
10+
env:
11+
FORK_COUNT: 0
12+
FAIL_FAST: 1
13+
SHOW_ERROR_DETAIL: 1
14+
#multi-version size limit
15+
VERSIONS_LIMIT: 1
16+
CANDIDATE_VERSIONS: '
17+
spring.version:5.3.24;
18+
spring-boot.version:2.7.6;
19+
'
20+
21+
jobs:
22+
check-benchmark-path:
23+
runs-on: ubuntu-latest
24+
steps:
25+
- uses: actions/checkout@v4
26+
with:
27+
repository: 'apache/dubbo-samples'
28+
ref: master
29+
- name: Check if directory exists
30+
run: |
31+
#!/bin/bash
32+
cd test
33+
PATH_TO_CHECK="../10-task/dubbo-samples-benchmark/"
34+
if [ ! -d "$PATH_TO_CHECK" ]; then
35+
exit 1
36+
fi
37+
38+
build-source:
39+
name: "Build Dubbo"
40+
needs: check-benchmark-path
41+
runs-on: ubuntu-latest
42+
outputs:
43+
version: ${{ steps.dubbo-version.outputs.version }}
44+
steps:
45+
- uses: actions/checkout@v4
46+
with:
47+
repository: 'apache/dubbo'
48+
ref: 3.3
49+
- name: "Dubbo cache"
50+
id: dubbo-cache
51+
uses: actions/cache@v4
52+
with:
53+
path: ~/.m2/repository/org/apache/dubbo
54+
key: ${{ runner.os }}-dubbo-snapshot-${{ github.sha }}
55+
- name: "Cache local Maven repository"
56+
if: steps.dubbo-cache.outputs.cache-hit != 'true'
57+
uses: actions/cache@v4
58+
with:
59+
path: ~/.m2/repository
60+
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
61+
restore-keys: |
62+
${{ runner.os }}-maven-
63+
- name: "Set up JDK 17"
64+
if: steps.dubbo-cache.outputs.cache-hit != 'true'
65+
uses: actions/setup-java@v4
66+
with:
67+
distribution: 'zulu'
68+
java-version: 17
69+
- name: "Build Dubbo with Maven"
70+
if: steps.dubbo-cache.outputs.cache-hit != 'true'
71+
run: |
72+
./mvnw --batch-mode --no-snapshot-updates --no-transfer-progress clean install -Dmaven.test.skip=true -Dmaven.test.skip.exec=true
73+
- name: "Calculate Dubbo Version"
74+
id: dubbo-version
75+
run: |
76+
REVISION=`awk '/<revision>[^<]+<\/revision>/{gsub(/<revision>|<\/revision>/,"",$1);print $1;exit;}' pom.xml`
77+
echo "version=$REVISION" >> $GITHUB_OUTPUT
78+
echo "dubbo version: $REVISION"
79+
echo "commit_id: ${{ github.sha }}"
80+
81+
samples-test-job:
82+
needs: [ build-source ]
83+
name: "Samples benchmark test on ubuntu-latest"
84+
runs-on: ubuntu-latest
85+
timeout-minutes: 90
86+
env:
87+
JAVA_VER: 8
88+
strategy:
89+
matrix:
90+
job_id: [ 1 ]
91+
fail-fast: false
92+
steps:
93+
- uses: actions/checkout@v4
94+
with:
95+
repository: 'apache/dubbo-samples'
96+
ref: master
97+
- name: "Cache local Maven repository"
98+
uses: actions/cache@v4
99+
with:
100+
path: ~/.m2/repository
101+
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
102+
restore-keys: |
103+
${{ runner.os }}-maven-
104+
- name: "Restore Dubbo cache"
105+
uses: actions/cache@v4
106+
with:
107+
path: ~/.m2/repository/org/apache/dubbo
108+
key: ${{ runner.os }}-dubbo-snapshot-${{ github.sha }}
109+
- name: "Cache Skywalking Agent"
110+
id: cache-skywalking-agent
111+
uses: actions/cache@v4
112+
with:
113+
path: /tmp/skywalking-agent
114+
key: ${{ runner.os }}-skywalking-agent-9.0.0
115+
- name: "Cache MySQL Driver"
116+
id: cache-mysql-driver
117+
uses: actions/cache@v4
118+
with:
119+
path: /tmp/mysql-connector-java-8.0.23.jar
120+
key: ${{ runner.os }}-mysql-driver-8.0.23
121+
- name: "Download Skywalking Agent and MySQL Driver"
122+
if: steps.cache-skywalking-agent.outputs.cache-hit != 'true' || steps.cache-mysql-driver.outputs.cache-hit != 'true'
123+
run: |
124+
wget -c https://archive.apache.org/dist/skywalking/java-agent/9.0.0/apache-skywalking-java-agent-9.0.0.tgz --no-check-certificate
125+
tar -zxvf apache-skywalking-java-agent-9.0.0.tgz -C /tmp
126+
wget -c https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.23/mysql-connector-java-8.0.23.jar
127+
mv mysql-connector-java-8.0.23.jar /tmp/
128+
- name: "Mvn Benchmark Skywalking Plugin"
129+
run: |
130+
rm /tmp/skywalking-agent/plugins/*
131+
cd 10-task/dubbo-samples-benchmark/dubbo-samples-benchmark-agent && mvn --batch-mode --no-snapshot-updates -e --no-transfer-progress clean package -Dmaven.test.skip=true -Dmaven.test.skip.exec=true
132+
cp -f ./target/dubbo-samples-benchmark-agent.jar /tmp/skywalking-agent/plugins/
133+
- name: "Set up JDK 8"
134+
uses: actions/setup-java@v4
135+
with:
136+
distribution: 'zulu'
137+
java-version: 8
138+
- name: "Init Candidate Versions"
139+
run: |
140+
DUBBO_VERSION="${{needs.build-source.outputs.version}}"
141+
CANDIDATE_VERSIONS="dubbo.version:$DUBBO_VERSION;compiler.version:$DUBBO_VERSION;$CANDIDATE_VERSIONS;dubbo.benchmark:1.0.0;dubbo.compiler.version:$DUBBO_VERSION"
142+
echo "CANDIDATE_VERSIONS=$CANDIDATE_VERSIONS" >> $GITHUB_ENV
143+
- name: "Replace runtime parameter"
144+
run: |
145+
RUNTIME_CONFIG_PATH=./10-task/dubbo-samples-benchmark/case-runtime-parameter.conf
146+
rm -rf $RUNTIME_CONFIG_PATH
147+
runtime_para_pairs="${{ github.event.client_payload.prop}}"
148+
IFS='@' read -ra groups <<< "$runtime_para_pairs"
149+
for group in "${groups[@]}"; do
150+
IFS='|' read -ra prop_array <<< "$group"
151+
config_line=""
152+
for ((i=0; i<${#prop_array[@]}; i+=2)); do
153+
config_line+="-D${prop_array[i]}=${prop_array[i+1]} "
154+
done
155+
echo "${config_line% }" >> "$RUNTIME_CONFIG_PATH"
156+
done
157+
- name: "Build test image"
158+
run: |
159+
cd test && bash ./build-test-image.sh
160+
- name: "Run tests"
161+
run: cd test && bash ./run-tests.sh ../10-task/dubbo-samples-benchmark/
162+
- name: "Upload docker log"
163+
uses: actions/upload-artifact@v4
164+
with:
165+
name: samples-docker-log
166+
path: |
167+
./10-task/dubbo-samples-benchmark/target/logs/*.log
168+
/tmp/skywalking-agent/logs/*.log
169+
- name: "Upload jmh output result"
170+
uses: actions/upload-artifact@v4
171+
with:
172+
name: samples-jmh-result
173+
path: /tmp/jmh*.json
174+
- name: "Push results to results repository"
175+
run: |
176+
RESULTS_REPO_OWNER="${{ github.event.client_payload.PUSH_NAME}}"
177+
RESULTS_REPO_BRANCH="${{ github.event.client_payload.RESULTS_REPO_BRANCH}}"
178+
RESULTS_REPO_NAME="${{ github.event.client_payload.REPO_NAME}}"
179+
GITHUB_TOKEN="${{ github.event.client_payload.PUSH_TOKEN}}"
180+
181+
if ! ls /tmp/jmh_result_prop*.json -1q &> /dev/null; then
182+
echo "No file matching /tmp/jmh_result_prop*.json exists. Exiting..."
183+
exit 0
184+
fi
185+
186+
git clone --depth 1 --branch ${RESULTS_REPO_BRANCH} https://github.com/${RESULTS_REPO_OWNER}/${RESULTS_REPO_NAME}.git jmh_result
187+
cd jmh_result
188+
git config user.name 'github-actions[bot]'
189+
git config user.email 'github-actions[bot]@users.noreply.github.com'
190+
191+
WORK_DIR="$(pwd)"
192+
echo "WorkDir: $WORK_DIR"
193+
194+
DIRECTORY_PATH="$WORK_DIR/test-results/scenario"
195+
if [ ! -d ${DIRECTORY_PATH} ];then
196+
mkdir -p $DIRECTORY_PATH;else
197+
rm $DIRECTORY_PATH/*
198+
fi
199+
200+
cp /tmp/jmh_result*.json "$DIRECTORY_PATH"
201+
cp /tmp/jmh_trace*.json "$DIRECTORY_PATH"
202+
203+
merged_file="merged_prop_results.json"
204+
merged_trace_file="merged_prop_traces.json"
205+
206+
json_array=()
207+
for file in $(ls -t1 "$DIRECTORY_PATH"/jmh_result*.json); do
208+
if [ -f "$file" ]; then
209+
echo "fileName=$file"
210+
json_array+=( "$(cat "$file")" )
211+
fi
212+
done
213+
214+
merged_json=$(echo "${json_array[@]}" | jq -s add)
215+
echo "$merged_json" > "$DIRECTORY_PATH/$merged_file"
216+
217+
json_array=()
218+
for file in $(ls -t1 "$DIRECTORY_PATH"/jmh_trace*.json); do
219+
if [ -f "$file" ]; then
220+
json_array+=( "$(cat "$file")" )
221+
fi
222+
done
223+
224+
merged_json=$(echo "${json_array[@]}" | jq -s add)
225+
echo "$merged_json" > "$DIRECTORY_PATH/$merged_trace_file"
226+
227+
git add $DIRECTORY_PATH
228+
git commit -m "Compare prop in $(date +'%Y-%m-%d %H:%M:%S')"
229+
git pull --rebase
230+
git push https://${GITHUB_TOKEN}@github.com/${RESULTS_REPO_OWNER}/${RESULTS_REPO_NAME}.git ${RESULTS_REPO_BRANCH}

0 commit comments

Comments
 (0)