|
| 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