Skip to content

ci: build production-like RPC performance matrix #36

ci: build production-like RPC performance matrix

ci: build production-like RPC performance matrix #36

Workflow file for this run

name: CI
on:
push:
branches: [ main ]
paths-ignore:
- 'docs/PERFORMANCE.md'
pull_request:
branches: [ main ]
permissions:
contents: read
concurrency:
group: ci-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build:
name: Build
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- name: Checkout code
uses: actions/checkout@v7
- name: Set up JDK 17
uses: actions/setup-java@v6
with:
java-version: '17'
distribution: 'temurin'
cache: 'maven'
- name: Build all modules
run: mvn -B -ntp clean package -DskipTests -Drpc.registry=local
unit-tests:
name: Unit Tests & Coverage
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- name: Checkout code
uses: actions/checkout@v7
- name: Set up JDK 17
uses: actions/setup-java@v6
with:
java-version: '17'
distribution: 'temurin'
cache: 'maven'
- name: Run core, transport and starter unit tests
run: >-
mvn -B -ntp test
-pl rpc-core,rpc-transport-netty,rpc-spring-boot-starter -am
-Drpc.registry=local
- name: Upload unit test and coverage reports
if: always()
uses: actions/upload-artifact@v7
with:
name: unit-test-reports
retention-days: 7
if-no-files-found: warn
path: |
**/target/surefire-reports/
**/target/site/jacoco/
rpc-integration:
name: RPC Integration
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- name: Checkout code
uses: actions/checkout@v7
- name: Set up JDK 17
uses: actions/setup-java@v6
with:
java-version: '17'
distribution: 'temurin'
cache: 'maven'
- name: Run local-registry Netty end-to-end test
run: >-
mvn -B -ntp test
-pl rpc-consumer -am
-Dtest=FullIntegrationTest
-Dsurefire.failIfNoSpecifiedTests=false
-Drpc.registry=local
-Drpc.protocol=netty
- name: Upload integration test reports
if: always()
uses: actions/upload-artifact@v7
with:
name: rpc-integration-reports
retention-days: 7
if-no-files-found: warn
path: '**/target/surefire-reports/'
performance-matrix:
name: RPC Performance Matrix
runs-on: ubuntu-24.04
timeout-minutes: 25
outputs:
performance_markdown: ${{ steps.performance-record.outputs.markdown }}
steps:
- name: Checkout code
uses: actions/checkout@v7
- name: Set up JDK 17
uses: actions/setup-java@v6
with:
java-version: '17'
distribution: 'temurin'
cache: 'maven'
- name: Verify tc and Docker
shell: bash
run: |
command -v tc
sudo tc qdisc show dev lo
docker --version
- name: Run protocol, serializer, registry and network matrix
shell: bash
run: bash .github/scripts/run-performance-matrix.sh
- name: Prepare performance record
id: performance-record
shell: bash
run: |
matrix='rpc-consumer/target/performance-matrix/matrix.md'
test -s "$matrix"
delimiter="RPC_PERFORMANCE_${GITHUB_RUN_ID}_${GITHUB_RUN_ATTEMPT}"
{
echo "markdown<<${delimiter}"
cat "$matrix"
echo "${delimiter}"
} >> "$GITHUB_OUTPUT"
ci-gate:
name: CI Gate
if: always()
needs: [ build, unit-tests, rpc-integration, performance-matrix ]
runs-on: ubuntu-24.04
timeout-minutes: 2
steps:
- name: Verify required checks
shell: bash
run: |
test "${{ needs.build.result }}" = "success"
test "${{ needs.unit-tests.result }}" = "success"
test "${{ needs.rpc-integration.result }}" = "success"
test "${{ needs.performance-matrix.result }}" = "success"
record-performance:
name: Record Performance
if: >-
github.event_name == 'push' &&
github.ref == 'refs/heads/main' &&
needs.ci-gate.result == 'success' &&
needs.performance-matrix.result == 'success'
needs: [ ci-gate, performance-matrix ]
runs-on: ubuntu-24.04
timeout-minutes: 5
permissions:
contents: write
steps:
- name: Checkout main
uses: actions/checkout@v7
with:
ref: main
fetch-depth: 0
- name: Append performance matrix
shell: bash
env:
PERFORMANCE_MARKDOWN: ${{ needs.performance-matrix.outputs.performance_markdown }}
run: |
test -n "$PERFORMANCE_MARKDOWN"
git pull --ff-only origin main
mkdir -p docs
test -f docs/PERFORMANCE.md
{
echo
echo '---'
echo
printf '%s\n' "$PERFORMANCE_MARKDOWN"
} >> docs/PERFORMANCE.md
- name: Commit performance history
shell: bash
run: |
git config user.name 'github-actions[bot]'
git config user.email '41898282+github-actions[bot]@users.noreply.github.com'
git add docs/PERFORMANCE.md
if git diff --cached --quiet; then
echo "No performance history change."
exit 0
fi
git commit -m 'docs: record RPC performance matrix [skip ci]'
git push origin HEAD:main