Skip to content

Commit 041be43

Browse files
mokevninclaude
andauthored
chore: привести инфраструктуру к канону кампании (#28)
Версия рантайма переезжает в .python-version и берётся оттуда uv-ом, поэтому setup-python из CI убран, requires-python поднят с 3.10 до 3.14. В Dockerfile .python-version добавлен в COPY рядом с манифестом: иначе uv sync внутри образа разрешил бы версию иначе, чем CI. В dependabot экосистема pip заменена на uv и добавлен блок docker, добавлен линт заголовка PR. Цель test и правило per-file-ignores для tests/*.py убраны: каталога tests в репозитории нет, то есть make test падал всегда, а в CI гонялся только линтер. Тестов у примера и не предполагается, каждый шаг курса это отдельная ветка-снимок. Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
1 parent e14f3ca commit 041be43

8 files changed

Lines changed: 59 additions & 210 deletions

File tree

.github/dependabot.yml

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,39 @@
11
version: 2
22
updates:
3+
# Экосистема uv покрывает и pyproject.toml, и uv.lock. Отдельный блок pip на
4+
# том же каталоге давал бы вторую пачку PR на те же зависимости.
35
- package-ecosystem: "uv"
46
directory: "/"
57
schedule:
68
interval: "monthly"
79
open-pull-requests-limit: 1
10+
labels: ["dependencies", "automated"]
11+
commit-message:
12+
prefix: "chore"
813
groups:
9-
all-uv-dependencies:
10-
patterns:
11-
- "*"
14+
uv-all:
15+
patterns: ["*"]
1216

13-
- package-ecosystem: "docker"
17+
- package-ecosystem: "github-actions"
1418
directory: "/"
1519
schedule:
1620
interval: "monthly"
1721
open-pull-requests-limit: 1
22+
labels: ["dependencies", "automated"]
23+
commit-message:
24+
prefix: "chore"
1825
groups:
19-
all-docker-dependencies:
20-
patterns:
21-
- "*"
26+
github-actions-all:
27+
patterns: ["*"]
2228

23-
- package-ecosystem: "github-actions"
29+
- package-ecosystem: "docker"
2430
directory: "/"
2531
schedule:
2632
interval: "monthly"
2733
open-pull-requests-limit: 1
34+
labels: ["dependencies", "automated"]
35+
commit-message:
36+
prefix: "chore"
2837
groups:
29-
all-github-actions-dependencies:
30-
patterns:
31-
- "*"
38+
docker-all:
39+
patterns: ["*"]

.github/workflows/pr-title.yml

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
name: PR Title
2+
3+
# Заголовок PR обязан быть conventional commit: при squash-мерже он становится
4+
# сообщением коммита, а по нему release-please определяет, какой разряд версии
5+
# поднять. Проверка отдельных коммитов ветки намеренно не делается, чтобы не
6+
# мешать работе внутри PR.
7+
on:
8+
pull_request_target:
9+
types:
10+
- opened
11+
- edited
12+
- synchronize
13+
- reopened
14+
15+
permissions:
16+
pull-requests: read
17+
18+
jobs:
19+
lint:
20+
runs-on: ubuntu-latest
21+
steps:
22+
- uses: amannn/action-semantic-pull-request@v6
23+
env:
24+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

.github/workflows/python-ci.yml

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,20 +15,19 @@ jobs:
1515
steps:
1616
- uses: actions/checkout@v7
1717

18-
- name: Set up Python
19-
uses: actions/setup-python@v7
20-
with:
21-
python-version: "3.13"
22-
23-
- name: Install uv
24-
uses: astral-sh/setup-uv@v7
25-
26-
- name: Install dependencies
27-
run: uv sync
28-
29-
- name: Lint
18+
# setup-python не нужен: версию питона держит .python-version, и uv сам
19+
# ставит её при первом `uv sync`. Единый источник версии, поэтому раннер
20+
# и образ кита не могут разойтись.
21+
- uses: astral-sh/setup-uv@v10.0.0
22+
23+
- name: Install
24+
run: make install
25+
- name: Run linter
3026
run: make lint
3127

28+
# Тестов у примера нет: каждый шаг курса это отдельная ветка-снимок
29+
# приложения, а не покрытый тестами проект. Поэтому в CI только линтер.
30+
3231
deploy:
3332
needs: build
3433
runs-on: ubuntu-latest

.python-version

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
3.14

Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ ENV UV_COMPILE_BYTECODE=1 \
1313

1414
WORKDIR /app
1515

16-
COPY pyproject.toml uv.lock ./
16+
COPY pyproject.toml uv.lock .python-version ./
1717

1818
RUN uv sync --frozen --no-dev --no-install-project
1919

Makefile

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,7 @@ lint:
77
uv run ruff check .
88
uv run ruff format --check .
99

10-
test:
11-
uv run pytest -vv tests
12-
13-
check: test lint
10+
check: install lint
1411

1512
run:
1613
uv run flask --app example --debug run --host 0.0.0.0 --port $(PORT)

pyproject.toml

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ version = "0.1.0"
44
description = "A simple Flask app"
55
readme = "README.md"
66
license = { text = "ISC" }
7-
requires-python = ">=3.10"
7+
requires-python = ">=3.14"
88
dependencies = [
99
"flask>=3.1.1",
1010
"gunicorn>=23.0.0",
@@ -31,8 +31,5 @@ exclude = [
3131
[tool.ruff.lint]
3232
select = ["E", "F", "I"]
3333

34-
[tool.ruff.lint.per-file-ignores]
35-
"tests/*.py" = ["S101"]
36-
3734
[tool.ruff.format]
3835
quote-style = "double"

uv.lock

Lines changed: 1 addition & 178 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)