Использование действий GitHub для создания, тестирования и публикации пакета Python (2 части серии)
Добро пожаловать назад! Давайте будем использовать действия GitHub для развертывания вашего блестящего нового пакета для Pypi!
Основная настройка
У нас еще нет репозитория Git, поэтому создайте один:
git init
Далее давайте создадим Репозиторий GitHub
Как только вы закончите с этим, давайте связым вашему репозиторию Git на ваш репозиторий GitHUB:
git remote add origin "https://github.com/USERNAME/REPOSITORY.git"
Далее мы будем совершать и толкать наши изменения:
git add . git commit -m "First Commit!" git push origin master
Вы должны увидеть ваш код в прямом эфире на вашем репозитории GitHUB.
Настройка вашего первого действия
Действие GitHub – это файл yaml. Он может быть отредактирован в любом редакторе кода, но я рекомендую собственный редактор Github, потому что он обеспечивает IntelliSense при навеске Ctrl + Пространство Отказ
Создать действие, отправляйтесь на Действия вкладка. Я создам действие для автоматического тестирования и публиковать наш пакет на TestPypi Всякий раз, когда мы подтолкнули наш код в главную ветку.
Мы можем выбрать шаблон действий, или мы можем начать с нуля. Я собираюсь выбрать последний, поэтому нажмите Установите рабочий процесс самостоятельно ссылка.
Это создаст новый файл, который вы можете назвать все возможное. Я назову это Test-and-upload-to-testpi.yml Отказ Убедитесь, что у него есть расширение ямл или yml. иначе GitHub не будет запускать его.
Это должен быть стартовый код, который вы получаете:
# This is a basic workflow to help you get started with Actions
name: CI
# Controls when the action will run.
on:
# Triggers the workflow on push or pull request events but only for the master branch
push:
branches: [ master ]
pull_request:
branches: [ master ]
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# This workflow contains a single job called "build"
build:
# The type of runner that the job will run on
runs-on: ubuntu-latest
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- uses: actions/checkout@v2
# Runs a single command using the runners shell
- name: Run a one-line script
run: echo Hello, world!
# Runs a set of commands using the runners shell
- name: Run a multi-line script
run: |
echo Add other actions to build,
echo test, and deploy your project.
Анатомия Действия GitHub
Давайте пройдемся через этот файл пошаговый.
имя : Это имя вашего действия. Он появится на вкладке Действия под этим именем
на : Контролирует, какие события вызывают ваше действие. В настоящее время действие работает, когда есть запрос на тягу или толчок на Мастер Филиал, но есть и другие мероприятия, как и создание релизов, проблем, добавления сотрудников и т. Д. Рабочий процесс-Диспетчер Событие добавит кнопку на вкладке «Действия», которые позволят вам запустить это действие.
Работа : Определяет работу в действии. Здесь у нас есть одна работа под названием построить Отказ
Внутри работы постройки:
пробега : ОС для работы. Поддерживает Ubuntu-Neighle , Windows-Neighle и MacOS-Neighle Отказ
Шаги : Шаги в вашей работе.
Внутри шагов
использует : Другое действие GitHub для использования (это необязательно)
Имя : Имя шага. Появится на вкладке Действия.
Беги : Команда для запуска.
Трубопровод ( | ), что вы видите после команды запуска в некоторых шагах, это Multi-line string string yaml. Это позволяет строку проводить несколько строк, каждую новую строку, указывающую новую команду.
Специальные действия
Вы можете увидеть, что наши действия используют версию v2 Действия/Оформление . Это действие, сделанное кем-то еще, и мы используем его. Он проверяет наш код и копирует его на машину, поэтому мы можем использовать его. Есть несколько других действий, таких как доступные в Github Marketplace
Создавая наше действие
У нас будет 5 основных шагов в наших действиях:
- Оформить заказ наш код
- Установите Python
- Установите наши зависимости
- Испытайте, используя Unittest.
- Опубликовать для TestPypi
Для первых двух шагов у нас есть действия, которые сделают это для нас, а именно Действие/Оформление @ v2 и Действия/Setup-Python @ v2 Отказ
Я хочу, чтобы действие было запущено, когда мы подтолкнули наш код в главную ветку, и я также хочу иметь кнопку на вкладке «Действия», чтобы вручную проверить и загрузить для меня проект.
Вот окончательный код для наших действий:
# This is a basic workflow to help you get started with Actions
name: Test & Upload to TestPyPI
# Controls when the action will run.
on:
# Triggers the workflow on push to the master branch
push:
branches: [ master ]
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# This workflow contains a single job called "build"
build:
# The type of runner that the job will run on
runs-on: ubuntu-latest
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- uses: actions/checkout@v2
# Sets up python3
- uses: actions/setup-python@v2
with:
python-version: 3.8
# Installs and upgrades pip, installs other dependencies and installs the package from setup.py
- name: "Installs and upgrades pip, installs other dependencies and installs the package from setup.py"
run: |
# Upgrade pip
python3 -m pip install --upgrade pip
# Install build deps
python3 -m pip install setuptools wheel twine
# If requirements.txt exists, install from it
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
# Install the package from setup.py
python3 setup.py install
# Tests with unittest
- name: Test with unittest
run: |
cd tests
python3 -m unittest discover
cd ..
# Upload to TestPyPI
- name: Build and Upload to TestPyPI
run: |
python3 setup.py sdist bdist_wheel
python3 -m twine upload dist/*
env:
TWINE_USERNAME: __token__
TWINE_PASSWORD: ${{ secrets.TWINE_TEST_TOKEN }}
TWINE_REPOSITORY: testpypi
Что такое секреты?
Секреты являются способом прохождения переменных среды для наших действий. В этом случае мы использовали секрет Twine_test_token держать наш ключ API.
Создание секрета
Перейдите на вкладку «Настройки» и выберите «Секреты». Нажмите Создать секрет сверху справа и поставьте Twine_test_token Для имени и вставьте ключ вашей API для значения.
Теперь сохраните файл и просмотрите свои действия работы с вкладки Действия!
На нашей вкладке Действия мы видим, что это действие работает:
После исправления небольшой ошибки с нашими тестами , вы можете увидеть, что наши действия потерпели неудачу, указанные значком Red X
Это потому, что всякий раз, когда мы загружаем пакет на Pypi (или TestPypi), мы не можем загрузить пакет одной и той же версии дважды, Итак, давайте вернемся к Setup.py.
И наши действия успешно выполнены!
Загрузка в Pypi
Мы сделали TEATPYPI. А как насчет настоящего индекса пакета Python? Я не собираюсь загружать пакет каждый раз, когда мы нажимаем Master, так как могут быть некоторые изменения, не готовы к производству. Вместо этого я собираюсь использовать функцию релизов Github.
Создайте новое действие, нажав новый рабочий процесс на вкладке «Действия» и следуя тем же этапам, что и ранее. На этот раз я называю свои действия Загрузить в PIP.yml
Вот мои действия:
# This is a basic workflow to help you get started with Actions
name: Upload to PIP
# Controls when the action will run.
on:
# Triggers the workflow when a release is created
release:
types: [created]
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# This workflow contains a single job called "upload"
upload:
# The type of runner that the job will run on
runs-on: ubuntu-latest
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- uses: actions/checkout@v2
# Sets up python
- uses: actions/setup-python@v2
with:
python-version: 3.8
# Install dependencies
- name: "Installs dependencies"
run: |
python3 -m pip install --upgrade pip
python3 -m pip install setuptools wheel twine
# Build and upload to PyPI
- name: "Builds and uploads to PyPI"
run: |
python3 setup.py sdist bdist_wheel
python3 -m twine upload dist/*
env:
TWINE_USERNAME: __token__
TWINE_PASSWORD: ${{ secrets.TWINE_TOKEN }}
Добавляя другой секрет
Давайте добавим еще один секрет, на этот раз называется Twine_token И дайте ему ценность вашего токена Pypi API.
Тестирование нашего действия
Давайте создадим новый выпуск, перейдя в раздел «Выпуск» (чтобы сделать это, нажмите «Новый релиз» на правой стороне вкладки «Основной код»).
Я предлагаю назвать тег с версией в setup.py префикс с V Отказ
И наш проект успешно загружен в Pypi!
Поздравляем 🥳! Вы только что узнали основы действий GitHub, Pypi Projects и DEVOPS! Дайте себе погладить на спину!
Застрявший? Github repo Pypi Github Действия QuickStart Загрузка пакета на Pypi
Если вы наслаждались этим постом, и хотели бы увидеть больше, дайте мне знать в комментариях, а также следуйте за мной для большего количества контента, как это 😀
Использование действий GitHub для создания, тестирования и публикации пакета Python (2 части серии)
Оригинал: “https://dev.to/arnu515/create-a-pypi-pip-package-test-it-and-publish-it-using-github-actions-part-2-1o83”