Использование действий 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”