From 2fb03b6f30ba59c1afe96aa4fdf57f2898e023bc Mon Sep 17 00:00:00 2001 From: "alex.stanfield" <13949480+chaptersix@users.noreply.github.com> Date: Tue, 10 Mar 2026 17:14:18 -0500 Subject: [PATCH 1/2] fix: mount volume to writable path in docker-compose-dev The SQLite DB file could not be created at /data because the volume is root-owned but the container runs as the temporal user. Mount to /home/temporal instead, which is already owned by the temporal user. --- compose/docker-compose-dev.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/compose/docker-compose-dev.yml b/compose/docker-compose-dev.yml index e074929..d4aa5e6 100644 --- a/compose/docker-compose-dev.yml +++ b/compose/docker-compose-dev.yml @@ -6,8 +6,8 @@ services: - 7233:7233 - 8233:8233 volumes: - - temporal-data:/data - command: server start-dev --ip 0.0.0.0 --db-filename /data/temporal.db + - temporal-data:/home/temporal + command: server start-dev --ip 0.0.0.0 --db-filename /home/temporal/temporal.db volumes: temporal-data: From 269d45d2018c936e911dd7a2a80d5412cf006f79 Mon Sep 17 00:00:00 2001 From: "alex.stanfield" <13949480+chaptersix@users.noreply.github.com> Date: Tue, 10 Mar 2026 17:16:25 -0500 Subject: [PATCH 2/2] test: add CI job for docker-compose-dev.yml Adds a compose-dev-test job that validates the dev compose file starts correctly and Temporal is functional. This would have caught the SQLite permission issue. --- .github/workflows/compose.yaml | 52 ++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/.github/workflows/compose.yaml b/.github/workflows/compose.yaml index 3d8f2be..ad7998e 100644 --- a/.github/workflows/compose.yaml +++ b/.github/workflows/compose.yaml @@ -78,6 +78,58 @@ jobs: 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