-
Notifications
You must be signed in to change notification settings - Fork 0
145 lines (127 loc) · 4.9 KB
/
Copy pathci.yml
File metadata and controls
145 lines (127 loc) · 4.9 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
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
name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
workflow_dispatch:
env:
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: 'true'
jobs:
unit-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install dependencies
run: |
sudo apt-get update -q
sudo apt-get install -y software-properties-common ca-certificates gpg wget
# Kitware APT repo for CMake 3.31+
wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc \
| gpg --dearmor \
| sudo tee /usr/share/keyrings/kitware-archive-keyring.gpg > /dev/null
echo 'deb [signed-by=/usr/share/keyrings/kitware-archive-keyring.gpg] https://apt.kitware.com/ubuntu/ noble main' \
| sudo tee /etc/apt/sources.list.d/kitware.list
sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y
sudo apt-get update -q
sudo apt-get install -y cmake ninja-build g++-15 \
libmysqlclient-dev pkg-config
- name: Configure
run: cmake --preset release -DSKIP_DOCKER_MANAGEMENT=ON -DBUILD_INTEGRATION_TESTS=OFF
env:
CXX: g++-15
CC: gcc-15
- name: Build
run: cmake --build build -j$(nproc)
- name: Test
run: ctest --preset release
integration-tests:
needs: unit-tests
runs-on: ubuntu-latest
env:
DS_MYSQL_TEST_HOST: 127.0.0.1
DS_MYSQL_TEST_DATABASE: ds_mysql_test
DS_MYSQL_TEST_USER: ds_mysql_test_user
DS_MYSQL_TEST_PASSWORD: ds_mysql_test_password
steps:
- uses: actions/checkout@v4
- name: Install dependencies
run: |
sudo apt-get update -q
sudo apt-get install -y software-properties-common ca-certificates gpg wget
# Kitware APT repo for CMake 3.31+
wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc \
| gpg --dearmor \
| sudo tee /usr/share/keyrings/kitware-archive-keyring.gpg > /dev/null
echo 'deb [signed-by=/usr/share/keyrings/kitware-archive-keyring.gpg] https://apt.kitware.com/ubuntu/ noble main' \
| sudo tee /etc/apt/sources.list.d/kitware.list
sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y
sudo apt-get update -q
sudo apt-get install -y cmake ninja-build g++-15 \
libmysqlclient-dev pkg-config
- name: Start MySQL
run: |
CONTAINER_ID=$(docker run -d \
-p 0:3306 \
-e MYSQL_ROOT_PASSWORD=root \
-e MYSQL_DATABASE=ds_mysql_test \
-e MYSQL_USER=ds_mysql_test_user \
-e MYSQL_PASSWORD=ds_mysql_test_password \
--health-cmd="mysqladmin ping -h 127.0.0.1 --protocol=tcp" \
--health-interval=5s \
--health-timeout=10s \
--health-retries=10 \
mysql:8.0)
echo "MYSQL_CONTAINER_ID=$CONTAINER_ID" >> "$GITHUB_ENV"
PORT=$(docker inspect --format='{{(index (index .NetworkSettings.Ports "3306/tcp") 0).HostPort}}' "$CONTAINER_ID")
echo "DS_MYSQL_TEST_PORT=$PORT" >> "$GITHUB_ENV"
echo "Waiting for MySQL to be healthy..."
for i in $(seq 1 30); do
STATUS=$(docker inspect --format='{{.State.Health.Status}}' "$CONTAINER_ID")
if [ "$STATUS" = "healthy" ]; then
echo "MySQL is healthy on port $PORT"
break
fi
if [ "$i" = "30" ]; then
echo "MySQL did not become healthy in time"
docker logs "$CONTAINER_ID"
exit 1
fi
echo "Status: $STATUS, waiting... ($i/30)"
sleep 5
done
- name: Initialize database
run: |
sudo apt-get install -y mysql-client
echo "Waiting for TCP connection on port $DS_MYSQL_TEST_PORT..."
for i in $(seq 1 20); do
if mysql -h 127.0.0.1 -P "$DS_MYSQL_TEST_PORT" -u root -proot \
--connect-timeout=5 -e "SELECT 1" > /dev/null 2>&1; then
echo "TCP connection established"
break
fi
if [ "$i" = "20" ]; then
echo "MySQL TCP port did not become available in time"
exit 1
fi
echo "Waiting for TCP... ($i/20)"
sleep 2
done
mysql -h 127.0.0.1 -P "$DS_MYSQL_TEST_PORT" -u root -proot \
< tests/integration/docker/init-db.sql
- name: Configure
run: cmake --preset release -DSKIP_DOCKER_MANAGEMENT=ON
env:
CXX: g++-15
CC: gcc-15
- name: Build
run: cmake --build build -j$(nproc)
- name: Test
run: ctest --preset release
- name: Stop MySQL
if: always()
run: |
if [ -n "$MYSQL_CONTAINER_ID" ]; then
docker stop "$MYSQL_CONTAINER_ID"
docker rm "$MYSQL_CONTAINER_ID"
fi