-
-
Notifications
You must be signed in to change notification settings - Fork 0
177 lines (163 loc) · 6.29 KB
/
ci.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
name: Hydra
on:
schedule:
# Once per day, Monday to Friday
- cron: '0 19 * * 1-5'
push:
branches:
- main
pull_request:
jobs:
test:
strategy:
fail-fast: false
matrix:
platform:
- os: macos-latest
cc: clang
cxx: clang++
type: static
- os: macos-latest
cc: clang
cxx: clang++
type: shared
- os: ubuntu-latest
cc: clang
cxx: clang++
type: static
- os: ubuntu-latest
cc: gcc
cxx: g++
type: static
- os: ubuntu-latest
cc: clang
cxx: clang++
type: shared
- os: ubuntu-latest
cc: gcc
cxx: g++
type: shared
- os: windows-latest
type: static
- os: windows-latest
type: shared
# Sanitizers
# TODO: Re-enable. Rigtht now ASAN on GitHub Actions
# seems broken for some reason
# - os: ubuntu-latest
# cc: clang
# cxx: clang++
# type: static
# options: -DHYDRA_ADDRESS_SANITIZER:BOOL=ON
- os: ubuntu-latest
cc: clang
cxx: clang++
type: static
options: -DHYDRA_UNDEFINED_SANITIZER:BOOL=ON
runs-on: ${{ matrix.platform.os }}
env:
MINIO_ROOT_USER: sourcemeta
MINIO_ROOT_PASSWORD: sourcemeta
MINIO_PORT: 9000
MINIO_PROTOCOL: http
MINIO_ADDRESS: 127.0.0.1
MINIO_REGION: us-east-1
MINIO_ALIAS: sourcemeta
MINIO_ACCESS_KEY: sourcemeta-test
MINIO_SECRET_KEY: 12345678
MINIO_BUCKET: test
HTTPCLIENT_STUB_PORT: 9999
HTTPSERVER_STUB_PORT: 9998
CC: ${{ matrix.platform.cc }}
CXX: ${{ matrix.platform.cxx }}
steps:
- name: Install ClangFormat
run: pipx install clang-format==19.1.0
- name: Install dependencies (GNU/Linux)
if: runner.os == 'linux'
run: |
sudo apt-get update --yes
sudo apt-get install --yes nodejs
wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio_20240307004348.0.0_amd64.deb -O minio.deb
sudo dpkg -i minio.deb
rm minio.deb
curl https://dl.min.io/client/mc/release/linux-amd64/mc --output /usr/local/bin/mc
chmod +x /usr/local/bin/mc
- uses: actions/checkout@v3
- name: Install dependencies (macOS)
if: runner.os == 'macos'
run: brew bundle
env:
HOMEBREW_NO_ANALYTICS: 1
HOMEBREW_NO_AUTO_UPDATE: 1
- run: cmake --version
- name: Configure Hydra (static)
if: matrix.platform.type == 'static'
run: >
cmake -S . -B ./build
-DCMAKE_BUILD_TYPE:STRING=Release
-DHYDRA_CRYPTO:BOOL=ON
-DHYDRA_TESTS:BOOL=ON
-DHYDRA_DOCS:BOOL=OFF
-DBUILD_SHARED_LIBS:BOOL=OFF
-DCMAKE_COMPILE_WARNING_AS_ERROR:BOOL=ON
${{ matrix.platform.options }}
- name: Configure Hydra (shared)
if: matrix.platform.type == 'shared'
run: >
cmake -S . -B ./build
-DCMAKE_BUILD_TYPE:STRING=Release
-DHYDRA_CRYPTO:BOOL=ON
-DHYDRA_TESTS:BOOL=ON
-DHYDRA_DOCS:BOOL=OFF
-DBUILD_SHARED_LIBS:BOOL=ON
-DCMAKE_COMPILE_WARNING_AS_ERROR:BOOL=ON
${{ matrix.platform.options }}
- run: cmake --build ./build --config Release --target clang_format_test
- run: cmake --build ./build --config Release --parallel 4
- run: >
cmake --install ./build --prefix ./build/dist --config Release --verbose
--component sourcemeta_jsontoolkit
- run: >
cmake --install ./build --prefix ./build/dist --config Release --verbose
--component sourcemeta_jsontoolkit_dev
- run: >
cmake --install ./build --prefix ./build/dist --config Release --verbose
--component sourcemeta_hydra
- run: >
cmake --install ./build --prefix ./build/dist --config Release --verbose
--component sourcemeta_hydra_dev
# Run stubs
- name: Run MinIO stub (*nix)
run: (minio server --address :${{ env.MINIO_PORT }} build/minio &) && sleep 10 && make configure-minio
if: runner.os != 'windows'
- name: Run HTTP client stub (Windows)
run: cmd /c "start /b node test\e2e\httpclient\stub.js ${{ env.HTTPCLIENT_STUB_PORT }}" && Start-Sleep -Seconds 10
if: runner.os == 'windows'
- name: Run HTTP client stub (*nix)
run: (node test/e2e/httpclient/stub.js ${{ env.HTTPCLIENT_STUB_PORT }} &) && sleep 10
if: runner.os != 'windows'
- name: Run HTTP server stub (*nix)
run: (./build/test/e2e/httpserver/sourcemeta_hydra_httpserver_e2e_stub ${{ env.HTTPSERVER_STUB_PORT }} &) && sleep 10
if: runner.os != 'windows'
# Not every CTest version supports the --test-dir option. If such option
# is not recognized, `ctest` will successfully exit finding no tests.
# Better to be sure and `cd` all the time here.
- name: Tests (*nix)
run: cd ./build && ctest --build-config Release --output-on-failure --parallel
if: runner.os != 'windows'
env:
SOURCEMETA_HYDRA_TEST_HTTPCLIENT_BASE_URL: 'http://localhost:${{ env.HTTPCLIENT_STUB_PORT }}'
SOURCEMETA_HYDRA_TEST_HTTPSERVER_BASE_URL: 'http://localhost:${{ env.HTTPSERVER_STUB_PORT }}'
SOURCEMETA_HYDRA_TEST_BUCKET_BASE_URL: ${{ env.MINIO_PROTOCOL }}://${{ env.MINIO_ADDRESS }}:${{ env.MINIO_PORT }}/${{ env.MINIO_BUCKET }}
SOURCEMETA_HYDRA_TEST_BUCKET_REGION: ${{ env.MINIO_REGION }}
SOURCEMETA_HYDRA_TEST_BUCKET_ACCESS_KEY: ${{ env.MINIO_ACCESS_KEY }}
SOURCEMETA_HYDRA_TEST_BUCKET_SECRET_KEY: ${{ env.MINIO_SECRET_KEY }}
# See https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html
UBSAN_OPTIONS: print_stacktrace=1
- name: Tests (Windows)
# TODO: Run Bucket MinIO tests on Windows
run: cd ./build && ctest --build-config Release --exclude-regex e2e_Bucket --output-on-failure --parallel
if: runner.os == 'windows'
env:
SOURCEMETA_HYDRA_TEST_HTTPCLIENT_BASE_URL: 'http://localhost:${{ env.HTTPCLIENT_STUB_PORT }}'