Skip to content

Port Docker Compose examples #1

Port Docker Compose examples

Port Docker Compose examples #1

Workflow file for this run

name: Test compose examples
on:
pull_request:
paths:
- 'compose/**'
- '.github/workflows/compose.yaml'
push:
branches:
- main
paths:
- 'compose/**'
- '.github/workflows/compose.yaml'
jobs:
lint-actions:
name: Lint GitHub Actions workflows
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- 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
steps:
- name: Print build information
run: 'echo head_ref: ${{ github.head_ref }}, ref: ${{ github.ref }}, compose: ${{ matrix.compose-file }}'
- uses: actions/checkout@v4
- name: Start compose stack
working-directory: compose
run: docker-compose -f ${{ matrix.compose-file }} up -d
- name: Wait for services to be healthy
working-directory: compose
run: |
echo "Waiting up to 5 minutes for services to be healthy..."
timeout 300 bash -c 'until docker-compose -f ${{ matrix.compose-file }} ps | grep -E "(healthy|Started)"; do sleep 5; done' || {
echo "Services failed to become healthy"
docker-compose -f ${{ matrix.compose-file }} ps
docker-compose -f ${{ matrix.compose-file }} logs
exit 1
}
- name: Check admin-tools logs
working-directory: compose
run: |
docker-compose -f ${{ matrix.compose-file }} logs temporal-admin-tools
if docker-compose -f ${{ matrix.compose-file }} logs temporal-admin-tools | grep -i "error" | grep -v "unable to describe namespace"; then
echo "Found errors in admin-tools logs"
exit 1
fi
- name: Check namespace creation logs
working-directory: compose
run: |
docker-compose -f ${{ matrix.compose-file }} logs temporal-create-namespace
if ! docker-compose -f ${{ matrix.compose-file }} logs temporal-create-namespace | grep -q "Namespace 'default' created"; then
echo "Namespace creation failed"
exit 1
fi
- name: Verify temporal server is healthy
working-directory: compose
run: |
docker-compose -f ${{ matrix.compose-file }} exec -T temporal temporal operator cluster health || {
echo "Temporal server health check failed"
docker-compose -f ${{ matrix.compose-file }} logs temporal
exit 1
}
- name: Cleanup
if: always()
working-directory: compose
run: docker-compose -f ${{ matrix.compose-file }} down -v
compose-tls-test:
name: Test docker-compose-tls.yml
needs: lint-actions
runs-on: ubuntu-latest
steps:
- name: Print build information
run: 'echo head_ref: ${{ github.head_ref }}, ref: ${{ github.ref }}, compose: docker-compose-tls.yml'
- uses: actions/checkout@v4
- 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: Wait for services to be healthy
working-directory: compose
run: |
echo "Waiting up to 5 minutes for services to be healthy..."
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' || {
echo "Services failed to become healthy"
COMPOSE_PROJECT_NAME=tls_test docker-compose -f docker-compose-tls.yml ps
COMPOSE_PROJECT_NAME=tls_test docker-compose -f docker-compose-tls.yml logs
exit 1
}
- name: Check admin-tools logs
working-directory: compose
run: |
COMPOSE_PROJECT_NAME=tls_test docker-compose -f docker-compose-tls.yml logs temporal-admin-tools-setup
if COMPOSE_PROJECT_NAME=tls_test docker-compose -f docker-compose-tls.yml logs temporal-admin-tools-setup | grep -i "error" | grep -v "unable to describe namespace"; then
echo "Found errors in admin-tools logs"
exit 1
fi
- name: Check namespace creation logs
working-directory: compose
run: |
COMPOSE_PROJECT_NAME=tls_test docker-compose -f docker-compose-tls.yml logs temporal-create-namespace
if ! COMPOSE_PROJECT_NAME=tls_test docker-compose -f docker-compose-tls.yml logs temporal-create-namespace | grep -q "Namespace 'default' created"; then
echo "Namespace creation failed"
exit 1
fi
- name: Cleanup
if: always()
working-directory: compose
run: |
COMPOSE_PROJECT_NAME=tls_test docker-compose -f docker-compose-tls.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
steps:
- name: Print build information
run: 'echo head_ref: ${{ github.head_ref }}, ref: ${{ github.ref }}, compose: docker-compose-multirole.yaml'
- uses: actions/checkout@v4
- name: Start multirole compose stack
working-directory: compose
run: docker-compose -f docker-compose-multirole.yaml up -d
- name: Wait for services to be healthy
working-directory: compose
run: |
echo "Waiting up to 5 minutes for services to be healthy..."
timeout 300 bash -c 'until docker-compose -f docker-compose-multirole.yaml ps | grep -E "(healthy|Started)"; do sleep 5; done' || {
echo "Services failed to become healthy"
docker-compose -f docker-compose-multirole.yaml ps
docker-compose -f docker-compose-multirole.yaml logs
exit 1
}
- name: Check setup logs
working-directory: compose
run: |
docker-compose -f docker-compose-multirole.yaml logs temporal-setup
if docker-compose -f docker-compose-multirole.yaml logs temporal-setup | grep -i "error" | grep -v "unable to describe namespace"; then
echo "Found errors in setup logs"
exit 1
fi
- 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: Cleanup
if: always()
working-directory: compose
run: docker-compose -f docker-compose-multirole.yaml down -v