Skip to content

Commit e4e27bf

Browse files
committed
try another approach
1 parent bc154fb commit e4e27bf

4 files changed

Lines changed: 193 additions & 120 deletions

File tree

.github/workflows/compose.yaml

Lines changed: 54 additions & 120 deletions
Original file line numberDiff line numberDiff line change
@@ -58,71 +58,39 @@ jobs:
5858

5959
- name: Start compose stack
6060
working-directory: compose
61-
run: docker compose -f ${{ matrix.compose-file }} up -d || true
61+
run: docker compose -f ${{ matrix.compose-file }} up -d
6262

63-
- name: Check admin-tools completion
63+
- name: Start validation container
6464
working-directory: compose
65-
run: |
66-
# Wait a moment for container to start and potentially fail
67-
sleep 10
68-
# Check if admin-tools container exists and get its exit code
69-
if docker compose -f ${{ matrix.compose-file }} ps -a temporal-admin-tools --format json | jq -e '.[0]' > /dev/null 2>&1; then
70-
EXIT_CODE=$(docker compose -f ${{ matrix.compose-file }} ps -a temporal-admin-tools --format json | jq -r '.[0].ExitCode // "null"')
71-
if [ "$EXIT_CODE" != "0" ] && [ "$EXIT_CODE" != "null" ]; then
72-
echo "Admin-tools failed with exit code: $EXIT_CODE"
73-
docker compose -f ${{ matrix.compose-file }} logs temporal-admin-tools
74-
exit 1
75-
fi
76-
fi
65+
run: docker compose -f ${{ matrix.compose-file }} -f docker-compose-validate.yml up temporal-validate -d
7766

