プルリクエストに関する質問に答えるためのGiTubアクションの使用


Comment for #34

github-actions[bot]
コメントで
PR FAQ
PRはどれくらい開いていましたか.
PRは0日、0時間、0分、4秒
誰が広報に貢献?
以下のユーザーはPRに貢献しました
バンジェンズ
どのようなファイルのPRで変更?
PRで以下のファイルが変わりました
テンプレート/prfaqテンプレート.MD
どのように多くの行のコードがPRで変更?
変更されたコードの5行
View on GitHub
プル要求FAQ(PRFAQ)は、終了したプル要求に関連するデータポイントを自動的に捕捉するためのメカニズムです.prfaqsは、次の質問に答えます.
  • PRはどれくらい開いていましたか.
  • 誰が広報に貢献?
  • どのようなファイルのPRで変更?
  • どのように多くの行のコードがPRで変更?
  • 既存のGithubアクションを活用することによって、私は質問に答えるためにワークフローを構築することができました.

    マイワークフロー
    このワークフローがどのように動作するかを強調表示します.
  • プル要求が終了すると、ワークフローが開始されます.
  • ワークフローは、githubアクションを使用してrepoをダウンロードしますactions/[email protected]
  • ワークフローは、GiTubアクションを使用してプル要求のデータを取得するために、テンプレートクエリーを使用してGithub GraphSQL APIを使用しますhelaili/[email protected]
  • ワークフローは出力をJSONファイルとして保存する
  • ワークフローはjannekem/[email protected] JSONファイルを解析して環境変数としての質問への回答を設定するには
  • ワークフローはchuhlomin/[email protected] Prfaqsテンプレートに答えを設定するには
  • ワークフローはpeter-evans/[email protected] 回答をプル要求に投稿するには

  • 提出カテゴリ:メンテナはヘッジする必要があります
    メンテナは、各プルの要求をスクロールすることによって、この情報を見つけることができますprfaqワークフローは、単一のコメントに努力を統合し、重要な情報を提供していませんhow long the PR was open for .

    YAMLファイルとコードへのリンク
    ここでは、githubレポです

    banjtheman / prfaq_action
    合併されたプル要求のためにPrFAQを作成してください
    ワークフローYAML
    name: PRFAQ
    
    # only trigger on pull request closed events
    on:
      pull_request:
        types: [closed]
    env:
      PR_NUMBER: ${{ github.event.pull_request.number }}
    
    jobs:
      get_pr_stats:
        runs-on: ubuntu-latest
        steps:
          - name: Checkout repository
            uses: actions/[email protected]
          - name: GitHub GraphQL Action
            uses: helaili/[email protected]
            env:
              GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
            with:
              query: queries/pr_stats.yaml
              logLevel: debug
              outputFile: pr_stats.json
              pr_num: ${{ env.PR_NUMBER }}
          - name: Set env variables
            uses: jannekem/[email protected]
            with:
              script: |
                import json
                import datetime
    
                with open("pr_stats.json", "r") as pr_file:
                    pr_stats = json.load(pr_file)
    
                    # Get Time Open
                    created_at = pr_stats["data"]["repository"]["pullRequest"]["createdAt"]
                    merged_at = pr_stats["data"]["repository"]["pullRequest"]["closedAt"]
    
                    created_at_timesamp = datetime.datetime.strptime(created_at, "%Y-%m-%dT%H:%M:%SZ")
                    merged_at_timestamp = datetime.datetime.strptime(merged_at, "%Y-%m-%dT%H:%M:%SZ")
                    timestamp_diff = merged_at_timestamp - created_at_timesamp
    
                    days, seconds = timestamp_diff.days, timestamp_diff.seconds
                    hours = days * 24 + seconds // 3600
                    minutes = (seconds % 3600) // 60
                    seconds = seconds % 60
    
                    timestamp_open = f" {days} days, {hours} hours, {minutes} minutes, {seconds} seconds"
                    print(timestamp_open)
                    set_env("PR_OPEN", timestamp_open)
    
                    # Get participants
                    participants = pr_stats["data"]["repository"]["pullRequest"]["participants"][
                        "edges"
                    ]
                    participants_string = ""
                    for participant in participants:
                        participants_string += participant["node"]["login"] + "  "
    
                    print(participants_string)
                    set_env("PR_USERS", participants_string)
    
                    # Lines of code changed
                    additions = pr_stats["data"]["repository"]["pullRequest"]["additions"]
                    deletions = pr_stats["data"]["repository"]["pullRequest"]["deletions"]
                    content_changed = f"+{additions} -{deletions} lines of code"
                    print(content_changed)
                    set_env("PR_LOC", content_changed)
    
                    # Files that changed
                    files = pr_stats["data"]["repository"]["pullRequest"]["files"]["edges"]
                    files_string = ""
                    for file_path in files:
                        files_string += file_path["node"]["path"] + "  "
                    print(files_string)
                    set_env("PR_FILES", files_string)
          - name: Render template
            id: template
            uses: chuhlomin/[email protected]
            with:
              template: templates/prfaq-template.md
              vars: |
                pr_open: ${{ env.PR_OPEN }}
                pr_users: ${{ env.PR_USERS }}
                pr_loc: ${{ env.PR_LOC }}
                pr_files: ${{ env.PR_FILES }}
          - name: Create comment
            uses: peter-evans/[email protected]
            with:
              issue-number: ${{ env.PR_NUMBER }}
              body: ${{ steps.template.outputs.result }}
    
    

    追加情報
    これらは私がワークフローを構築するために使用したすべてのアクションです

  • actions/[email protected]

  • helaili/[email protected]

  • jannekem/[email protected]

  • chuhlomin/[email protected]
  • peter-evans/[email protected]
  • 他の質問は、このワークフローを答える必要がありますか?以下のコメントであなたの提案を残してください.