feat: initial FlowBoard implementation #1
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: CI | ||
| on: | ||
| push: | ||
| branches: [main] | ||
| pull_request: | ||
| branches: [main] | ||
| permissions: | ||
| contents: read | ||
| jobs: | ||
| test: | ||
| runs-on: ubuntu-latest | ||
| strategy: | ||
| matrix: | ||
| python-version: ["3.12", "3.13"] | ||
| steps: | ||
| - uses: actions/checkout@v4 | ||
| - name: Set up Python ${{ matrix.python-version }} | ||
| uses: actions/setup-python@v5 | ||
| with: | ||
| python-version: ${{ matrix.python-version }} | ||
| - name: Install dependencies | ||
| run: pip install -e ".[dev]" httpx | ||
| - name: Lint with ruff | ||
| run: ruff check src/ tests/ | ||
| - name: Run tests | ||
| run: pytest --cov=flowboard --cov-report=xml -v --junitxml=test-results.xml | ||
| - name: i18n coverage check | ||
| run: python -c " | ||
| import json, sys; | ||
| en = set(json.load(open('src/flowboard/i18n/en.json')).keys()); | ||
| pl = set(json.load(open('src/flowboard/i18n/pl.json')).keys()); | ||
| missing = en - pl; | ||
| [print(f'Missing in pl.json: {k}') for k in sorted(missing)]; | ||
| sys.exit(1) if missing else print('i18n: all keys present') | ||
| " | ||
| - name: Generate demo dashboard | ||
| run: flowboard demo --output output/demo.html | ||
| - name: Verify demo output exists | ||
| run: test -f output/demo.html | ||
| - name: Upload test results | ||
| uses: actions/upload-artifact@v4 | ||
| if: always() | ||
| with: | ||
| name: test-results-${{ matrix.python-version }} | ||
| path: test-results.xml | ||
| docker: | ||
| runs-on: ubuntu-latest | ||
| needs: test | ||
| if: github.ref == 'refs/heads/main' | ||
| steps: | ||
| - uses: actions/checkout@v4 | ||
| - name: Build Docker image | ||
| run: docker build -t flowboard:latest . | ||
| - name: Smoke test container | ||
| run: | | ||
| docker run -d --name fb-test -p 8084:8084 flowboard:latest serve --host 0.0.0.0 --port 8084 | ||
| sleep 5 | ||
| curl -sf http://localhost:8084/health/live || exit 1 | ||
| docker stop fb-test | ||