Skip to content

Port Docker Compose examples #8

Port Docker Compose examples

Port Docker Compose examples #8

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'
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: 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
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: 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
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: 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