Skip to content

Enhance Benchmark Results with n8n (#1162) #3450

Enhance Benchmark Results with n8n (#1162)

Enhance Benchmark Results with n8n (#1162) #3450

Workflow file for this run

name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
paths-ignore:
- "api/docs/**"
- "build/charts/**"
- "design/**"
- "**/*.md"
- "**/*.txt"
- "**/.gitignore"
env:
GO_VERSION: "1.23"
jobs:
ci-target-check:
runs-on: ubuntu-latest
outputs:
build: ${{ steps.ci-target-check.outputs.build }}
bench: ${{ steps.ci-target-check.outputs.bench }}
complex-test: ${{ steps.ci-target-check.outputs.complex-test }}
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: CI target check by path
uses: dorny/paths-filter@v3
id: ci-target-check
with:
filters: |
build: '**'
bench:
- 'test/bench/**'
- 'pkg/**'
- 'server/**'
- 'client/**'
- 'admin/**'
- 'api/converter/**'
complex-test:
- 'test/complex/**'
- 'server/backend/database/**'
- 'pkg/document/**'
- 'client/**'
build:
name: build
runs-on: ubuntu-latest
needs: ci-target-check
if: ${{ github.ref == 'refs/heads/main' || needs.ci-target-check.outputs.build == 'true' }}
steps:
- name: Set up Go ${{ env.GO_VERSION }}
uses: actions/setup-go@v4
with:
go-version: ${{ env.GO_VERSION }}
- name: Setup buf action
uses: bufbuild/buf-setup-action@v1
with:
github_token: ${{ github.token }}
- name: Check out code
uses: actions/checkout@v4
- name: Get tools dependencies
run: make tools
- name: Lint
run: make lint
- name: Lint proto files
uses: bufbuild/buf-lint-action@v1
- name: Build
run: make build
- name: Stack
run: docker compose -f build/docker/docker-compose.yml up --build -d
- name: Test
run: go test -tags integration -race -coverprofile=coverage.txt -covermode=atomic -v ./...
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v3
with:
file: ./coverage.txt
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
bench:
name: bench
runs-on: ubuntu-latest
permissions: write-all
needs: ci-target-check
if: ${{ github.ref == 'refs/heads/main' || needs.ci-target-check.outputs.bench == 'true' }}
steps:
- name: Set up Go ${{ env.GO_VERSION }}
uses: actions/setup-go@v4
with:
go-version: ${{ env.GO_VERSION }}
- name: Check out code
uses: actions/checkout@v4
- name: Stack
run: docker compose -f build/docker/docker-compose.yml up --build -d
- name: Bench
id: curr-bench
run: |
make bench
content=$(cat output.txt | jq -R -s .)
echo "BENCH_RESULT=$content" >> $GITHUB_OUTPUT
- name: Set up cache
uses: actions/cache@v3
with:
path: ./cache
key: ${{ runner.os }}-benchmark
- name: Read previous benchmark result
if: github.event_name == 'pull_request'
id: prev-bench
run: |
echo "PREV_BENCH_RESULT=null" >> $GITHUB_OUTPUT
echo "PREV_COMMIT=null" >> $GITHUB_OUTPUT
if [ -f "./cache/bench_result.txt" ]; then
content=$(cat ./cache/bench_result.txt | jq -R -s .)
echo "PREV_BENCH_RESULT=$content" >> $GITHUB_OUTPUT
if [ -f "./cache/commit_hash.txt" ]; then
prev_commit=$(cat ./cache/commit_hash.txt)
echo "PREV_COMMIT=$prev_commit" >> $GITHUB_OUTPUT
fi
fi
- name: Trigger n8n webhook
if: github.event_name == 'pull_request'
run: |
curr_bench=$(cat output.txt | jq -R -s .)
response=$(curl -f -X POST ${{ secrets.N8N_WEBHOOK_URL }} \
-H "Content-Type: application/json" \
-d '{
"repo": "${{ github.repository }}",
"pr_number": "${{ github.event.pull_request.number }}",
"commit_id": "${{ github.sha }}",
"prev_commit_id": "${{ steps.prev-bench.outputs.PREV_COMMIT }}",
"bench_result": ${{ steps.curr-bench.outputs.BENCH_RESULT }},
"prev_bench_result": ${{ steps.prev-bench.outputs.PREV_BENCH_RESULT }}
}' || echo "CURL_ERROR")
if [ "$response" = "CURL_ERROR" ]; then
echo "::error::Failed to trigger n8n webhook"
exit 1
fi
- name: Store benchmark result to cache
if: github.ref == 'refs/heads/main'
run: |
mkdir -p ./cache
cp output.txt ./cache/bench_result.txt
echo "${{ github.sha }}" > ./cache/commit_hash.txt
complex-test:
name: complex-test
runs-on: ubuntu-latest
needs: ci-target-check
if: ${{ github.ref == 'refs/heads/main' || needs.ci-target-check.outputs.complex-test == 'true' }}
steps:
- name: Set up Go ${{ env.GO_VERSION }}
uses: actions/setup-go@v3
with:
go-version: ${{ env.GO_VERSION }}
- name: Check out code
uses: actions/checkout@v4
- name: Check Docker Compose Version
run: docker compose --version
- name: Run the Config server, Shard 1 and Shard 2
run: docker compose -f build/docker/sharding/docker-compose.yml up --build -d --wait config1 shard1-1 shard2-1
- name: Initialize the Config server
run: docker compose -f build/docker/sharding/docker-compose.yml exec config1 mongosh test /scripts/init-config1.js
- name: Initialize the Shard 1
run: docker compose -f build/docker/sharding/docker-compose.yml exec shard1-1 mongosh test /scripts/init-shard1-1.js
- name: Initialize the Shard 2
run: docker compose -f build/docker/sharding/docker-compose.yml exec shard2-1 mongosh test /scripts/init-shard2-1.js
- name: Run the Mongos
run: docker compose -f build/docker/sharding/docker-compose.yml up --build -d --wait mongos1
- name: Initialize the Mongos
run: docker compose -f build/docker/sharding/docker-compose.yml exec mongos1 mongosh test /scripts/init-mongos1.js
- name: Run the tests with complex tag
run: go test -tags complex -race -v ./test/complex/...