-
Notifications
You must be signed in to change notification settings - Fork 57
225 lines (193 loc) · 7.47 KB
/
compose.yaml
File metadata and controls
225 lines (193 loc) · 7.47 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
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
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
name: Test compose examples
on:
pull_request:
paths:
- 'compose/**'
- '.github/workflows/compose.yaml'
push:
branches:
- main
paths:
- 'compose/**'
- '.github/workflows/compose.yaml'
permissions:
contents: read
jobs:
lint-actions:
name: Lint GitHub Actions workflows
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Lint actions
run: |
echo "::add-matcher::.github/actionlint-matcher.json"
bash <(curl https://raw.githubusercontent.com/rhysd/actionlint/main/scripts/download-actionlint.bash)
./actionlint -color
shell: bash
compose-test:
name: Test ${{ matrix.compose-file }}
needs: lint-actions
strategy:
fail-fast: false
matrix:
compose-file:
- docker-compose.yml
- docker-compose-postgres.yml
- docker-compose-mysql.yml
- docker-compose-mysql-es.yml
- docker-compose-cass-es.yml
- docker-compose-postgres-opensearch.yml
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- name: Print build information
env:
HEAD_REF: ${{ github.head_ref }}
REF: ${{ github.ref }}
COMPOSE_FILE: ${{ matrix.compose-file }}
run: echo "head_ref=$HEAD_REF ref=$REF compose=$COMPOSE_FILE"
- uses: actions/checkout@v6
- name: Start compose stack
working-directory: compose
run: docker compose -f ${{ matrix.compose-file }} up -d
- name: Run validation
working-directory: compose
run: |
docker compose -f ${{ matrix.compose-file }} -f docker-compose-validate.yml up temporal-validate --exit-code-from temporal-validate
- name: Print all logs on failure
if: failure()
working-directory: compose
run: |
echo "=== Printing all container logs ==="
docker compose -f ${{ matrix.compose-file }} ps -a
docker compose -f ${{ matrix.compose-file }} logs
- name: Cleanup
if: always()
working-directory: compose
run: docker compose -f ${{ matrix.compose-file }} -f docker-compose-validate.yml down -v
compose-dev-test:
name: Test docker-compose-dev.yml
needs: lint-actions
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v6
- name: Start dev compose stack
working-directory: compose
run: docker compose -f docker-compose-dev.yml up -d
- name: Wait for Temporal to be ready
working-directory: compose
run: |
for i in $(seq 1 30); do
if docker compose -f docker-compose-dev.yml exec temporal temporal operator cluster health 2>/dev/null; then
echo "Temporal is ready"
exit 0
fi
echo "Waiting for Temporal... ($i/30)"
sleep 2
done
echo "Temporal failed to become ready"
exit 1
- name: Validate Temporal is functional
working-directory: compose
run: |
docker compose -f docker-compose-dev.yml exec temporal temporal operator namespace describe default
docker compose -f docker-compose-dev.yml exec temporal temporal workflow start \
--workflow-id validation-test \
--type NonExistentWorkflow \
--task-queue validation-queue \
--execution-timeout 10s
docker compose -f docker-compose-dev.yml exec temporal temporal workflow terminate \
--workflow-id validation-test \
--reason "Validation complete" || true
- name: Print all logs on failure
if: failure()
working-directory: compose
run: |
echo "=== Printing all container logs ==="
docker compose -f docker-compose-dev.yml ps -a
docker compose -f docker-compose-dev.yml logs
- name: Cleanup
if: always()
working-directory: compose
run: docker compose -f docker-compose-dev.yml down -v
compose-tls-test:
name: Test docker-compose-tls.yml
needs: lint-actions
runs-on: ubuntu-latest
timeout-minutes: 20
steps:
- name: Print build information
env:
HEAD_REF: ${{ github.head_ref }}
REF: ${{ github.ref }}
run: echo "head_ref=$HEAD_REF ref=$REF compose=docker-compose-tls.yml"
- uses: actions/checkout@v6
- name: Generate TLS certificates
working-directory: compose
run: |
docker build -t temporal_tls:test -f tls/Dockerfile.tls .
mkdir -p .pki
docker run --rm -v temporal_tls_pki:/pki -v "${PWD}"/.pki:/pki-out temporal_tls:test
- name: Build TLS images
working-directory: compose
run: COMPOSE_PROJECT_NAME=tls_test docker compose -f docker-compose-tls.yml build --no-cache
- name: Start TLS compose stack
working-directory: compose
run: COMPOSE_PROJECT_NAME=tls_test docker compose -f docker-compose-tls.yml up -d
- name: Run validation
working-directory: compose
run: |
COMPOSE_PROJECT_NAME=tls_test docker compose -f docker-compose-tls.yml -f docker-compose-validate.yml up temporal-validate --exit-code-from temporal-validate
- name: Print all logs on failure
if: failure()
working-directory: compose
run: |
echo "=== Printing all container logs ==="
COMPOSE_PROJECT_NAME=tls_test docker compose -f docker-compose-tls.yml ps -a
COMPOSE_PROJECT_NAME=tls_test docker compose -f docker-compose-tls.yml logs
- name: Cleanup
if: always()
working-directory: compose
run: |
COMPOSE_PROJECT_NAME=tls_test docker compose -f docker-compose-tls.yml -f docker-compose-validate.yml down -v
docker volume rm temporal_tls_pki || true
rm -rf .pki
compose-multirole-test:
name: Test docker-compose-multirole.yaml
needs: lint-actions
runs-on: ubuntu-latest
timeout-minutes: 20
steps:
- name: Print build information
env:
HEAD_REF: ${{ github.head_ref }}
REF: ${{ github.ref }}
run: echo "head_ref=$HEAD_REF ref=$REF compose=docker-compose-multirole.yaml"
- uses: actions/checkout@v6
- name: Install loki Docker plugin
run: docker plugin install grafana/loki-docker-driver:latest --alias loki --grant-all-permissions
- name: Start multirole compose stack
working-directory: compose
run: docker compose -f docker-compose-multirole.yaml up -d
- name: Run validation
working-directory: compose
run: |
docker compose -f docker-compose-multirole.yaml -f docker-compose-validate-multirole.yml up temporal-validate --exit-code-from temporal-validate
- name: Verify temporal services are running
working-directory: compose
run: |
docker compose -f docker-compose-multirole.yaml ps temporal-history temporal-frontend temporal-matching temporal-worker
- name: Print all logs on failure
if: failure()
working-directory: compose
run: |
echo "=== Printing all container logs ==="
docker compose -f docker-compose-multirole.yaml ps -a
docker compose -f docker-compose-multirole.yaml logs
- name: Cleanup
if: always()
working-directory: compose
run: docker compose -f docker-compose-multirole.yaml -f docker-compose-validate-multirole.yml down -v