Создайте Свой GitHub Action за 5 Минут на Python

Простые GitHub Actions на Python

Создание собственных GitHub Actions может выглядеть сложным - нужно разбираться с переменными окружения, входными/выходными параметрами, обработкой ошибок и многим другим. Но это может быть намного проще.

Библиотека github-custom-actions избавляет от всей рутины и предоставляет:

Вы просто пишете код на Python, а библиотека берет на себя всю интеграцию с GitHub Actions.

Давайте посмотрим, как легко создать свой action.

Пример: Валидатор Имени Ветки

Вот action, который проверяет соответствие имени ветки правилам вашей команды:

from github_custom_actions.action_base import ActionBase
from github_custom_actions.inputs_outputs import ActionInputs, ActionOutputs
import re

class ValidatorInputs(ActionInputs):
   pattern: str = "^(feature|bugfix|hotfix)/[a-z0-9-]+$"
   """Шаблон имени ветки (регулярное выражение)"""

class ValidatorOutputs(ActionOutputs):
   valid: str
   """Соответствует ли имя ветки шаблону"""

class BranchValidator(ActionBase):
   inputs: ValidatorInputs
   outputs: ValidatorOutputs

   def main(self):
       # Получаем имя текущей ветки из переменных окружения GitHub
       branch = self.env.github_ref_name
       
       # Проверяем соответствие имени ветки шаблону
       is_valid = bool(re.match(self.inputs.pattern, branch))
       self.outputs.valid = str(is_valid)

       # Создаем отчет используя шаблон
       self.summary.text = self.render("""
## Проверка Имени Ветки

Branch: `{{ branch }}`
Pattern: `{{ inputs.pattern }}`
Status: {{ "✅ Valid" if outputs.valid == "true" else "❌ Invalid" }}

""", branch=branch)

       if not is_valid:
           raise ValueError(f"Invalid branch name: {branch}")

if __name__ == "__main__":
   BranchValidator().run()

Используйте в вашем workflow:

name: Validate Branch
on: [push, pull_request]

jobs:
 check:
   runs-on: ubuntu-latest
   steps:
     - uses: ./
       with:
         pattern: '^(feature|bugfix|hotfix)/[a-z0-9-]+$'

Публикация в GitHub Marketplace

  1. Создайте репозиторий для вашего action с такой структурой:
    my-action/
      ├── action.yml       # Метаданные action
      ├── Dockerfile      # Используем образ Python и устанавливаем ваш action
      ├── requirements.txt # Включаем github-custom-actions
      └── main.py         # Ваш код action
    
  2. Добавьте в action.yml:
    name: 'Branch Name Validator'
    description: 'Validates branch names against pattern'
    inputs:
      pattern:
     description: 'Branch name pattern (regex)'
     required: true
     default: '^(feature|bugfix|hotfix)/[a-z0-9-]+$'
    outputs:
      valid:
     description: 'Whether branch name is valid'
    runs:
      using: 'docker'
      image: 'Dockerfile'
    
  3. Создайте Dockerfile:
    FROM python:3-slim
    COPY . .
    RUN pip install -r requirements.txt
    CMD ["python", "/main.py"]
    
  4. Опубликуйте в GitHub Marketplace

После этого любой сможет использовать ваш action:

- uses: your-github-name/your-action-repo@v1
  with:
    pattern: '^(feature|bugfix|hotfix)/[a-z0-9-]+$'