# 计划议题的创建

您可以使用 GitHub Actions 定期为日常会议或季度审查等事项创建议题。

## 简介

本教程将演示如何使用 GitHub CLI 定期创建问题。 例如，您可以每周创建一个议题，用作团队会议的议程。 有关 GitHub CLI 的详细信息，请参阅 [在工作流中使用 GitHub CLI](/zh/actions/using-workflows/using-github-cli-in-workflows)。

在本教程中，首先需要创建一个使用 GitHub CLI 的工作流文件。 然后，您将自定义工作流以适应您的需要。

## 创建工作流程

1. 选择要应用此项目管理工作流程的仓库。 您可以使用您有写入权限的现有仓库，或者创建一个新的仓库。 有关创建仓库的详细信息，请参阅 [创建新仓库](/zh/repositories/creating-and-managing-repositories/creating-a-new-repository)。

2. 在存储库中，创建一个名为 `.github/workflows/YOUR_WORKFLOW.yml` 的文件，将 `YOUR_WORKFLOW` 替换为你选择的名称。 这是一个工作流程文件。 有关在 GitHub 上创建新文件的详细信息，请参阅 [创建新文件](/zh/repositories/working-with-files/managing-files/creating-new-files)。

3. 将以下 YAML 内容复制到工作流程文件中。

   ```yaml copy
   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 运行。 有关计划工作流的详细信息，请参阅“[触发工作流的事件](/zh/actions/using-workflows/events-that-trigger-workflows#scheduled-events)”。
   * 将 `ASSIGNEES` 的值更改为要分配到该问题的 GitHub 用户名列表。
   * 将 `LABELS` 的值更改为你想要应用于此议题的标签列表。
   * 将 `TITLE` 的值更改为你希望该议题拥有的标题。
   * 将 `BODY` 的值更改为你想要用于议题正文的文本。 使用 `|` 字符可以为此参数使用多行值。
   * 如果想要将这个议题固定在存储库中，请将 `PINNED` 设置为 `true`。 有关固定议题的详细信息，请参阅「[将议题固定到仓库](/zh/issues/tracking-your-work-with-issues/pinning-an-issue-to-your-repository)」。
   * 如果你想在每次新建议题时关闭此工作流生成的上一个议题，请将 `CLOSE_PREVIOUS` 设置为 `true`。 工作流将关闭具有 `labels` 字段中定义的标签的最新议题。 为避免关闭错误的议题，请使用独特的标签或标签组合。

5. 将工作流程文件提交到仓库的默认分支。 有关详细信息，请参阅“[创建新文件](/zh/repositories/working-with-files/managing-files/creating-new-files)”。

## 预期结果

根据 `schedule` 参数（例如，每周一 7:20 UTC），你的工作流将使用你指定的受理人、标签、标题和正文创建新议题。 如果将 `PINNED` 设置为 `true`，工作流会将此议题固定到存储库。 如果将 `CLOSE_PREVIOUS` 设置为 true，工作流将关闭具有匹配标签的最新问题。

> \[!NOTE]
> `schedule` 事件在 GitHub Actions 工作流运行期间负载过高时可能会延迟。 高负载时间包括每小时的开始时间。 如果负载足够高，可能会删除一些排队作业。 为了降低延迟的可能性，将您的工作流程安排在不同时间运行。

您可以查看工作流程运行的历史记录，以了解该工作流程是如何定期运行的。 有关详细信息，请参阅“[查看工作流程运行历史记录](/zh/actions/monitoring-and-troubleshooting-workflows/viewing-workflow-run-history)”。

## 后续步骤

* 要详细了解使用 GitHub CLI（例如使用问题模板）可以执行哪些其他的操作，请参阅 [`gh issue create` 文档](https://cli.github.com/manual/gh_issue_create)。
* [在 GitHub Marketplace 中搜索](https://github.com/marketplace?category=\&type=actions\&verification=\&query=schedule+issue)与计划问题相关的操作。