Skip to content

Commit 80deeed

Browse files
authored
ci: add explain analysis on cloud (#18521)
1 parent fd3ad03 commit 80deeed

File tree

3 files changed

+137
-0
lines changed

3 files changed

+137
-0
lines changed

.github/workflows/cloud.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,14 @@ jobs:
151151
152152
> note: this image tag is only available for internal use.
153153
154+
explain:
155+
needs: [info, build, docker]
156+
uses: ./.github/workflows/reuse.explain.yml
157+
secrets: inherit
158+
with:
159+
run_id: ${{ github.run_id }}
160+
version: ${{ needs.docker.outputs.tag }}
161+
154162
benchmark:
155163
if: needs.info.outputs.target
156164
needs: [info, build, docker]

.github/workflows/reuse.explain.yml

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
name: Explain
2+
3+
on:
4+
workflow_call:
5+
inputs:
6+
run_id:
7+
description: The run id for explain
8+
required: true
9+
type: string
10+
version:
11+
description: The version of databend to explain
12+
required: true
13+
type: string
14+
15+
permissions:
16+
id-token: write
17+
pull-requests: write
18+
contents: read
19+
20+
jobs:
21+
cloud:
22+
runs-on: ubuntu-latest
23+
steps:
24+
- uses: actions/checkout@v4
25+
26+
- uses: ./.github/actions/setup_bendsql
27+
28+
- name: Get Latest Release
29+
id: latest
30+
env:
31+
GH_TOKEN: ${{ github.token }}
32+
run: |
33+
version_latest=$(gh api /repos/databendlabs/databend/releases/latest | jq -r '.tag_name')
34+
echo "version=${version_latest}" >> $GITHUB_OUTPUT
35+
echo "Compare explain: ${{ inputs.version }} vs ${version_latest}" >> $GITHUB_STEP_SUMMARY
36+
37+
- name: Create Warehouse Base
38+
id: warehouse-base
39+
env:
40+
CLOUD_USER: ${{ secrets.BENCHMARK_CLOUD_USER }}
41+
CLOUD_PASSWORD: ${{ secrets.BENCHMARK_CLOUD_PASSWORD }}
42+
CLOUD_GATEWAY: ${{ secrets.BENCHMARK_CLOUD_GATEWAY }}
43+
WAREHOUSE_SIZE: XSmall
44+
WAREHOUSE_VERSION: ${{ steps.latest.outputs.version }}
45+
WAREHOUSE_NAME: explain-${{ inputs.run_id }}-base
46+
run: |
47+
./scripts/ci/cloud/create_warehouse.sh
48+
echo "name=${WAREHOUSE_NAME}" >> $GITHUB_OUTPUT
49+
echo "dsn=databend://${CLOUD_USER}:${CLOUD_PASSWORD}@${CLOUD_GATEWAY}:443/explain?warehouse=${WAREHOUSE_NAME}" >> $GITHUB_OUTPUT
50+
51+
- name: Create Warehouse Compare
52+
id: warehouse-compare
53+
env:
54+
CLOUD_USER: ${{ secrets.BENCHMARK_CLOUD_USER }}
55+
CLOUD_PASSWORD: ${{ secrets.BENCHMARK_CLOUD_PASSWORD }}
56+
CLOUD_GATEWAY: ${{ secrets.BENCHMARK_CLOUD_GATEWAY }}
57+
WAREHOUSE_SIZE: XSmall
58+
WAREHOUSE_VERSION: ${{ inputs.version }}
59+
WAREHOUSE_NAME: explain-${{ inputs.run_id }}-compare
60+
run: |
61+
./scripts/ci/cloud/create_warehouse.sh
62+
echo "name=${WAREHOUSE_NAME}" >> $GITHUB_OUTPUT
63+
echo "dsn=databend://${CLOUD_USER}:${CLOUD_PASSWORD}@${CLOUD_GATEWAY}:443/explain?warehouse=${WAREHOUSE_NAME}" >> $GITHUB_OUTPUT
64+
65+
- name: Run ExplainB Analysis
66+
uses: BohuTANG/[email protected]
67+
with:
68+
bendsql-dsn1: ${{ steps.warehouse-base.outputs.dsn }}
69+
bendsql-dsn2: ${{ steps.warehouse-compare.outputs.dsn }}
70+
runbend: 'true'
71+
verbose: 'true'
72+
73+
- name: Upload Report
74+
uses: actions/upload-artifact@v4
75+
with:
76+
name: explainb-report
77+
path: report.html
78+
79+
- name: clean
80+
if: always()
81+
continue-on-error: true
82+
env:
83+
BENDSQL_DSN: "databend://${{ secrets.BENCHMARK_CLOUD_USER }}:${{ secrets.BENCHMARK_CLOUD_PASSWORD }}@${{ secrets.BENCHMARK_CLOUD_GATEWAY }}:443/?warehouse=default"
84+
run: |
85+
echo "DROP WAREHOUSE IF EXISTS '${{ steps.warehouse-base.outputs.name }}';" | bendsql -o table
86+
echo "DROP WAREHOUSE IF EXISTS '${{ steps.warehouse-compare.outputs.name }}';" | bendsql -o table

scripts/ci/cloud/create_warehouse.sh

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
#!/bin/bash
2+
3+
set -e
4+
5+
CLOUD_USER=${CLOUD_USER:-}
6+
CLOUD_PASSWORD=${CLOUD_PASSWORD:-}
7+
CLOUD_GATEWAY=${CLOUD_GATEWAY:-}
8+
9+
WAREHOUSE_SIZE=${WAREHOUSE_SIZE:-XSmall}
10+
WAREHOUSE_VERSION=${WAREHOUSE_VERSION:-}
11+
WAREHOUSE_NAME=${WAREHOUSE_NAME:-}
12+
13+
for var in CLOUD_USER CLOUD_PASSWORD CLOUD_GATEWAY WAREHOUSE_SIZE WAREHOUSE_VERSION WAREHOUSE_NAME; do
14+
if [[ -z "${!var}" ]]; then
15+
echo "Please set ${var} to create warehouse."
16+
exit 1
17+
fi
18+
done
19+
20+
echo "#######################################################"
21+
echo "Creating warehouse on Databend Cloud..."
22+
23+
export BENDSQL_DSN="databend://${CLOUD_USER}:${CLOUD_PASSWORD}@${CLOUD_GATEWAY}:443?login=disable&warehouse=default"
24+
25+
echo "Creating warehouse: ${WAREHOUSE_NAME}"
26+
echo "DROP WAREHOUSE IF EXISTS '${WAREHOUSE_NAME}';" | bendsql
27+
echo "CREATE WAREHOUSE '${WAREHOUSE_NAME}' WITH version='${WAREHOUSE_VERSION}' warehouse_size='${WAREHOUSE_SIZE}';" | bendsql
28+
echo "SHOW WAREHOUSES;" | bendsql --output table
29+
30+
echo "Waiting for warehouse to be ready..."
31+
max_retry=20
32+
counter=0
33+
until bendsql --query="SHOW WAREHOUSES LIKE '${WAREHOUSE_NAME}'" | grep -q "Running"; do
34+
if [[ $counter -gt $max_retry ]]; then
35+
echo "Failed to start warehouse ${WAREHOUSE_NAME} in time."
36+
exit 1
37+
fi
38+
echo "Waiting for warehouse to be ready... (attempt $((counter + 1))/$((max_retry + 1)))"
39+
counter=$((counter + 1))
40+
sleep 10
41+
done
42+
43+
echo "Warehouse ${WAREHOUSE_NAME} is now running!"

0 commit comments

Comments
 (0)