GitHub

概要

GitHubはGitのコードホスティングサービス。

Memo

一括でリポジトリのwatch状態を変更する

フォーク用のorganizationアカウントを使っている。最近自動fetchをするようにしたところ、GitHub Actionsの失敗通知が非常にうるさい。トークンなどが入ってないとエラーになるジョブが多くあるようだ。並列 + 長時間でいくつも実行するので、数が多い。1つのリポジトリを1日放置で200件くらい来る。

メールは設定項目があるし無視すればいいのだが、自作した通知ツールの動作が阻害されてしまうのが問題だった。workflowの失敗もnotificationなので、それだけでページを埋め尽くしてしまう。そんなに大量のページをたどる設定になっていない。

ユーザ所有のリポジトリについてはブラウザでリスト表示して設定できるようだ1。しかしorganizationのリポジトリは一覧設定に出てこない。設定がないようだ。1件1件開いて、watchingをignoreにするしかない。なので、コマンドでやることにした。

watching状態の変更エンドポイントの説明はWatch中 - GitHub Docsにある。

Readmeでの画像の揃え方

GitHub Readmeでの、画像の揃え方。理解しやすい。

CODEOWNERS

.github/CODEOWNERSファイルを配置すると、特定のパターンで特定の人にレビュー必須にできる。 例えば.rbの変更が含まれていた場合は@backend-team、.tsの場合は@Aさん、など。

コンテナレジストリ

DockerHubのように、Dockerコンテナをホストするサービスとして利用できる。

  • GitHubトークンを発行する
  • シェル上でログインする
  • タグをつけてビルドする
  • pushする

コンテナレジストリの利用 - GitHub Docs

リポジトリで特定の言語をignoreするとき

リポジトリ内にライブラリなどが入っていると、GitHub上で意図しない言語のリポジトリとみなされることがある。 .gitattributes ファイルを作って↓のように入力すると、public内のファイルが言語統計から無視される。

public/* linguist-vendored
public/*/* linguist-vendored

Tasks

TODO O’Reilly Japan - GitHubツールビルディング

GitHubでのメタツールの作り方を解説している。

  • 条件付きリクエストはレートを消費しない。変更がない場合は何も返さない

Reference

Map of GitHub

有名なGitHubプロジェクトの可視化。

GitHub Documentation

GitHubのドキュメント。

Archives

DONE フォークしたリポジトリを一括更新する

不便なので。

GitHub CLI で fork を最新にするを参考にして作成した。

フォークリポジトリはorganizationにまとめている。

gh auth refresh -s workflow # workflowの変更があると、この操作が必要と出る
gh repo list kd-collective --limit 1000 --fork --json nameWithOwner --jq '.[].nameWithOwner' | xargs -n1 gh repo sync

Footnotes:

1

それでも400件は大変だ。

curl -L \
  -H "Accept: application/vnd.github+json" \
  -H "X-GitHub-Api-Version: 2022-11-28" \
  "https://api.github.com/orgs/kd-collective/repos?per_page=100&page=1" | \
    jq .[].name | \
    xargs -i -n 1 curl -L -X PUT \
          -H "Accept: application/vnd.github+json" \
          -H "Authorization: Bearer <TOKEN>" \
          -H "X-GitHub-Api-Version: 2022-11-28" \
          https://api.github.com/repos/kd-collective/{}/subscription \
          -d '{"subscribed":false,"ignored":true}'

organizationのリポジトリを一覧してから、順にignoreを実行していく。