78-
- name: Wait for services to be healthy
67+
- name: Wait for validation to complete
7968
working-directory: compose
8069
run: |
81-
echo "Waiting up to 5 minutes for services to be healthy..."
82-
timeout 300 bash -c 'until docker compose -f ${{ matrix.compose-file }} ps | grep -E "(healthy|Started)"; do sleep 5; done' || {
83-
echo "Services failed to become healthy"
84-
docker compose -f ${{ matrix.compose-file }} ps
85-
docker compose -f ${{ matrix.compose-file }} logs
70+
echo "Waiting for validation container to complete (max 5 minutes)..."
71+
timeout 300 bash -c 'until docker compose -f ${{ matrix.compose-file }} -f docker-compose-validate.yml ps temporal-validate --format json | jq -e ".[0].State == \"exited\"" > /dev/null 2>&1; do sleep 2; done' || {
72+
echo "Validation container did not complete in time"
73+
docker compose -f ${{ matrix.compose-file }} -f docker-compose-validate.yml logs temporal-validate
8674
exit 1
8775
}
8876
89-
- name: Check admin-tools logs
90-
working-directory: compose
91-
run: |
92-
echo "=== Admin-tools logs ==="
93-
docker compose -f ${{ matrix.compose-file }} logs temporal-admin-tools 2>&1 | grep -v "level=warning" || true
94-
echo "=== Checking for errors ==="
95-
if docker compose -f ${{ matrix.compose-file }} logs temporal-admin-tools 2>&1 | grep -i "error" | grep -v "unable to describe namespace" | grep -v "level=warning"; then
96-
echo "Found errors in admin-tools logs"
97-
exit 1
98-
fi
99-
echo "No errors found in admin-tools logs"
77+
# Check exit code
78+
EXIT_CODE=$(docker compose -f ${{ matrix.compose-file }} -f docker-compose-validate.yml ps -a temporal-validate --format json | jq -r '.[0].ExitCode')
79+
echo "Validation container exit code: $EXIT_CODE"
10080
101-
- name: Check namespace creation logs
102-
working-directory: compose
103-
run: |
104-
echo "=== Namespace creation logs ==="
105-
docker compose -f ${{ matrix.compose-file }} logs temporal-create-namespace 2>&1 | grep -v "level=warning" || true
106-
echo "=== Checking for success message ==="
107-
if ! docker compose -f ${{ matrix.compose-file }} logs temporal-create-namespace 2>&1 | grep -q "Namespace.*created"; then
108-
echo "Namespace creation failed or did not complete"
81+
if [ "$EXIT_CODE" != "0" ]; then
82+
echo "Validation failed!"
83+
docker compose -f ${{ matrix.compose-file }} -f docker-compose-validate.yml logs temporal-validate
10984
exit 1
11085
fi
111-
echo "Namespace creation succeeded"
11286
113-
- name: Verify temporal server is healthy
114-
working-directory: compose
115-
run: |
116-
docker compose -f ${{ matrix.compose-file }} exec -T temporal temporal operator cluster health || {
117-
echo "Temporal server health check failed"
118-
docker compose -f ${{ matrix.compose-file }} logs temporal
119-
exit 1
120-
}
87+
echo "Validation passed!"
88+
docker compose -f ${{ matrix.compose-file }} -f docker-compose-validate.yml logs temporal-validate
12189
12290
- name: Cleanup
12391
if: always()
12492
working-directory: compose
125-
run: docker compose -f ${{ matrix.compose-file }} down -v
93+
run: docker compose -f ${{ matrix.compose-file }} -f docker-compose-validate.yml down -v
12694

12795
compose-tls-test:
12896
name: Test docker-compose-tls.yml
@@ -151,63 +119,40 @@ jobs:
151119

152120
- name: Start TLS compose stack
153121
working-directory: compose
154-
run: COMPOSE_PROJECT_NAME=tls_test docker compose -f docker-compose-tls.yml up -d || true
122+
run: COMPOSE_PROJECT_NAME=tls_test docker compose -f docker-compose-tls.yml up -d
155123

156-
- name: Check admin-tools-setup completion
124+
- name: Start validation container
157125
working-directory: compose
158-
run: |
159-
# Wait a moment for container to start and potentially fail
160-
sleep 10
161-
# Check if admin-tools-setup container exists and get its exit code
162-
if COMPOSE_PROJECT_NAME=tls_test docker compose -f docker-compose-tls.yml ps -a temporal-admin-tools-setup --format json | jq -e '.[0]' > /dev/null 2>&1; then
163-
EXIT_CODE=$(COMPOSE_PROJECT_NAME=tls_test docker compose -f docker-compose-tls.yml ps -a temporal-admin-tools-setup --format json | jq -r '.[0].ExitCode // "null"')
164-
if [ "$EXIT_CODE" != "0" ] && [ "$EXIT_CODE" != "null" ]; then
165-
echo "Admin-tools-setup failed with exit code: $EXIT_CODE"
166-
COMPOSE_PROJECT_NAME=tls_test docker compose -f docker-compose-tls.yml logs temporal-admin-tools-setup
167-
exit 1
168-
fi
169-
fi
126+
run: COMPOSE_PROJECT_NAME=tls_test docker compose -f docker-compose-tls.yml -f docker-compose-validate.yml up temporal-validate -d
170127

171-
- name: Wait for services to be healthy
128+
- name: Wait for validation to complete
172129
working-directory: compose
173130
run: |
174-
echo "Waiting up to 5 minutes for services to be healthy..."
175-
timeout 300 bash -c 'until COMPOSE_PROJECT_NAME=tls_test docker compose -f docker-compose-tls.yml ps | grep -E "(healthy|Started)"; do sleep 5; done' || {
176-
echo "Services failed to become healthy"
177-
COMPOSE_PROJECT_NAME=tls_test docker compose -f docker-compose-tls.yml ps
178-
COMPOSE_PROJECT_NAME=tls_test docker compose -f docker-compose-tls.yml logs
131+
echo "Waiting for validation container to complete (max 5 minutes)..."
132+
timeout 300 bash -c 'until COMPOSE_PROJECT_NAME=tls_test docker compose -f docker-compose-tls.yml -f docker-compose-validate.yml ps temporal-validate --format json | jq -e ".[0].State == \"exited\"" > /dev/null 2>&1; do sleep 2; done' || {
133+
echo "Validation container did not complete in time"
134+
COMPOSE_PROJECT_NAME=tls_test docker compose -f docker-compose-tls.yml -f docker-compose-validate.yml logs temporal-validate
179135
exit 1
180136
}
181137
182-
- name: Check admin-tools logs
183-
working-directory: compose
184-
run: |
185-
echo "=== Admin-tools-setup logs ==="
186-
COMPOSE_PROJECT_NAME=tls_test docker compose -f docker-compose-tls.yml logs temporal-admin-tools-setup 2>&1 | grep -v "level=warning" || true
187-
echo "=== Checking for errors ==="
188-
if COMPOSE_PROJECT_NAME=tls_test docker compose -f docker-compose-tls.yml logs temporal-admin-tools-setup 2>&1 | grep -i "error" | grep -v "unable to describe namespace" | grep -v "level=warning"; then
189-
echo "Found errors in admin-tools logs"
190-
exit 1
191-
fi
192-
echo "No errors found in admin-tools logs"
138+
# Check exit code
139+
EXIT_CODE=$(COMPOSE_PROJECT_NAME=tls_test docker compose -f docker-compose-tls.yml -f docker-compose-validate.yml ps -a temporal-validate --format json | jq -r '.[0].ExitCode')
140+
echo "Validation container exit code: $EXIT_CODE"
193141
194-
- name: Check namespace creation logs
195-
working-directory: compose
196-
run: |
197-
echo "=== Namespace creation logs ==="
198-
COMPOSE_PROJECT_NAME=tls_test docker compose -f docker-compose-tls.yml logs temporal-create-namespace 2>&1 | grep -v "level=warning" || true
199-
echo "=== Checking for success message ==="
200-
if ! COMPOSE_PROJECT_NAME=tls_test docker compose -f docker-compose-tls.yml logs temporal-create-namespace 2>&1 | grep -q "Namespace.*created"; then
201-
echo "Namespace creation failed or did not complete"
142+
if [ "$EXIT_CODE" != "0" ]; then
143+
echo "Validation failed!"
144+
COMPOSE_PROJECT_NAME=tls_test docker compose -f docker-compose-tls.yml -f docker-compose-validate.yml logs temporal-validate
202145
exit 1
203146
fi
204-
echo "Namespace creation succeeded"
147+
148+
echo "Validation passed!"
149+
COMPOSE_PROJECT_NAME=tls_test docker compose -f docker-compose-tls.yml -f docker-compose-validate.yml logs temporal-validate
205150
206151
- name: Cleanup
207152
if: always()
208153
working-directory: compose
209154
run: |
210-
COMPOSE_PROJECT_NAME=tls_test docker compose -f docker-compose-tls.yml down -v
155+
COMPOSE_PROJECT_NAME=tls_test docker compose -f docker-compose-tls.yml -f docker-compose-validate.yml down -v
211156
docker volume rm temporal_tls_pki || true
212157
rm -rf .pki
213158
@@ -230,45 +175,34 @@ jobs:
230175

231176
- name: Start multirole compose stack
232177
working-directory: compose
233-
run: docker compose -f docker-compose-multirole.yaml up -d || true
178+
run: docker compose -f docker-compose-multirole.yaml up -d
234179

235-
- name: Check setup completion
180+
- name: Start validation container
236181
working-directory: compose
237-
run: |
238-
# Wait a moment for container to start and potentially fail
239-
sleep 10
240-
# Check if setup container exists and get its exit code
241-
if docker compose -f docker-compose-multirole.yaml ps -a temporal-setup --format json | jq -e '.[0]' > /dev/null 2>&1; then
242-
EXIT_CODE=$(docker compose -f docker-compose-multirole.yaml ps -a temporal-setup --format json | jq -r '.[0].ExitCode // "null"')
243-
if [ "$EXIT_CODE" != "0" ] && [ "$EXIT_CODE" != "null" ]; then
244-
echo "Setup failed with exit code: $EXIT_CODE"
245-
docker compose -f docker-compose-multirole.yaml logs temporal-setup
246-
exit 1
247-
fi
248-
fi
182+
run: docker compose -f docker-compose-multirole.yaml -f docker-compose-validate-multirole.yml up temporal-validate -d
249183

250-
- name: Wait for services to be healthy
184+
- name: Wait for validation to complete
251185
working-directory: compose
252186
run: |
253-
echo "Waiting up to 5 minutes for services to be healthy..."
254-
timeout 300 bash -c 'until docker compose -f docker-compose-multirole.yaml ps | grep -E "(healthy|Started)"; do sleep 5; done' || {
255-
echo "Services failed to become healthy"
256-
docker compose -f docker-compose-multirole.yaml ps
257-
docker compose -f docker-compose-multirole.yaml logs
187+
echo "Waiting for validation container to complete (max 5 minutes)..."
188+
timeout 300 bash -c 'until docker compose -f docker-compose-multirole.yaml -f docker-compose-validate-multirole.yml ps temporal-validate --format json | jq -e ".[0].State == \"exited\"" > /dev/null 2>&1; do sleep 2; done' || {
189+
echo "Validation container did not complete in time"
190+
docker compose -f docker-compose-multirole.yaml -f docker-compose-validate-multirole.yml logs temporal-validate
258191
exit 1
259192
}
260193
261-
- name: Check setup logs
262-
working-directory: compose
263-
run: |
264-
echo "=== Setup logs ==="
265-
docker compose -f docker-compose-multirole.yaml logs temporal-setup 2>&1 | grep -v "level=warning" || true
266-
echo "=== Checking for errors ==="
267-
if docker compose -f docker-compose-multirole.yaml logs temporal-setup 2>&1 | grep -i "error" | grep -v "unable to describe namespace" | grep -v "level=warning"; then
268-
echo "Found errors in setup logs"
194+
# Check exit code
195+
EXIT_CODE=$(docker compose -f docker-compose-multirole.yaml -f docker-compose-validate-multirole.yml ps -a temporal-validate --format json | jq -r '.[0].ExitCode')
196+
echo "Validation container exit code: $EXIT_CODE"
197+
198+
if [ "$EXIT_CODE" != "0" ]; then
199+
echo "Validation failed!"
200+
docker compose -f docker-compose-multirole.yaml -f docker-compose-validate-multirole.yml logs temporal-validate
269201
exit 1
270202
fi
271-
echo "No errors found in setup logs"
203+
204+
echo "Validation passed!"
205+
docker compose -f docker-compose-multirole.yaml -f docker-compose-validate-multirole.yml logs temporal-validate
272206
273207
- name: Verify temporal services are running
274208
working-directory: compose
@@ -278,4 +212,4 @@ jobs:
278212
- name: Cleanup
279213
if: always()
280214
working-directory: compose
281-
run: docker compose -f docker-compose-multirole.yaml down -v
215+
run: docker compose -f docker-compose-multirole.yaml -f docker-compose-validate-multirole.yml down -v
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
version: '3.5'
2+
3+
services:
4+
temporal-validate:
5+
image: temporalio/admin-tools:${TEMPORAL_ADMINTOOLS_VERSION}
6+
container_name: temporal-validate
7+
deploy:
8+
restart_policy:
9+
condition: on-failure
10+
delay: 10s
11+
max_attempts: 5
12+
depends_on:
13+
temporal-setup:
14+
condition: service_completed_successfully
15+
environment:
16+
- TEMPORAL_ADDRESS=temporal-nginx:7233
17+
- NAMESPACE=default
18+
- MAX_WAIT_TIME=300
19+
networks:
20+
- temporal-network
21+
volumes:
22+
- ./scripts:/scripts
23+
entrypoint: ["/bin/sh"]
24+
command: /scripts/validate-temporal.sh
25+
26+
networks:
27+
temporal-network:
28+
external: true
29+
name: temporal-network
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
version: '3.5'
2+
3+
services:
4+
temporal-validate:
5+
image: temporalio/admin-tools:${TEMPORAL_ADMINTOOLS_VERSION}
6+
container_name: temporal-validate
7+
deploy:
8+
restart_policy:
9+
condition: on-failure
10+
delay: 10s
11+
max_attempts: 5
12+
depends_on:
13+
temporal-create-namespace:
14+
condition: service_completed_successfully
15+
environment:
16+
- TEMPORAL_ADDRESS=temporal:7233
17+
- NAMESPACE=default
18+
- MAX_WAIT_TIME=300
19+
networks:
20+
- temporal-network
21+
volumes:
22+
- ./scripts:/scripts
23+
entrypoint: ["/bin/sh"]
24+
command: /scripts/validate-temporal.sh
25+
26+
networks:
27+
temporal-network:
28+
external: true
29+
name: temporal-network
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
#!/bin/bash
2+
3+
set -e
4+
5+
# Configuration
6+
TEMPORAL_ADDRESS="${TEMPORAL_ADDRESS:-temporal:7233}"
7+
NAMESPACE="${NAMESPACE:-default}"
8+
MAX_WAIT_TIME="${MAX_WAIT_TIME:-300}"
9+
10+
echo "=== Temporal Validation Script ==="
11+
echo "Temporal address: $TEMPORAL_ADDRESS"
12+
echo "Namespace: $NAMESPACE"
13+
echo "Max wait time: ${MAX_WAIT_TIME}s"
14+
echo
15+
16+
# Wait a bit for Temporal to be ready
17+
echo "Waiting for Temporal server to be accessible..."
18+
sleep 15
19+
20+
# Check cluster health
21+
echo "=== Checking cluster health ==="
22+
if temporal operator cluster health --address "$TEMPORAL_ADDRESS"; then
23+
echo "✓ Cluster health check passed"
24+
else
25+
echo "✗ Cluster health check failed"
26+
exit 1
27+
fi
28+
29+
# Describe namespace to verify it exists and is accessible
30+
echo
31+
echo "=== Verifying namespace '$NAMESPACE' ==="
32+
if temporal operator namespace describe --namespace "$NAMESPACE" --address "$TEMPORAL_ADDRESS" > /dev/null 2>&1; then
33+
echo "✓ Namespace '$NAMESPACE' is accessible"
34+
else
35+
echo "✗ Namespace '$NAMESPACE' not found or not accessible"
36+
exit 1
37+
fi
38+
39+
# Try to start a simple workflow to validate full functionality
40+
echo
41+
echo "=== Testing workflow execution ==="
42+
WORKFLOW_ID="validation-test-$(date +%s)"
43+
TASK_QUEUE="validation-queue"
44+
45+
# Start a workflow (this will fail gracefully if no workers, but proves the system is working)
46+
if temporal workflow start \
47+
--workflow-id "$WORKFLOW_ID" \
48+
--type "NonExistentWorkflow" \
49+
--task-queue "$TASK_QUEUE" \
50+
--namespace "$NAMESPACE" \
51+
--address "$TEMPORAL_ADDRESS" \
52+
--workflow-execution-timeout 10s 2>&1 | grep -q "Started"; then
53+
echo "✓ Successfully initiated workflow (proves Temporal is functional)"
54+
55+
# Clean up - terminate the workflow since it won't complete
56+
temporal workflow terminate \
57+
--workflow-id "$WORKFLOW_ID" \
58+
--namespace "$NAMESPACE" \
59+
--address "$TEMPORAL_ADDRESS" \
60+
--reason "Validation complete" > /dev/null 2>&1 || true
61+
else
62+
# Check if it's just missing workers (which is okay for validation)
63+
if temporal workflow describe \
64+
--workflow-id "$WORKFLOW_ID" \
65+
--namespace "$NAMESPACE" \
66+
--address "$TEMPORAL_ADDRESS" > /dev/null 2>&1; then
67+
echo "✓ Workflow was accepted by server (functional)"
68+
temporal workflow terminate \
69+
--workflow-id "$WORKFLOW_ID" \
70+
--namespace "$NAMESPACE" \
71+
--address "$TEMPORAL_ADDRESS" \
72+
--reason "Validation complete" > /dev/null 2>&1 || true
73+
else
74+
echo "✗ Failed to start workflow"
75+
exit 1
76+
fi
77+
fi
78+
79+
echo
80+
echo "=== All validation checks passed! ==="
81+
exit 0

0 commit comments

Comments
 (0)