Skip to content

Commit 3b6e468

Browse files
committed
update
1 parent 86ca400 commit 3b6e468

File tree

2 files changed

+17
-97
lines changed

2 files changed

+17
-97
lines changed

.github/workflows/publish.yml

Lines changed: 7 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -5,45 +5,34 @@ on:
55
tags:
66
- 'v*' # Запускается при создании тега v*
77

8-
permissions:
9-
id-token: write # Необходимо для Trusted Publisher (OpenID Connect)
10-
contents: read # Необходимо для чтения кода репозитория
11-
128
jobs:
139
publish:
1410
runs-on: ubuntu-latest
15-
permissions:
16-
id-token: write
17-
contents: read
1811
environment:
19-
name: release
12+
name: pypi
2013
url: https://pypi.org/p/onlinesimru
21-
14+
2215
steps:
2316
- uses: actions/checkout@v4
24-
17+
2518
- name: Set up Python
2619
uses: actions/setup-python@v4
2720
with:
2821
python-version: '3.9'
29-
22+
3023
- name: Install dependencies
3124
run: |
3225
python -m pip install --upgrade pip
3326
pip install build twine
34-
27+
3528
- name: Build package
3629
run: |
3730
python -m build --wheel --sdist
38-
31+
3932
- name: Publish to PyPI
40-
# Для настройки Trusted Publisher:
41-
# 1. Перейдите по ссылке из предупреждения в логах
42-
# 2. Войдите в PyPI как владелец пакета
43-
# 3. Подтвердите настройку Trusted Publisher
44-
# 4. Используйте среду 'release' (не 'pypi')
4533
uses: pypa/gh-action-pypi-publish@release/v1
4634
with:
35+
password: ${{ secrets.PYPI_API_TOKEN }}
4736
skip-existing: true
4837

4938
- name: Create Release

DEPLOYMENT.md

Lines changed: 10 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,6 @@
22

33
## 🚀 Автоматическая публикация в PyPI через GitHub Actions
44

5-
### 📦 Современные стандарты упаковки
6-
7-
Этот проект использует современные стандарты Python упаковки:
8-
- **pyproject.toml** вместо setup.py
9-
- **SPDX лицензии** вместо устаревших классификаторов
10-
- **Современные инструменты сборки** (build, twine)
11-
- **GitHub Actions** для автоматизации
12-
135
### Как это работает
146

157
1. **Создается git тег** с версией (например, `v2.1.0`)
@@ -23,29 +15,16 @@
2315

2416
### 📋 Предварительная настройка (только один раз)
2517

26-
#### Шаг 1: Настройка Trusted Publisher (рекомендуется)
27-
28-
**Современный и безопасный способ:**
29-
30-
1. Запустите workflow в GitHub Actions (создайте тег)
31-
2. В логах найдите ссылку для создания Trusted Publisher
32-
3. Перейдите по ссылке и войдите в PyPI как владелец пакета
33-
4. Подтвердите настройку Trusted Publisher
34-
35-
**Альтернативный способ - API токен (устаревший):**
18+
#### Шаг 1: Создание API токена PyPI
3619

