name: Compose Smoke Test # Uses only this repository's Compose files and .env.example. on: push: branches: - main paths: - backend/** - frontend/** - docker/compose*.yml - .env.example - .gitea/workflows/test-compose.yml pull_request: types: - opened - synchronize paths: - backend/** - frontend/** - docker/compose*.yml - .env.example - .gitea/workflows/test-compose.yml # A new push supersedes the run still queued for the commit before it. Without # this each commit leaves its own run in the queue and a runner that was offline # for a while works through a backlog of results nobody will read. concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true env: # compose.ci.yml drops the fixed container_names and host ports so this job # can share a runner host with the Playwright shards. COMPOSE_FILE: docker/compose.yml:docker/compose.dev.yml:docker/compose.ci.yml # Own project name so this job's `down -v` cannot reach another stack. COMPOSE_PROJECT_NAME: fluksio-app-ci-compose jobs: test-compose: runs-on: ubuntu-latest timeout-minutes: 30 steps: - name: Checkout uses: actions/checkout@v4 - name: Write .env run: cp .env.example .env # The image serves the dashboard too; its SPA fallback (fluksio/spa.py) # is the part that breaks silently. - run: docker compose build backend - run: docker compose down -v --remove-orphans # Redis comes along as a depends_on; --wait blocks on the image's # healthcheck (backend/Dockerfile), which is also what proves the schema # was created before anything served a request. - run: docker compose up -d --wait backend # Nothing is published on the host (compose.ci.yml), so the checks run # from inside the backend container, which has python and no curl. - name: Backend is up run: docker compose exec -T backend python -c "import urllib.request; urllib.request.urlopen('http://localhost:8000/api/v1/utils/health-check/')" - name: Dashboard is up run: docker compose exec -T backend python -c "import urllib.request; urllib.request.urlopen('http://localhost:8000/')" - name: An authenticated route serves the SPA shell run: docker compose exec -T backend python -c "import urllib.request; assert b'