이슈 생성 예약하기

이슈 생성 예약하기

GitHub Actions를 사용해서 일일 회의나 분기별 리뷰 같은 정기적인 작업을 위해 이슈를 정기적으로 만들 수 있어요. 이 튜토리얼에서는 이슈를 정기적으로 자동 생성하는 방법을 알려드릴게요.

출처: 문서

본문

Introduction

이 튜토리얼에서는 GitHub CLI를 사용해서 이슈를 정기적으로 만드는 방법을 보여드릴게요. 예를 들어 팀 회의의 안건으로 사용할 이슈를 매주 만들 수 있어요. GitHub CLI에 대한 자세한 내용은 Using GitHub CLI in workflows 문서를 참고하세요.

이 튜토리얼에서는 먼저 GitHub CLI를 사용하는 워크플로우 파일을 만들고, 그다음 필요에 맞게 워크플로우를 커스터마이즈할 거예요.

Creating the workflow

  1. 이 프로젝트 관리 워크플로우를 적용할 저장소를 선택하세요. 쓰기 권한이 있는 기존 저장소를 사용할 수도 있고, 새 저장소를 만들 수도 있어요. 새 저장소를 만드는 방법에 대한 자세한 내용은 Creating a new repository 문서를 참고하세요.

  2. 저장소에서 .github/workflows/YOUR_WORKFLOW.yml이라는 파일을 만드세요. YOUR_WORKFLOW를 원하는 이름으로 바꾸면 돼요. 이 파일이 바로 워크플로우 파일이에요. GitHub에서 새 파일을 만드는 방법에 대한 자세한 내용은 Creating new files 문서를 참고하세요.

  3. 다음 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에 실행돼요. 예약된 워크플로우에 대한 자세한 내용은 Events that trigger workflows 문서를 참고하세요.
    • 이슈에 할당하려는 GitHub 사용자 이름 목록으로 ASSIGNEES 값을 변경하세요.
    • 이슈에 적용하려는 레이블 목록으로 LABELS 값을 변경하세요.
    • 이슈가 가지게 하려는 제목으로 TITLE 값을 변경하세요.
    • 이슈 본문에 넣으려는 텍스트로 BODY 값을 변경하세요. | 문자를 사용하면 이 매개변수에 여러 줄 값을 사용할 수 있어요.
    • 이 이슈를 저장소에 고정(pin)하려면 PINNEDtrue로 설정하세요. 고정된 이슈에 대한 자세한 내용은 Pinning an issue to your repository 문서를 참고하세요.
    • 새 이슈가 생성될 때마다 이 워크플로우가 생성한 이전 이슈를 닫으려면 CLOSE_PREVIOUStrue로 설정하세요. 워크플로우는 labels 필드에 정의된 레이블이 있는 가장 최근 이슈를 닫아요. 잘못된 이슈를 닫지 않으려면 고유한 레이블이나 레이블 조합을 사용하세요.
  5. 워크플로우 파일을 저장소의 기본 브랜치에 커밋하세요. 자세한 내용은 Creating new files 문서를 참고하세요.

Expected results

schedule 매개변수(예: 매주 월요일 7:20 UTC)에 따라 워크플로우가 지정한 담당자, 레이블, 제목, 본문을 가진 새 이슈를 만들어요. PINNEDtrue로 설정하면 워크플로우가 이슈를 저장소에 고정해요. CLOSE_PREVIOUStrue로 설정하면 워크플로우가 레이블이 일치하는 가장 최근 이슈를 닫아요.

[!NOTE] schedule 이벤트는 GitHub Actions 워크플로우 실행의 부하가 높은 기간 동안 지연될 수 있어요. 부하가 높은 시간에는 매시간 시작 시점이 포함돼요. 부하가 충분히 높으면 일부 대기 중인 job이 버려질 수 있어요. 지연 가능성을 줄이려면 워크플로우가 매시간 다른 시간에 실행되도록 예약하세요.

워크플로우 실행 기록을 확인해서 이 워크플로우가 주기적으로 실행되는 것을 볼 수 있어요. 자세한 내용은 Viewing workflow run history 문서를 참고하세요.

Next steps

더 알아보기 (Learn more)