Упражнение. Использование GitHub Script в GitHub Actions

Завершено

В этом уроке вы узнаете больше о том, как использовать скрипт GitHub для улучшения рабочего процесса.

Добавление проблем на доску проекта

Помимо создания комментариев и открытия запросов на вытягивание, octokit/rest.js можно также использовать для управления проектами GitHub. В следующем примере кода создается рабочий процесс, который запускается всякий раз, когда любой пользователь добавляет новую проблему в репозиторий. Это добавляет задачу на доску проекта, что упрощает вам сортировку и приоритизацию работы.

name: Learning GitHub Script
on:
  issues:
    types: [opened]
jobs:
  comment:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/github-script@0.8.0
      with:
        github-token: {% raw %}${{secrets.GITHUB_TOKEN}}{% endraw %}
        script: |
            github.issues.createComment({
            issue_number: context.issue.number,
            owner: context.repo.owner,
            repo: context.repo.repo,
            body: "🎉 You've created this issue comment using GitHub Script!!!"
            })
            github.projects.createCard({
            column_id: {{columnID}},
            content_id: context.payload.issue.id,
            content_type: "Issue"
            });

Первый раздел этого рабочего процесса создает комментарий при создании новой проблемы, которая рассматривается в предыдущем уроке. В следующей части на основе проблемы создается карточка, которая добавляется на доску проекта.

Разделение рабочего процесса на шаги

Одно из преимуществ использования действий заключается в том, что можно разделить задания на меньшие единицы работы, называемые шагами. В предыдущем примере рабочего процесса можно разделить рабочий процесс на два шага.

Одним из преимуществ разделения текущего рабочего процесса на несколько этапов является то, что это позволяет использовать выражения для применения логики. С помощью шагов можно создавать правила, описанные в том случае, если выполнение шагов разрешено, и может помочь оптимизировать выполнение рабочего процесса.

Чтобы разделить пример рабочего процесса на шаги, выполните указанные ниже действия.

  • Присвойте каждому шагу имя, чтобы отслеживать его на вкладке "Действия ".
  • Используйте выражения, чтобы определить, должен ли шаг выполняться (необязательно).

В этом примере две задачи в исходном файле рабочего процесса разделены на отдельные шаги:

name: Learning GitHub Script
on:
  issues:
    types: [opened]
jobs:
  comment:
    runs-on: ubuntu-latest
    steps:
    - name: Comment on new issue
      uses: actions/github-script@0.8.0
      with:
        github-token: {% raw %}${{secrets.GITHUB_TOKEN}}{% endraw %}
        script: |
            github.issues.createComment({
            issue_number: context.issue.number,
            owner: context.repo.owner,
            repo: context.repo.repo,
            body: "🎉 You've created this issue comment using GitHub Script!!!"
            })
    - name: Add issue to project board
      if: contains(github.event.issue.labels.*.name, 'bug')
      uses: actions/github-script@0.8.0
      with:
        github-token: {% raw %}${{secrets.GITHUB_TOKEN}}{% endraw %}
        script: |
            github.projects.createCard({
            column_id: {{columnID}},
            content_id: context.payload.issue.id,
            content_type: "Issue"
            });

Каждый шаг включает в себя описательный name элемент, который также помогает отслеживать его на вкладке "Действия ".

Этот Add issue to project board шаг также содержит инструкцию if , указывающую, что проблема должна быть добавлена в доску проекта, только если она помечена bug.

Использование среды Node.js

GitHub Script также предоставляет доступ к полной Node.js среде. Хотя мы не рекомендуем использовать GitHub Script для записи логики для сложных действий, ее можно использовать для добавления дополнительных функций в API окто/rest.js.

Например, можно использовать Node.js для отображения руководства по вкладу при открытии проблемы. Вы можете использовать Node.js файловую систему для чтения файла и его использования в качестве текста комментария проблемы. Для доступа к файлам в репозитории включите действие actions/checkout в качестве первого шага рабочего процесса.

В следующем примере в файл рабочего процесса внесены следующие изменения:

  • action/checkout Добавляет действие для чтения файла шаблонного ответа, расположенного в.github/ISSUE_RESPONSES/comment.md
  • Добавляет JavaScript для использования модуля Node.js файловой системы для размещения содержимого шаблона ответа в качестве текста комментария проблемы
name: Learning GitHub Script
on:
  issues:
    types: [opened]
jobs:
  comment:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repo
        uses: actions/checkout@v2
      - name: Comment on new issue
        uses: actions/github-script@0.8.0
        with:
          github-token: {% raw %}${{secrets.GITHUB_TOKEN}}{% endraw %}
          script: |
             const fs = require('fs')
             const issueBody = fs.readFileSync(".github/ISSUE_RESPONSES/comment.md", "utf8")
             github.issues.createComment({
             issue_number: context.issue.number,
             owner: context.repo.owner,
             repo: context.repo.repo,
             body: issueBody
             })
      - name: Add issue to project board
        if: contains(github.event.issue.labels.*.name, 'bug')
        uses: actions/github-script@0.8.0
        with:
          github-token: {% raw %}${{secrets.GITHUB_TOKEN}}{% endraw %}
          script: |
            github.projects.createCard({
            column_id: {{columnID}},
            content_id: context.payload.issue.id,
            content_type: "Issue"
            });

Скрипт GitHub помог вам создать полный ответ на новую проблему. Этот ответ также основан на шаблоне в репозитории, поэтому легко изменить его. Наконец, вы также включили триггер, чтобы добавить проблему в доска проекта, чтобы вы могли легко обработать его для будущей работы.