-
Notifications
You must be signed in to change notification settings - Fork 89
210 lines (176 loc) · 8 KB
/
Linux.yml
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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
name: Build and Test - Linux
on:
schedule:
- cron: '0 0 * * 1'
push:
branches: [ master ]
pull_request:
branches: [ master ]
release:
types:
- created
concurrency:
group: linux-${{ github.head_ref }}
cancel-in-progress: true
defaults:
run:
shell: bash
working-directory: run
jobs:
build_and_test:
strategy:
fail-fast: false
matrix:
os: [ubuntu-22.04]
odbc_provider: [UnixODBC]
compiler: [Clang]
build_type: [Debug, Release]
architecture: [x86_64]
runtime_link: [static-runtime, dynamic-runtime]
third_parties: [bundled-third-parties, system-third-parties]
# exclude:
# - os: ubuntu-18.04
# compiler: Clang
runs-on: ${{ matrix.os }}
steps:
- name: Create directories
working-directory: ${{ github.workspace }}
run: |
mkdir -p ${{ github.workspace }}/run
mkdir -p ${{ github.workspace }}/build
mkdir -p ${{ github.workspace }}/prefix
mkdir -p ${{ github.workspace }}/install
mkdir -p ${{ github.workspace }}/package
- name: Clone the repo
uses: actions/checkout@v4
with:
path: source
submodules: true
- name: Install dependencies - Common
run: |
sudo apt update -q
sudo apt remove -y php* node* mysql* mssql-tools
sudo apt upgrade -y
sudo apt install -y build-essential git cmake docker perl libdbi-perl libdbd-odbc-perl python-is-python3 python3 python3-pip python3-setuptools libpoco-dev libssl-dev libicu-dev
- name: Install dependencies - UnixODBC
if: ${{ matrix.odbc_provider == 'UnixODBC' }}
run: sudo apt install -y unixodbc unixodbc-dev
- name: Install dependencies - iODBC
if: ${{ matrix.odbc_provider == 'iODBC' }}
run: sudo apt install -y iodbc libiodbc2 libiodbc2-dev
- name: Install dependencies - Clang
if: ${{ matrix.compiler == 'Clang' }}
run: sudo apt install -y clang llvm lldb
- name: Install dependencies - GCC
if: ${{ matrix.compiler == 'GCC' }}
run: sudo apt install -y gcc g++ gdb
- name: Install dependencies - Cleanup
run: sudo apt autoremove -y
- name: Start ClickHouse in Docker
uses: hoverkraft-tech/[email protected]
with:
compose-file: source/test/docker-compose.yml
down-flags: --volumes
- name: Configure
run: >
CC=${{ fromJSON('{"Clang": "clang", "GCC": "gcc"}')[matrix.compiler] }}
CXX=${{ fromJSON('{"Clang": "clang++", "GCC": "g++"}')[matrix.compiler] }}
cmake -S ${{ github.workspace }}/source -B ${{ github.workspace }}/build
-DCMAKE_BUILD_TYPE=${{ matrix.build_type }}
-DODBC_PROVIDER=${{ matrix.odbc_provider }}
-DCH_ODBC_RUNTIME_LINK_STATIC=${{ fromJSON('{"static-runtime": "ON", "dynamic-runtime": "OFF"}')[matrix.runtime_link] }}
-DCH_ODBC_PREFER_BUNDLED_THIRD_PARTIES=${{ fromJSON('{"bundled-third-parties": "ON", "system-third-parties": "OFF"}')[matrix.third_parties] }}
-DTEST_DSN_LIST="ClickHouse DSN (ANSI);ClickHouse DSN (Unicode);ClickHouse DSN (ANSI, RBWNAT)"
- name: Build
run: cmake --build ${{ github.workspace }}/build --config ${{ matrix.build_type }} --parallel $(nproc)
- name: Package
run: cmake --build ${{ github.workspace }}/build --config ${{ matrix.build_type }} --target package
- name: List artifacts
run: |
echo REF: ${{ github.ref }}
ls -lahR ${{ github.workspace }}/build/
# Linux release artifacts are uploaded in Docker.yml
# That builds binaries based on CentOS 7, which makes those more portable.
# However, these binaries are uploaded to be available in GH's 'Actions', just in case.
- name: Upload the artifacts
if: ${{ matrix.compiler == 'GCC' && matrix.odbc_provider == 'UnixODBC' && matrix.build_type == 'Release' && matrix.runtime_link == 'dynamic-runtime' && matrix.third_parties == 'bundled-third-parties' }}
uses: actions/upload-artifact@v4
with:
name: clickhouse-odbc-linux-${{ matrix.compiler }}-${{ matrix.odbc_provider }}-${{ matrix.build_type }}
path: ${{ github.workspace }}/build/clickhouse-odbc-*
- name: Test - Run C++ unit tests
working-directory: ${{ github.workspace }}/build
run: ctest --output-on-failure --build-config ${{ matrix.build_type }} -R '.*-ut.*'
- name: Prepare ODBC ini configs
run: |
echo "Preparing ODBC ini configs"
cat > ${{ github.workspace }}/run/.odbcinst.ini <<-EOF
[ODBC]
Trace = 1
TraceFile = ${{ github.workspace }}/run/odbc-driver-manager-trace.log
Debug = 1
DebugFile = ${{ github.workspace }}/run/odbc-driver-manager-debug.log
[ODBC Drivers]
ClickHouse ODBC Driver (ANSI) = Installed
ClickHouse ODBC Driver (Unicode) = Installed
[ClickHouse ODBC Driver (ANSI)]
Driver = ${{ github.workspace }}/build/driver/libclickhouseodbc.so
Setup = ${{ github.workspace }}/build/driver/libclickhouseodbc.so
UsageCount = 1
[ClickHouse ODBC Driver (Unicode)]
Driver = ${{ github.workspace }}/build/driver/libclickhouseodbcw.so
Setup = ${{ github.workspace }}/build/driver/libclickhouseodbcw.so
UsageCount = 1
EOF
cat > ${{ github.workspace }}/run/.odbc.ini <<-EOF
[ODBC]
Trace = 1
TraceFile = ${{ github.workspace }}/run/odbc-driver-manager-trace.log
Debug = 1
DebugFile = ${{ github.workspace }}/run/odbc-driver-manager-debug.log
[ODBC Data Sources]
ClickHouse DSN (ANSI) = ClickHouse ODBC Driver (ANSI)
ClickHouse DSN (Unicode) = ClickHouse ODBC Driver (Unicode)
ClickHouse DSN (ANSI, RBWNAT) = ClickHouse ODBC Driver (ANSI)
[ClickHouse DSN (ANSI)]
Driver = ClickHouse ODBC Driver (ANSI)
Description = Test DSN for ClickHouse ODBC Driver (ANSI)
Url = http://${CLICKHOUSE_SERVER_IP}
DriverLog = yes
DriverLogFile = ${{ github.workspace }}/run/clickhouse-odbc-driver.log
[ClickHouse DSN (Unicode)]
Driver = ClickHouse ODBC Driver (Unicode)
Description = Test DSN for ClickHouse ODBC Driver (Unicode)
Url = http://localhost:8123
DriverLog = yes
DriverLogFile = ${{ github.workspace }}/run/clickhouse-odbc-driver-w.log
[ClickHouse DSN (ANSI, RBWNAT)]
Driver = ClickHouse ODBC Driver (ANSI)
Description = Test DSN for ClickHouse ODBC Driver (ANSI) that uses RowBinaryWithNamesAndTypes as data source communication default format
Url = http://localhost:8123/query?default_format=RowBinaryWithNamesAndTypes
DriverLog = yes
DriverLogFile = ${{ github.workspace }}/run/clickhouse-odbc-driver.log
EOF
# Run all tests except those that were run in "Test - unit tests" step.
- name: Test - Run C++ integration tests
working-directory: ${{ github.workspace }}/build
run: |
export ODBCSYSINI=
export ODBCINSTINI="${{ github.workspace }}/run/.odbcinst.ini"
export ODBCINI="${{ github.workspace }}/run/.odbc.ini"
if [[ "${{ matrix.odbc_provider }}" == "iODBC" ]]; then
export GTEST_FILTER="-PerformanceTest.*"
fi
ctest --output-on-failure --build-config ${{ matrix.build_type }} -E '.*-ut.*'
- name: Prepare Python dependencies
working-directory: source/test
run: |
pip install -r requirements.txt
# An empty `ODBCSYSINI` is required in this case to run properly with custom `ODBCINI`/`ODBCINSTINI` paths
- name: Test - Run Python e2e tests
working-directory: source/test
run: |
export ODBCSYSINI=
export ODBCINSTINI="${{ github.workspace }}/run/.odbcinst.ini"
export ODBCINI="${{ github.workspace }}/run/.odbc.ini"
pytest --log-level=DEBUG -v