Переиспользуемые GitHub экшены

Параметр workflow_call позволяет создавать повторно используемые workflows, которые можно вызывать из других workflows в том же или других репозиториях.

Читайте также custom actions

Не буду размусоливать и перейду сразу к примерам.

Создание переиспользуемого workflow

Переиспользуемый workflow, который принимает входные данные и секреты создается следующим образом: (файл .github\workflows\reusable.yml):

name: Reusable Workflow

on:
  workflow_call:
	inputs:
	  username:
		required: true
		type: string
	secrets:
	  secret_token:
		required: true

jobs:
  build:
	runs-on: ubuntu-latest
	steps:
	  - run: echo "Hello, ${{ inputs.username }}!"
	  - run: echo "Using secret: ${{ secrets.secret_token }}."

Документация по workflow_call

Вызов переиспользуемого workflow

Теперь вызвать созданный workflow из другого workflow с передачей данных и секретов можно так:

name: Call Reusable Workflow

on:
  push:
	branches:
	  - main

jobs:
  invoke_reusable_workflow:
	uses: ./.github/workflows/reusable.yml
	with:
	  username: 'JohnDoe'
	secrets:
	  secret_token: ${{ secrets.MY_SECRET }}

Вызов из другого репозитория

Переиспользуем workflow из другого репозитория:

jobs:
  invoke_reusable_workflow:
	uses: my-org/my-repo/.github/workflows/reusable.yml@main
	with:
	  username: 'JaneDoe'
	secrets:
	  secret_token: ${{ secrets.MY_SECRET }}

Входные данные и секреты

Определение входных данных и секретов для reusable workflow:

on:
  workflow_call:
	inputs:
	  username:
		required: true
		type: string
	secrets:
	  api_token:
		required: true

Использование выходных данных

Workflow устанавливает выходные данные, которые могут быть использованы вызывающим workflow.

on:
  workflow_call:

jobs:
  calculate:
	runs-on: ubuntu-latest
	outputs:
	  result: ${{ steps.calculate_output.outputs.result }}
	steps:
	  - id: calculate_output
		run: echo "::set-output name=result::42"

Вызывающий workflow использует выходные данные reusable workflow.

jobs:
  use_output:
	uses: ./.github/workflows/reusable.yml
	outputs:
	  result: ${{ steps.calculate_output.outputs.result }}
	runs-on: ubuntu-latest
	steps:
	  - run: echo "The result is ${{ result }}"

Заключение

В этой заметке мы рассмотрели использование workflow_call в GitHub Actions для создания переиспользуемых workflows. Использование переиспользуемых workflows позволяет упростить процесс автоматизации, повысить эффективность, сократить дублирование кода и обеспечить соблюдение принципа DRY. Переиспользуемые workflows могут быть определены в одном репозитории и затем вызываться из других workflows в этом же или других репозиториях. Мы также рассмотрели, как передавать входные данные и секреты в такие workflows, а также как использовать выходные данные. Эти примеры и советы помогут вам настроить CI/CD-процессы в GitHub Actions для автоматизации и стандартизации работы над проектами. Использование GitHub Actions и workflow_call — это мощный способ улучшить поддержку и масштабируемость вашего проекта, особенно при управлении большим количеством репозиториев и процессов.