73 lines
2.8 KiB
YAML
73 lines
2.8 KiB
YAML
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'<div id=\"root\"' in urllib.request.urlopen('http://localhost:8000/flows').read()"
|
|
- name: Container logs
|
|
# `up --wait` reports only that a container exited, never why. Without
|
|
# this the whole failure is one line and the reason dies with the stack
|
|
# the teardown below removes.
|
|
if: failure()
|
|
run: docker compose logs --no-color --tail 200
|
|
- name: Tear down
|
|
if: always()
|
|
run: docker compose down -v --remove-orphans
|