Упражнение. Использование 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 также предоставляет доступ к полнофункциональной среде Node.js. Хотя скрипт GitHub не рекомендуется писать логику для сложных действий, его можно использовать для добавления дополнительных функций в API octo/rest.js.

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

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

  • action/checkout Добавляет действие для чтения файла шаблонного ответа, расположенного по адресу.github/ISSUE_COMMENT/comment.md
  • Добавляет JavaScript для использования модуля File System 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 помог вам создать полный ответ на новую проблему, открываемую. Этот ответ также основан на шаблоне в репозитории, поэтому в будущем легко измениться. Наконец, вы также включили триггер, чтобы добавить проблему в доска проекта, чтобы вы могли легко обработать его для будущей работы.