Repository navigation
117 lines (111 loc) · 4.78 KB
/
Copy pathcloud.yml
File metadata and controls
117 lines (111 loc) · 4.78 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
name: Cloud Tests
on:
schedule:
- cron: "0 3 * * *"
workflow_dispatch:
inputs:
pr:
description: "Pull request#"
required: false
concurrency:
group: ${{ github.workflow }}-${{ github.event.inputs.pr || github.sha }}
cancel-in-progress: true
jobs:
test-with-cloud:
runs-on: ubuntu-latest
strategy:
matrix:
project: ["client-v2", "jdbc-v2"]
fail-fast: false
timeout-minutes: 20
name: ${{ matrix.project }} + ClickHouse Cloud
env:
TEST_CLICKHOUSE_CONTAINER: none
TEST_CLICKHOUSE_SECURE: "true"
TEST_CLICKHOUSE_HOST: ${{ secrets.INTEGRATIONS_TEAM_TESTS_CLOUD_HOST_SMT_PROD }}
TEST_CLICKHOUSE_USER: default
TEST_CLICKHOUSE_PASSWORD: ${{ secrets.INTEGRATIONS_TEAM_TESTS_CLOUD_PASSWORD_SMT_PROD }}
steps:
- name: Check out repository
uses: actions/checkout@v4
- name: Check out PR
run: |
git fetch --no-tags --prune --progress --no-recurse-submodules --depth=1 \
origin pull/${{ github.event.inputs.pr }}/merge:merged-pr && git checkout merged-pr
if: github.event.inputs.pr != ''
- name: Install JDK 17 and Maven
uses: actions/setup-java@v4
with:
distribution: "temurin"
java-version: |
8
17
21
cache: "maven"
- name: Setup Toolchain
shell: bash
run: |
mkdir -p $HOME/.m2 \
&& cat << EOF > $HOME/.m2/toolchains.xml
<?xml version="1.0" encoding="UTF8"?>
<toolchains>
<toolchain>
<type>jdk</type>
<provides>
<version>17</version>
</provides>
<configuration>
<jdkHome>${{ env.JAVA_HOME }}</jdkHome>
</configuration>
</toolchain>
</toolchains>
EOF
- name: Install Java client
run: mvn --also-make --batch-mode --no-transfer-progress -DskipTests=true -Dmaven.javadoc.skip=true install
- name: Generate Database Name
run: |
RANDOM_DB="clickhouse_java_test_${GITHUB_RUN_ID}_${RANDOM}"
echo "TEST_DB_NAME=$RANDOM_DB" >> $GITHUB_ENV
echo "Generated database name: $RANDOM_DB"
- name: Create Temporary Database
run: |
echo "Creating database: \`$TEST_DB_NAME\`"
curl --fail-with-body -s -u "$TEST_CLICKHOUSE_USER:$TEST_CLICKHOUSE_PASSWORD" \
"https://$TEST_CLICKHOUSE_HOST:8443/?wait_end_of_query=1" \
--data-binary "CREATE DATABASE IF NOT EXISTS \`$TEST_DB_NAME\`"
echo "Waiting for database \`$TEST_DB_NAME\` to replicate to all nodes..."
TOTAL_REPLICAS=$(curl -s -u "$TEST_CLICKHOUSE_USER:$TEST_CLICKHOUSE_PASSWORD" \
"https://$TEST_CLICKHOUSE_HOST:8443" \
--data-binary "SELECT count() FROM system.clusters WHERE cluster = 'default'" | tr -d '[:space:]')
if [ -z "$TOTAL_REPLICAS" ] || ! [[ "$TOTAL_REPLICAS" =~ ^[0-9]+$ ]] || [ "$TOTAL_REPLICAS" -le 0 ]; then
TOTAL_REPLICAS=1
fi
echo "Total replicas in cluster: $TOTAL_REPLICAS"
for i in {1..30}; do
READY_REPLICAS=$(curl -s -u "$TEST_CLICKHOUSE_USER:$TEST_CLICKHOUSE_PASSWORD" \
"https://$TEST_CLICKHOUSE_HOST:8443" \
--data-binary "SELECT count() FROM clusterAllReplicas('default', system.databases) WHERE name = '$TEST_DB_NAME'" | tr -d '[:space:]')
echo "Replicas ready: $READY_REPLICAS / $TOTAL_REPLICAS (attempt $i)"
if [ -n "$READY_REPLICAS" ] && [[ "$READY_REPLICAS" =~ ^[0-9]+$ ]] && [ "$READY_REPLICAS" -ge "$TOTAL_REPLICAS" ]; then
echo "Database \`$TEST_DB_NAME\` is ready on all replicas."
break
fi
sleep 2
done
echo "Verifying database accessibility..."
curl --fail-with-body -s -u "$TEST_CLICKHOUSE_USER:$TEST_CLICKHOUSE_PASSWORD" \
"https://$TEST_CLICKHOUSE_HOST:8443/?database=$TEST_DB_NAME&wait_end_of_query=1" \
--data-binary "SELECT 1"
- name: Test ${{ matrix.project }}
run: |
mvn --batch-mode --no-transfer-progress --projects ${{ matrix.project }} -Dprotocol=http -Dmaven.javadoc.skip=true verify
- name: Cleanup Database Unconditionally
if: always()
run: |
if [ -n "$TEST_DB_NAME" ]; then
DROP_STMT="DROP DATABASE IF EXISTS \`$TEST_DB_NAME\`"
echo "Cleaning up database: \`$TEST_DB_NAME\` with statement '$DROP_STMT'";
curl --fail-with-body -s -u "$TEST_CLICKHOUSE_USER:$TEST_CLICKHOUSE_PASSWORD" "https://$TEST_CLICKHOUSE_HOST:8443/?wait_end_of_query=1" --data-binary "$DROP_STMT";
else
echo "No database name was generated; skipping cleanup.";
fi;