Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions .github/workflows/python-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,19 @@ jobs:
# ставит её при первом `uv sync`.
- uses: astral-sh/setup-uv@v10.0.1

# Стили собирает tailwind, поэтому в питоновом репозитории появился node.
# pnpm ставится до setup-node: тот с cache: pnpm ищет уже существующий
# бинарь, чтобы вычислить путь к store.
- uses: pnpm/action-setup@v6
- uses: actions/setup-node@v7
with:
node-version: 26.x
cache: pnpm

- name: Install
run: make install
- name: Build css
run: make build-css
- name: Run linter
run: make lint
- name: Run tests
Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,6 @@ dist/
.pytest_cache/
*.sqlite
.ruff_cache/
node_modules/
# css собирается из assets/css/source.css целью build-css
app/static/css/main.css
6 changes: 6 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,7 +1,13 @@
PORT ?= 8000

setup: install build-css

install:
uv sync
pnpm install

build-css:
pnpm run build:css

dev:
uv run fastapi dev app/main.py --port $(PORT)
Expand Down
4 changes: 4 additions & 0 deletions app/main.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from contextlib import asynccontextmanager

from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles
from starlette.middleware.sessions import SessionMiddleware

from app.database import prepare_database
Expand All @@ -22,6 +23,9 @@ async def lifespan(_app: FastAPI):
session_cookie="school_session",
)

# Собранный css лежит в app/static: его пишет tailwind из assets/css/source.css.
app.mount("/static", StaticFiles(directory="app/static"), name="static")

app.include_router(root.router)
app.include_router(courses.router)
app.include_router(users.router)
7 changes: 7 additions & 0 deletions assets/css/source.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
@import "tailwindcss";

/* Классы Tailwind живут в шаблонах jinja, а точка входа css лежит вне их
каталога. Без явного источника сборка проходит зелёной, `main.css` оказывается
на месте, и страница приходит без стилей: по выводу сборки это не отличить от
рабочего состояния. */
@source "../../templates";
12 changes: 12 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"name": "fastapi-school-app",
"private": true,
"packageManager": "pnpm@11.20.0",
"scripts": {
"build:css": "tailwindcss --input assets/css/source.css --output app/static/css/main.css --minify"
},
"devDependencies": {
"@tailwindcss/cli": "^4.3.3",
"tailwindcss": "^4.3.3"
}
}
Loading