stagit4github

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

setup_webhooks.nu (1630B)


      1 
      2 #!/usr/bin/env nu
      3 
      4 def main [] {
      5     let target_user = "minerva-jupiter"
      6     let portal_repo = "stagit4github"
      7     let pat_token = $env.GH_PAT_TOKEN? | default ""
      8 
      9     if ($pat_token | is-empty) {
     10         print "Error: GH_PAT_TOKEN environment variable is not set."
     11         return
     12     }
     13 
     14     let hook_url = $"https://api.github.com/repos/($target_user)/($portal_repo)/dispatches"
     15 
     16     # 全リポジトリ一覧を取得(ポータル用リポジトリを除外)
     17     let repos = (
     18         gh repo list $target_user --limit 200 --json name
     19         | from json
     20         | get name
     21         | where $it != $portal_repo
     22     )
     23 
     24     print $"Target Repositories Count: ($repos | length)"
     25     print "=========================================="
     26 
     27     mut current = 1
     28     let total = ($repos | length)
     29 
     30     for repo in $repos {
     31         print $"\n[($current)/($total)] >>> Processing: ($repo)"
     32 
     33         let payload = ({
     34             name: "web",
     35             active: true,
     36             events: ["push"],
     37             config: {
     38                 url: $hook_url,
     39                 content_type: "json",
     40                 insecure_ssl: "0"
     41             }
     42         } | to json)
     43 
     44         # do -i で gh api のエラー(422等)を無視してレスポンス/エラーメッセージを垂れ流し、次のループへ進む
     45         do -i {
     46             $payload | gh api $"repos/($target_user)/($repo)/hooks" --input - -H $"Authorization: Bearer ($pat_token)"
     47         }
     48 
     49         $current += 1
     50     }
     51 
     52     print "\n=========================================="
     53     print "All repositories processed."
     54 }