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 }