mirror of
https://github.com/GreptimeTeam/greptimedb.git
synced 2025-12-22 22:20:02 +00:00
ci: add multi lang tests workflow into release and nightly workflows (#7300)
* ci: add multi lang tests workflow into release and nightly workflows Signed-off-by: Dennis Zhuang <killme2008@gmail.com> * chore: emoji Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Signed-off-by: Dennis Zhuang <killme2008@gmail.com> * refactor: apply suggestions Signed-off-by: Dennis Zhuang <killme2008@gmail.com> * ci: add notification when multi lang tests fails Signed-off-by: Dennis Zhuang <killme2008@gmail.com> * chore: revert ci and add nodejs Signed-off-by: Dennis Zhuang <killme2008@gmail.com> --------- Signed-off-by: Dennis Zhuang <killme2008@gmail.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
This commit is contained in:
121
.github/workflows/multi-lang-tests.yml
vendored
121
.github/workflows/multi-lang-tests.yml
vendored
@@ -52,121 +52,6 @@ jobs:
|
|||||||
run-multi-lang-tests:
|
run-multi-lang-tests:
|
||||||
name: Run Multi-language SDK Tests
|
name: Run Multi-language SDK Tests
|
||||||
needs: build-greptimedb
|
needs: build-greptimedb
|
||||||
runs-on: ubuntu-latest
|
uses: ./.github/workflows/run-multi-lang-tests.yml
|
||||||
timeout-minutes: 30
|
with:
|
||||||
steps:
|
artifact-name: greptime-bin
|
||||||
- name: Checkout greptimedb-tests repository
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
repository: GreptimeTeam/greptimedb-tests
|
|
||||||
persist-credentials: false
|
|
||||||
|
|
||||||
- name: Download pre-built greptime binary
|
|
||||||
uses: actions/download-artifact@v4
|
|
||||||
with:
|
|
||||||
name: greptime-bin
|
|
||||||
path: bin
|
|
||||||
|
|
||||||
- name: Setup greptime binary
|
|
||||||
run: |
|
|
||||||
chmod +x ./bin/greptime
|
|
||||||
ls -lh ./bin/greptime
|
|
||||||
./bin/greptime --version
|
|
||||||
|
|
||||||
- name: Setup Java 17
|
|
||||||
uses: actions/setup-java@v4
|
|
||||||
with:
|
|
||||||
distribution: 'temurin'
|
|
||||||
java-version: '17'
|
|
||||||
cache: 'maven'
|
|
||||||
|
|
||||||
- name: Setup Python 3.8
|
|
||||||
uses: actions/setup-python@v5
|
|
||||||
with:
|
|
||||||
python-version: '3.8'
|
|
||||||
|
|
||||||
- name: Setup Go 1.24
|
|
||||||
uses: actions/setup-go@v5
|
|
||||||
with:
|
|
||||||
go-version: '1.24'
|
|
||||||
cache: true
|
|
||||||
cache-dependency-path: go-tests/go.sum
|
|
||||||
|
|
||||||
- name: Install Python dependencies
|
|
||||||
run: |
|
|
||||||
pip install mysql-connector-python psycopg2-binary
|
|
||||||
python3 -c "import mysql.connector; print(f'mysql-connector-python {mysql.connector.__version__}')"
|
|
||||||
python3 -c "import psycopg2; print(f'psycopg2 {psycopg2.__version__}')"
|
|
||||||
|
|
||||||
- name: Install Go dependencies
|
|
||||||
working-directory: go-tests
|
|
||||||
run: |
|
|
||||||
go mod download
|
|
||||||
go mod verify
|
|
||||||
go version
|
|
||||||
|
|
||||||
- name: Kill existing GreptimeDB processes
|
|
||||||
run: |
|
|
||||||
pkill -f greptime || true
|
|
||||||
sleep 2
|
|
||||||
|
|
||||||
- name: Start GreptimeDB standalone
|
|
||||||
run: |
|
|
||||||
./bin/greptime standalone start \
|
|
||||||
--http-addr 0.0.0.0:4000 \
|
|
||||||
--rpc-addr 0.0.0.0:4001 \
|
|
||||||
--mysql-addr 0.0.0.0:4002 \
|
|
||||||
--postgres-addr 0.0.0.0:4003 \
|
|
||||||
--user-provider=static_user_provider:cmd:greptime_user=greptime_pwd > /tmp/greptimedb.log 2>&1 &
|
|
||||||
|
|
||||||
- name: Wait for GreptimeDB to be ready
|
|
||||||
run: |
|
|
||||||
echo "Waiting for GreptimeDB..."
|
|
||||||
for i in {1..60}; do
|
|
||||||
if curl -sf http://localhost:4000/health > /dev/null; then
|
|
||||||
echo "✅ GreptimeDB is ready"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
sleep 2
|
|
||||||
done
|
|
||||||
echo "❌ GreptimeDB failed to start"
|
|
||||||
cat /tmp/greptimedb.log
|
|
||||||
exit 1
|
|
||||||
|
|
||||||
- name: Run multi-language tests
|
|
||||||
env:
|
|
||||||
DB_NAME: test_db
|
|
||||||
MYSQL_HOST: localhost
|
|
||||||
MYSQL_PORT: 4002
|
|
||||||
POSTGRES_HOST: localhost
|
|
||||||
POSTGRES_PORT: 4003
|
|
||||||
HTTP_PORT: 4000
|
|
||||||
GREPTIME_USERNAME: greptime_user
|
|
||||||
GREPTIME_PASSWORD: greptime_pwd
|
|
||||||
run: |
|
|
||||||
chmod +x ./run_tests.sh
|
|
||||||
./run_tests.sh
|
|
||||||
|
|
||||||
- name: Collect logs on failure
|
|
||||||
if: failure()
|
|
||||||
run: |
|
|
||||||
echo "=== GreptimeDB Logs ==="
|
|
||||||
cat /tmp/greptimedb.log || true
|
|
||||||
|
|
||||||
- name: Upload test logs on failure
|
|
||||||
if: failure()
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: test-logs
|
|
||||||
path: |
|
|
||||||
/tmp/greptimedb.log
|
|
||||||
java-tests/target/surefire-reports/
|
|
||||||
python-tests/.pytest_cache/
|
|
||||||
go-tests/*.log
|
|
||||||
**/test-output/
|
|
||||||
retention-days: 7
|
|
||||||
|
|
||||||
- name: Cleanup
|
|
||||||
if: always()
|
|
||||||
run: |
|
|
||||||
pkill -f greptime || true
|
|
||||||
|
|||||||
21
.github/workflows/nightly-build.yml
vendored
21
.github/workflows/nightly-build.yml
vendored
@@ -174,6 +174,18 @@ jobs:
|
|||||||
image-registry: ${{ vars.ECR_IMAGE_REGISTRY }}
|
image-registry: ${{ vars.ECR_IMAGE_REGISTRY }}
|
||||||
image-namespace: ${{ vars.ECR_IMAGE_NAMESPACE }}
|
image-namespace: ${{ vars.ECR_IMAGE_NAMESPACE }}
|
||||||
|
|
||||||
|
run-multi-lang-tests:
|
||||||
|
name: Run Multi-language SDK Tests
|
||||||
|
if: ${{ inputs.build_linux_amd64_artifacts || github.event_name == 'schedule' }}
|
||||||
|
needs: [
|
||||||
|
allocate-runners,
|
||||||
|
build-linux-amd64-artifacts,
|
||||||
|
]
|
||||||
|
uses: ./.github/workflows/run-multi-lang-tests.yml
|
||||||
|
with:
|
||||||
|
artifact-name: greptime-linux-amd64-${{ needs.allocate-runners.outputs.version }}
|
||||||
|
artifact-is-tarball: true
|
||||||
|
|
||||||
release-images-to-dockerhub:
|
release-images-to-dockerhub:
|
||||||
name: Build and push images to DockerHub
|
name: Build and push images to DockerHub
|
||||||
if: ${{ inputs.release_images || github.event_name == 'schedule' }}
|
if: ${{ inputs.release_images || github.event_name == 'schedule' }}
|
||||||
@@ -301,7 +313,8 @@ jobs:
|
|||||||
if: ${{ github.repository == 'GreptimeTeam/greptimedb' && always() }} # Not requiring successful dependent jobs, always run.
|
if: ${{ github.repository == 'GreptimeTeam/greptimedb' && always() }} # Not requiring successful dependent jobs, always run.
|
||||||
name: Send notification to Greptime team
|
name: Send notification to Greptime team
|
||||||
needs: [
|
needs: [
|
||||||
release-images-to-dockerhub
|
release-images-to-dockerhub,
|
||||||
|
run-multi-lang-tests,
|
||||||
]
|
]
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
permissions:
|
permissions:
|
||||||
@@ -319,17 +332,17 @@ jobs:
|
|||||||
run: pnpm tsx bin/report-ci-failure.ts
|
run: pnpm tsx bin/report-ci-failure.ts
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
CI_REPORT_STATUS: ${{ needs.release-images-to-dockerhub.outputs.nightly-build-result == 'success' }}
|
CI_REPORT_STATUS: ${{ needs.release-images-to-dockerhub.outputs.nightly-build-result == 'success' && (needs.run-multi-lang-tests.result == 'success' || needs.run-multi-lang-tests.result == 'skipped') }}
|
||||||
- name: Notify nightly build successful result
|
- name: Notify nightly build successful result
|
||||||
uses: slackapi/slack-github-action@v1.23.0
|
uses: slackapi/slack-github-action@v1.23.0
|
||||||
if: ${{ needs.release-images-to-dockerhub.outputs.nightly-build-result == 'success' }}
|
if: ${{ needs.release-images-to-dockerhub.outputs.nightly-build-result == 'success' && (needs.run-multi-lang-tests.result == 'success' || needs.run-multi-lang-tests.result == 'skipped') }}
|
||||||
with:
|
with:
|
||||||
payload: |
|
payload: |
|
||||||
{"text": "GreptimeDB's ${{ env.NEXT_RELEASE_VERSION }} build has completed successfully."}
|
{"text": "GreptimeDB's ${{ env.NEXT_RELEASE_VERSION }} build has completed successfully."}
|
||||||
|
|
||||||
- name: Notify nightly build failed result
|
- name: Notify nightly build failed result
|
||||||
uses: slackapi/slack-github-action@v1.23.0
|
uses: slackapi/slack-github-action@v1.23.0
|
||||||
if: ${{ needs.release-images-to-dockerhub.outputs.nightly-build-result != 'success' }}
|
if: ${{ needs.release-images-to-dockerhub.outputs.nightly-build-result != 'success' || needs.run-multi-lang-tests.result == 'failure' }}
|
||||||
with:
|
with:
|
||||||
payload: |
|
payload: |
|
||||||
{"text": "GreptimeDB's ${{ env.NEXT_RELEASE_VERSION }} build has failed, please check ${{ steps.report-ci-status.outputs.html_url }}."}
|
{"text": "GreptimeDB's ${{ env.NEXT_RELEASE_VERSION }} build has failed, please check ${{ steps.report-ci-status.outputs.html_url }}."}
|
||||||
|
|||||||
14
.github/workflows/release.yml
vendored
14
.github/workflows/release.yml
vendored
@@ -215,6 +215,18 @@ jobs:
|
|||||||
image-registry: ${{ vars.ECR_IMAGE_REGISTRY }}
|
image-registry: ${{ vars.ECR_IMAGE_REGISTRY }}
|
||||||
image-namespace: ${{ vars.ECR_IMAGE_NAMESPACE }}
|
image-namespace: ${{ vars.ECR_IMAGE_NAMESPACE }}
|
||||||
|
|
||||||
|
run-multi-lang-tests:
|
||||||
|
name: Run Multi-language SDK Tests
|
||||||
|
if: ${{ inputs.build_linux_amd64_artifacts || github.event_name == 'push' || github.event_name == 'schedule' }}
|
||||||
|
needs: [
|
||||||
|
allocate-runners,
|
||||||
|
build-linux-amd64-artifacts,
|
||||||
|
]
|
||||||
|
uses: ./.github/workflows/run-multi-lang-tests.yml
|
||||||
|
with:
|
||||||
|
artifact-name: greptime-linux-amd64-${{ needs.allocate-runners.outputs.version }}
|
||||||
|
artifact-is-tarball: true
|
||||||
|
|
||||||
build-macos-artifacts:
|
build-macos-artifacts:
|
||||||
name: Build macOS artifacts
|
name: Build macOS artifacts
|
||||||
strategy:
|
strategy:
|
||||||
@@ -303,6 +315,7 @@ jobs:
|
|||||||
allocate-runners,
|
allocate-runners,
|
||||||
build-linux-amd64-artifacts,
|
build-linux-amd64-artifacts,
|
||||||
build-linux-arm64-artifacts,
|
build-linux-arm64-artifacts,
|
||||||
|
run-multi-lang-tests,
|
||||||
]
|
]
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
outputs:
|
outputs:
|
||||||
@@ -381,6 +394,7 @@ jobs:
|
|||||||
build-macos-artifacts,
|
build-macos-artifacts,
|
||||||
build-windows-artifacts,
|
build-windows-artifacts,
|
||||||
release-images-to-dockerhub,
|
release-images-to-dockerhub,
|
||||||
|
run-multi-lang-tests,
|
||||||
]
|
]
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
|
|||||||
194
.github/workflows/run-multi-lang-tests.yml
vendored
Normal file
194
.github/workflows/run-multi-lang-tests.yml
vendored
Normal file
@@ -0,0 +1,194 @@
|
|||||||
|
# Reusable workflow for running multi-language SDK tests against GreptimeDB
|
||||||
|
# Used by: multi-lang-tests.yml, release.yml, nightly-build.yml
|
||||||
|
# Supports both direct binary artifacts and tarball artifacts
|
||||||
|
|
||||||
|
name: Run Multi-language SDK Tests
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_call:
|
||||||
|
inputs:
|
||||||
|
artifact-name:
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
description: 'Name of the artifact containing greptime binary'
|
||||||
|
http-port:
|
||||||
|
required: false
|
||||||
|
type: string
|
||||||
|
default: '4000'
|
||||||
|
description: 'HTTP server port'
|
||||||
|
mysql-port:
|
||||||
|
required: false
|
||||||
|
type: string
|
||||||
|
default: '4002'
|
||||||
|
description: 'MySQL server port'
|
||||||
|
postgres-port:
|
||||||
|
required: false
|
||||||
|
type: string
|
||||||
|
default: '4003'
|
||||||
|
description: 'PostgreSQL server port'
|
||||||
|
db-name:
|
||||||
|
required: false
|
||||||
|
type: string
|
||||||
|
default: 'test_db'
|
||||||
|
description: 'Test database name'
|
||||||
|
username:
|
||||||
|
required: false
|
||||||
|
type: string
|
||||||
|
default: 'greptime_user'
|
||||||
|
description: 'Authentication username'
|
||||||
|
password:
|
||||||
|
required: false
|
||||||
|
type: string
|
||||||
|
default: 'greptime_pwd'
|
||||||
|
description: 'Authentication password'
|
||||||
|
timeout-minutes:
|
||||||
|
required: false
|
||||||
|
type: number
|
||||||
|
default: 30
|
||||||
|
description: 'Job timeout in minutes'
|
||||||
|
artifact-is-tarball:
|
||||||
|
required: false
|
||||||
|
type: boolean
|
||||||
|
default: false
|
||||||
|
description: 'Whether the artifact is a tarball (tar.gz) that needs to be extracted'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
run-tests:
|
||||||
|
name: Run Multi-language SDK Tests
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
timeout-minutes: ${{ inputs.timeout-minutes }}
|
||||||
|
steps:
|
||||||
|
- name: Checkout greptimedb-tests repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
repository: GreptimeTeam/greptimedb-tests
|
||||||
|
persist-credentials: false
|
||||||
|
|
||||||
|
- name: Download pre-built greptime binary
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
name: ${{ inputs.artifact-name }}
|
||||||
|
path: artifact
|
||||||
|
|
||||||
|
- name: Setup greptime binary
|
||||||
|
run: |
|
||||||
|
mkdir -p bin
|
||||||
|
if [ "${{ inputs.artifact-is-tarball }}" = "true" ]; then
|
||||||
|
# Extract tarball and find greptime binary
|
||||||
|
tar -xzf artifact/*.tar.gz -C artifact
|
||||||
|
find artifact -name "greptime" -type f -exec cp {} bin/greptime \;
|
||||||
|
else
|
||||||
|
# Direct binary format
|
||||||
|
if [ -f artifact/greptime ]; then
|
||||||
|
cp artifact/greptime bin/greptime
|
||||||
|
else
|
||||||
|
cp artifact/* bin/greptime
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
chmod +x ./bin/greptime
|
||||||
|
ls -lh ./bin/greptime
|
||||||
|
./bin/greptime --version
|
||||||
|
|
||||||
|
- name: Setup Java 17
|
||||||
|
uses: actions/setup-java@v4
|
||||||
|
with:
|
||||||
|
distribution: 'temurin'
|
||||||
|
java-version: '17'
|
||||||
|
cache: 'maven'
|
||||||
|
|
||||||
|
- name: Setup Python 3.8
|
||||||
|
uses: actions/setup-python@v5
|
||||||
|
with:
|
||||||
|
python-version: '3.8'
|
||||||
|
|
||||||
|
- name: Setup Go 1.24
|
||||||
|
uses: actions/setup-go@v5
|
||||||
|
with:
|
||||||
|
go-version: '1.24'
|
||||||
|
cache: true
|
||||||
|
cache-dependency-path: go-tests/go.sum
|
||||||
|
|
||||||
|
- name: Set up Node.js
|
||||||
|
uses: actions/setup-node@v4
|
||||||
|
with:
|
||||||
|
node-version: '18'
|
||||||
|
|
||||||
|
- name: Install Python dependencies
|
||||||
|
run: |
|
||||||
|
pip install mysql-connector-python psycopg2-binary
|
||||||
|
python3 -c "import mysql.connector; print(f'mysql-connector-python {mysql.connector.__version__}')"
|
||||||
|
python3 -c "import psycopg2; print(f'psycopg2 {psycopg2.__version__}')"
|
||||||
|
|
||||||
|
- name: Install Go dependencies
|
||||||
|
working-directory: go-tests
|
||||||
|
run: |
|
||||||
|
go mod download
|
||||||
|
go mod verify
|
||||||
|
go version
|
||||||
|
|
||||||
|
- name: Kill existing GreptimeDB processes
|
||||||
|
run: |
|
||||||
|
pkill -f greptime || true
|
||||||
|
sleep 2
|
||||||
|
|
||||||
|
- name: Start GreptimeDB standalone
|
||||||
|
run: |
|
||||||
|
./bin/greptime standalone start \
|
||||||
|
--http-addr 0.0.0.0:${{ inputs.http-port }} \
|
||||||
|
--rpc-addr 0.0.0.0:4001 \
|
||||||
|
--mysql-addr 0.0.0.0:${{ inputs.mysql-port }} \
|
||||||
|
--postgres-addr 0.0.0.0:${{ inputs.postgres-port }} \
|
||||||
|
--user-provider=static_user_provider:cmd:${{ inputs.username }}=${{ inputs.password }} > /tmp/greptimedb.log 2>&1 &
|
||||||
|
|
||||||
|
- name: Wait for GreptimeDB to be ready
|
||||||
|
run: |
|
||||||
|
echo "Waiting for GreptimeDB..."
|
||||||
|
for i in {1..60}; do
|
||||||
|
if curl -sf http://localhost:${{ inputs.http-port }}/health > /dev/null; then
|
||||||
|
echo "✅ GreptimeDB is ready"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
sleep 2
|
||||||
|
done
|
||||||
|
echo "❌ GreptimeDB failed to start"
|
||||||
|
cat /tmp/greptimedb.log
|
||||||
|
exit 1
|
||||||
|
|
||||||
|
- name: Run multi-language tests
|
||||||
|
env:
|
||||||
|
DB_NAME: ${{ inputs.db-name }}
|
||||||
|
MYSQL_HOST: 127.0.0.1
|
||||||
|
MYSQL_PORT: ${{ inputs.mysql-port }}
|
||||||
|
POSTGRES_HOST: 127.0.0.1
|
||||||
|
POSTGRES_PORT: ${{ inputs.postgres-port }}
|
||||||
|
HTTP_HOST: 127.0.0.1
|
||||||
|
HTTP_PORT: ${{ inputs.http-port }}
|
||||||
|
GREPTIME_USERNAME: ${{ inputs.username }}
|
||||||
|
GREPTIME_PASSWORD: ${{ inputs.password }}
|
||||||
|
run: |
|
||||||
|
chmod +x ./run_tests.sh
|
||||||
|
./run_tests.sh
|
||||||
|
|
||||||
|
- name: Collect logs on failure
|
||||||
|
if: failure()
|
||||||
|
run: |
|
||||||
|
echo "=== GreptimeDB Logs ==="
|
||||||
|
cat /tmp/greptimedb.log || true
|
||||||
|
|
||||||
|
- name: Upload test logs on failure
|
||||||
|
if: failure()
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: test-logs
|
||||||
|
path: |
|
||||||
|
/tmp/greptimedb.log
|
||||||
|
java-tests/target/surefire-reports/
|
||||||
|
python-tests/.pytest_cache/
|
||||||
|
go-tests/*.log
|
||||||
|
**/test-output/
|
||||||
|
retention-days: 7
|
||||||
|
|
||||||
|
- name: Cleanup
|
||||||
|
if: always()
|
||||||
|
run: |
|
||||||
|
pkill -f greptime || true
|
||||||
Reference in New Issue
Block a user