name: Systab Benchmarks on: repository_dispatch: types: [ benchmark-systab ] env: BENCH_DIR: 'go/performance/sysbench' RESULT_TABLE_NAME: 'sysbench_results' DOLTHUB_DB: 'import-perf/systab-perf' jobs: bench: name: Benchmark defaults: run: shell: bash strategy: fail-fast: true runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: ref: ${{ github.event.client_payload.version }} - name: Set up Go 1.x id: go uses: actions/setup-go@v5 with: go-version-file: go/go.mod - name: Dolt version id: version run: | version=${{ github.event.client_payload.version }} - name: install sysbench run: | curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.deb.sh | sudo bash sudo apt -y install sysbench - name: Install dolt working-directory: ./go run: go install ./cmd/dolt - name: Clone sysbench scripts run: | scripts=$GITHUB_WORKSPACE/scripts git clone https://github.com/dolthub/systab-sysbench-scripts.git "$scripts" - name: Run bench id: bench working-directory: go/ run: | out="$GITHUB_WORKSPACE/results.sql" testspec="../${{ env.BENCH_DIR }}/testdata/${{ github.event.client_payload.run_file }}" config="../${{ env.BENCH_DIR }}/testdata/default-config.yaml" scripts="$GITHUB_WORKSPACE/scripts" go run \ "github.com/dolthub/dolt/${{ env.BENCH_DIR }}/cmd" \ -run "$testspec" \ -config "$config" \ -script-dir "$scripts" \ -out "$out" echo "result_path=$out" >> $GITHUB_OUTPUT - name: Report id: report run: | gw=$GITHUB_WORKSPACE in="${{ steps.bench.outputs.result_path }}" query="$(pwd)/${{ env.BENCH_DIR }}/reporting/${{ github.event.client_payload.report }}" summaryq="$(pwd)/${{ env.BENCH_DIR }}/reporting/${{ github.event.client_payload.summary }}" out="$gw/results.csv" dolt_dir="$gw/systab-perf" dolt config --global --add user.email "systab-perf@dolthub.com" dolt config --global --add user.name "systab-perf" echo '${{ secrets.DOLTHUB_IMPORT_PERF_CREDS_VALUE }}' | dolt creds import dolt clone ${{ env.DOLTHUB_DB }} "$dolt_dir" cd "$dolt_dir" branch="${{ github.event.client_payload.commit_to_branch }}" # checkout branch if [ -z $(dolt sql -q "select 1 from dolt_branches where name = '$branch';") ]; then dolt checkout -b $branch else dolt checkout $branch fi dolt sql -q "drop table if exists sysbench_results" # load results dolt sql < "$in" # push results to dolthub dolt add sysbench_results dolt commit -m "CI commit" dolt push -f origin $branch # generate report dolt sql -r csv < "$query" > "$out" cat "$out" echo "report_path=$out" >> $GITHUB_OUTPUT avg=$(dolt sql -r csv < "$summaryq" | tail -1) echo "avg=$avg" >> $GITHUB_OUTPUT - name: Format Results id: html if: ${{ github.event.client_payload.email_recipient }} != "" run: | gw="$GITHUB_WORKSPACE" in="${{ steps.report.outputs.report_path }}" out="$gw/results.html" echo "" > "$out" print_header=true while read line; do if "$print_header"; then echo " " >> "$out" print_header=false continue fi echo " " >> "$out" done < "$in" echo "
${line//,/}
${line//,/}
" >> "$out" avg="${{ steps.report.outputs.avg }}" echo "
Average
$avg
" >> "$out" cat "$out" echo "html=$(echo $out)" >> $GITHUB_OUTPUT - name: Configure AWS Credentials if: ${{ github.event.client_payload.email_recipient }} != "" uses: aws-actions/configure-aws-credentials@v4 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region: us-west-2 - name: Send Email uses: ./.github/actions/ses-email-action if: ${{ github.event.client_payload.email_recipient }} != "" with: region: us-west-2 toAddresses: '["${{ github.event.client_payload.email_recipient }}"]' subject: 'System Table Performance Benchmarks: ${{ github.event.client_payload.version }}' bodyPath: ${{ steps.html.outputs.html }} template: 'SysbenchTemplate' - name: Read CSV if: ${{ github.event.client_payload.issue_id }} != "" id: csv uses: juliangruber/read-file-action@v1 with: path: "${{ steps.report.outputs.report_path }}" - name: Create MD if: ${{ github.event.client_payload.issue_id }} != "" uses: dolthub/csv-to-md-table-action@v4 id: md with: csvinput: ${{ steps.csv.outputs.content }} - uses: mshick/add-pr-comment@v2 if: ${{ github.event.client_payload.issue_id }} != "" with: repo-token: ${{ secrets.GITHUB_TOKEN }} issue: ${{ github.event.client_payload.issue_id }} message-failure: systab benchmark failed message-cancelled: systab benchmark cancelled allow-repeats: true message: | @${{ github.event.client_payload.actor }} __DOLT__ ${{ steps.md.outputs.markdown-table }}