3720
1. Зайдите на [PyPI](https://pypi.org/) и войдите в свой аккаунт
3821
2. Перейдите в **Account settings****API tokens**
3922
3. Нажмите **Add API token**
4023
4. Выберите **Entire account (all projects)**
4124
5. Скопируйте созданный токен (выглядит как `pypi-...`)
4225

43-
#### Шаг 2: Настройка GitHub Secrets (только для API токенов)
44-
45-
**Если используете Trusted Publisher (рекомендуется):**
46-
- Секреты не нужны! 🎉
26+
#### Шаг 2: Настройка GitHub Secrets
4727

48-
**Если используете API токен (устаревший способ):**
4928
1. Перейдите в ваш GitHub репозиторий
5029
2. Нажмите **Settings****Secrets and variables****Actions**
5130
3. Нажмите **New repository secret**
@@ -56,25 +35,8 @@
5635
1. В том же разделе **Secrets and variables****Actions**
5736
2. Перейдите на вкладку **Environments**
5837
3. Нажмите **New environment**
59-
4. Назовите среду `release` (важно для Trusted Publisher!)
38+
4. Назовите среду `pypi`
6039
5. В разделе **Environment protection rules** можете добавить правила (опционально)
61-
6. **Рекомендуется**: Настроить правила для защиты от случайной публикации
62-
7. **Важно**: Убедитесь, что среда `release` доступна для workflow
63-
64-
#### Шаг 4: Проверка разрешений в workflow
65-
66-
Убедитесь, что в файле `.github/workflows/publish.yml` есть разрешения для OpenID Connect:
67-
68-
```yaml
69-
permissions:
70-
id-token: write # Необходимо для Trusted Publisher (OpenID Connect)
71-
contents: read # Необходимо для чтения кода репозитория
72-
```
73-
74-
**Важно**:
75-
- Без `id-token: write` Trusted Publisher не будет работать!
76-
- Разрешения должны быть на уровне workflow (не только на уровне job)
77-
- Это критически важно для OpenID Connect аутентификации
7840

7941
### 🔄 Процесс публикации новой версии
8042

@@ -159,18 +121,14 @@ git push origin v2.1.0
159121

160122
### ✅ Преимущества этого подхода
161123

162-
- 🔒 **Безопасность**: Использует Trusted Publishers вместо API токенов
124+
- 🔒 **Безопасность**: API токен хранится в GitHub Secrets
163125
- 🤖 **Автоматизация**: Не нужно вручную собирать и загружать
164-
- 🆕 **Современность**: Использует современные инструменты сборки и аутентификации
126+
- 🆕 **Современность**: Использует современные инструменты сборки
165127
- 📝 **Аудит**: Все действия логируются в GitHub Actions
166128
- 🎯 **Контроль**: Можно настроить правила для environment
167129
- 🏷️ **Теги**: Четкая связь между git тегами и версиями PyPI
168-
- 🚀 **Простота**: Не нужно управлять секретами и токенами
169130

170-
**⚠️ Важное напоминание**:
171-
- Каждая новая версия требует создания нового git тега. Без тега workflow не запустится!
172-
- **Название среды должно быть `release`** (не `pypi`) для корректной работы с Trusted Publisher
173-
- **Workflow должен иметь разрешения** `id-token: write` для работы с Trusted Publisher
131+
**⚠️ Важное напоминание**: Каждая новая версия требует создания нового git тега. Без тега workflow не запустится!
174132

175133
### 🚨 Troubleshooting
176134

@@ -181,19 +139,10 @@ git push origin v2.1.0
181139
4. Проверьте настройки в **Settings****Actions****General**
182140
5. **Помните**: workflow запускается только при создании новых тегов, не при коммитах
183141

184-
#### Если возникают предупреждения при сборке:
185-
1. **Проверьте формат лицензии** в `pyproject.toml` - используйте простую строку `license = "Apache-2.0"`
186-
2. **Уберите устаревшие классификаторы лицензии** - они больше не нужны при использовании SPDX выражения
187-
3. **Обновите setuptools** до версии >=77.0.0 для лучшей поддержки современных стандартов
188-
189142
#### Если публикация в PyPI не удалась:
190143
1. Проверьте логи в GitHub Actions
191-
2. **Для Trusted Publisher**: Убедитесь, что Trusted Publisher настроен в PyPI
192-
3. **Для API токена**: Убедитесь, что `PYPI_API_TOKEN` правильно настроен
193-
4. **Проверьте, что environment `release` создан** (не `pypi`!)
194-
5. **Если используете Trusted Publisher**: Убедитесь, что workflow запущен из правильного репозитория
195-
6. **Проверьте название среды**: должно быть `release` в Trusted Publisher
196-
7. **Проверьте разрешения OpenID Connect**: в workflow должно быть `permissions: id-token: write`
144+
2. Убедитесь, что `PYPI_API_TOKEN` правильно настроен
145+
3. Проверьте, что environment `pypi` создан
197146

198147
#### Если пакет не собирается:
199148
1. Проверьте синтаксис `pyproject.toml`
@@ -211,35 +160,17 @@ pip install build twine
211160
# Собрать пакет
212161
python -m build --wheel --sdist
213162

214-
# Загрузить в PyPI
215-
# Для Trusted Publisher: используйте GitHub Actions (рекомендуется)
216-
# Для API токена: настройте ~/.pypirc или используйте --username/--password
163+
# Загрузить в PyPI (требует настройки ~/.pypirc)
217164
python -m twine upload dist/*
218165
```
219166

220167
### 📚 Полезные ссылки
221168

222169
- [GitHub Actions Documentation](https://docs.github.com/en/actions)
223-
- [PyPI Trusted Publishers](https://docs.pypi.org/trusted-publishers/) ⭐ **Новое!**
224-
- [PyPI API Tokens](https://pypi.org/help/api-tokens/) (устаревший способ)
170+
- [PyPI API Tokens](https://pypi.org/help/api-tokens/)
225171
- [Python Packaging User Guide](https://packaging.python.org/)
226172
- [GitHub Releases](https://docs.github.com/en/repositories/releasing-projects-on-github)
227173

228-
### 🔄 Миграция с API токена на Trusted Publisher
229-
230-
Если у вас уже настроен API токен и вы хотите перейти на Trusted Publisher:
231-
232-
1. **Создайте новый тег** для запуска workflow
233-
2. **Настройте Trusted Publisher** по ссылке из логов
234-
3. **Удалите секрет** `PYPI_API_TOKEN` из GitHub Secrets
235-
4. **Убедитесь**, что workflow работает без предупреждений
236-
237-
**Преимущества миграции:**
238-
- 🔒 Более безопасно (нет токенов для хранения)
239-
- 🚀 Проще в настройке
240-
- 📱 Лучшая поддержка мобильных устройств
241-
- 🆕 Соответствие современным стандартам PyPI
242-
243174
---
244175

245176
**Теперь ваша публикация полностью автоматизирована! 🎉**

0 commit comments

Comments
 (0)