Skip to main content

Issue の作成をスケジュールする

GitHub Actions を使用して、毎日の会議や四半期ごとのレビューなどの Issue を定期的に作成できます。

はじめに

このチュートリアルでは、GitHub CLIを使用して定期的にissueを作成する方法を示します。 たとえば、Issue を毎週作成して Team 会議のアジェンダとして使用できます。 GitHub CLI について詳しくは、「ワークフローで GitHub CLI を使用する」をご覧ください。

このチュートリアルでは、まず GitHub CLI を使用するワークフロー ファイルを作成します。 次に、ニーズに合わせてワークフローをカスタマイズします。

ワークフローの作成

  1. このプロジェクト管理ワークフローを適用したいリポジトリを選択してください。 書き込みアクセス権を持つ既存のリポジトリを利用することも、新しいリポジトリを作成することもできます。 リポジトリの作成について詳しくは、「新しいリポジトリの作成」をご覧ください。

  2. リポジトリに .github/workflows/YOUR_WORKFLOW.yml というファイルを作成します (YOUR_WORKFLOW は任意の名前に置き換えます)。 これがワークフローファイルです。 GitHub で新しいファイルを作成する方法について詳しくは、「新しいファイルの作成」を参照してください。

  3. 次の YAML コンテンツをワークフローファイルにコピーします。

    YAML
    name: Weekly Team Sync
    on:
      schedule:
        - cron: 20 07 * * 1
    
    jobs:
      create_issue:
        name: Create team sync issue
        runs-on: ubuntu-latest
        permissions:
          issues: write
        steps:
          - name: Create team sync issue
            run: |
              if [[ $CLOSE_PREVIOUS == true ]]; then
                previous_issue_number=$(gh issue list \
                  --label "$LABELS" \
                  --json number \
                  --jq '.[0].number')
                if [[ -n $previous_issue_number ]]; then
                  gh issue close "$previous_issue_number"
                  gh issue unpin "$previous_issue_number"
                fi
              fi
              new_issue_url=$(gh issue create \
                --title "$TITLE" \
                --assignee "$ASSIGNEES" \
                --label "$LABELS" \
                --body "$BODY")
              if [[ $PINNED == true ]]; then
                gh issue pin "$new_issue_url"
              fi
            env:
              GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
              GH_REPO: ${{ github.repository }}
              TITLE: Team sync
              ASSIGNEES: monalisa,doctocat,hubot
              LABELS: weekly sync,docs-team
              BODY: |
                ### Agenda
    
                - [ ] Start the recording
                - [ ] Check-ins
                - [ ] Discussion points
                - [ ] Post the recording
    
                ### Discussion Points
                Add things to discuss below
    
                - [Work this week](https://github.com/orgs/github/projects/3)
              PINNED: false
              CLOSE_PREVIOUS: false
    
  4. ワークフローファイルのパラメータをカスタマイズします。

    • on.schedule の値を変更して、このワークフローを実行する日時を指定します。 上記の例では、ワークフローは毎週月曜日の 7:20 UTC に実行されます。 スケジュールされたワークフローについて詳しくは、「ワークフローをトリガーするイベント」を参照してください。
    • ASSIGNEES の値を、Issue に割り当てる GitHub のユーザー名のリストに変更します。
    • LABELS の値を、Issue に適用するラベルのリストに変更します。
    • TITLE の値を、Issue のタイトルに変更します。
    • BODY の値を、Issue の本文のテキストに変更します。 | 文字を使用すると、このパラメーターに複数行の値を使用できます。
    • この Issue をリポジトリにピン止めする場合は、PINNEDtrue に設定します。 ピン留めされたイシューについて詳しくは、「Issue をリポジトリにピン止めする」を参照してください。
    • 新しい Issue が作成されるたびにこのワークフローで生成された以前の Issue をクローズする場合は、CLOSE_PREVIOUStrue に設定します。 ワークフローにより、labels フィールドで定義されているラベルを持つ最新の Issue が閉じられます。 間違った Issue をクローズしないようにするには、一意のラベルまたはラベルの組み合わせを使用します。
  5. ワークフローファイルを、リポジトリのデフォルトブランチにコミットしてください。 詳しくは、「新しいファイルの作成」を参照してください。

予想される結果

schedule パラメーター (たとえば、毎週月曜日の 7:20 UTC) に基づき、ワークフローにより、指定した担当者、ラベル、タイトル、本文を使用して新しい Issue が作成されます。 PINNEDtrue に設定すると、ワークフローによって Issue がリポジトリにピン留めされます。 CLOSE_PREVIOUS を true に設定すると、ワークフローによりラベルが一致する最新の Issue がクローズされます。

注: GitHub Actions のワークフローの実行によって高い負荷がかかっている間、schedule イベントが遅延する可能性があります。 高負荷の時間帯には、毎時の開始時点が含まれます。 負荷が十分に高い場合、キューに登録されたジョブの一部が削除される可能性があります。 遅延の可能性を減らすために、Ⅰ時間の中の別の時間帯に実行されるようワークフローをスケジューリングしてください。

ワークフローの実行履歴を表示して、このワークフローが定期的に実行されているかどうかを確認できます。 詳しくは、「ワークフロー実行の履歴を表示する」を参照してください。

次のステップ

  • 問題テンプレートの使用など、GitHub CLI で実行できるその他の操作の詳細については、gh issue create ドキュメントを参照してください。
  • GitHub Marketplace で 、スケジュールされた問題に関連するアクションを検索します。