複数のGitHubリポジトリにまとめてGitHub Sponsorsボタン(FUNDING.yml)を設定する方法
追記(2021-09-04): username/.github
リポジトリを作ることで一括でSponsorボタンが設定できるようになっています。
また、現在はデフォルトでFUNDING.yml
が認識されてSponsorボタンがでるため、“Sponsorship”の✔を入れる作業は不要となりました。
詳細はuser/.githubリポジトリを使い一括でFUNDING.ymlやCODE_OF_CONDUCT.mdなどを設定する | Web Scratchを参照
GitHubリポジトリにはスポンサーボタンを表示する機能がありますが、これをまとめて設定するツールを書きました。
GitHubリポジトリに、スポンサーボタンを表示するには次のような条件が必要です。(2019-10-27現在)
- GitHubリポジトリのSettingsで”Sponsorship”の✔をいれて有効化する
- リポジトリの
.github/FUNDING.yml
にGitHub SponsorsやPatreonなどのfunding platformsの情報を入れる
具体的な手順は次のドキュメントに書かれています。
つまり、それぞれのリポジトリに.github/FUNDING.yml
をコミットする必要があります。
これだと更新が面倒そうなので、一括で複数のリポジトリの.github/FUNDING.yml
のGitHub Sponsorsを更新するツールを書きました。
Note: Organizationの場合は、ツールを使わなくても.github
リポジトリを使うことで一括設定が可能なので、その方法は後述します。
github-funding-yml-updater
github-funding-yml-updaterは複数のリポジトリの.github/FUNDING.yml
をGitHub API経由で更新するツールです。
GitHub APIでリポジトリを更新するので、それぞれのリポジトリを手元にcloneする必要はありません。
使い方
リポジトリの準備
まず、更新するリポジトリの定義などの準備をします。
次のような形式で更新したいリポジトリを改行区切りにしたlist.txt
などのテキストファイルを用意します。
owner/repo
owner/repo@branch
https://github.com/owner/repo
たとえば、curl
とjqを使って、GitHubの検索APIで自分のリポジトリ一覧を取得してlist.txt
を作れます。
export GH_USER="azu"
curl -s "https://api.github.com/search/repositories?q=user:${GH_USER}&&per_page=100" | jq ".items[].full_name" > list.txt
# ....
$ cat list.txt
"azu/promises-book"
"azu/awesome-commit-english"
"azu/NSDate-Escort"
"azu/large-scale-javascript"
"azu/JavaScript-Plugin-Architecture"
"azu/github-reader"
"azu/browser-javascript-resource"
"azu/multi-stage-sourcemap"
"azu/irodr"
"azu/parcel-typescript-example"
...
次に、GitHubのアクセストークンを用意します。
Scopeはrepo
があればいいので、次のURLから必要に応じてpersonal access tokenを作成してコピーしておきます。
リポジトリを更新する
github-funding-yml-updaterはNode.jsで書かれたツールなのでnpmでコマンドラインツールとしてインストールします。
npm install github-funding-yml-updater -g
慣れてる人はnpx
コマンドでも利用できます。(複数のコマンドが入ってるので-p
指定が必要)
npx -p github-funding-yml-updater github-funding-yml-updater [options]
github-funding-yml-updater
コマンドがインストールされるので、次のように実行できます。
先ほど用意したlist.txt
を--list-file
に指定して、.github/FUNDING.yml
のGitHub Sponsorにazu
を追加する例です。
デフォルトはDryRunモードなので、実際にリポジトリは更新せずに、更新するかどうかだけを表示します。
## --writeがない場合はDryRunで実行する
$ github-funding-yml-updater --mode add --user azu --list-file list.txt --token あなたのGITHUB_TOKEN
Mode: DryRun mode
User: azu
azu/promises-book: No Update
azu/awesome-commit-english: Try to Update
azu/NSDate-Escort: Try to Update
azu/large-scale-javascript: Try to Update
azu/JavaScript-Plugin-Architecture: Try to Update
azu/github-reader: Try to Update
...
実際にリポジトリの.github/FUNDING.yml
を更新したい場合は、--write
フラグを追加します。
## --writeで実際に書き込む
$ github-funding-yml-updater --mode add --user azu --list-file list.txt --token あなたのGITHUB_TOKEN --write
Mode: Write mode
User: azu
azu/promises-book: No Update
azu/awesome-commit-english: Try to Update
azu/NSDate-Escort: Try to Update
azu/large-scale-javascript: Try to Update
azu/JavaScript-Plugin-Architecture: Try to Update
azu/github-reader: Try to Update
...
これでlist.txt
にあるリポジトリの.github/FUNDING.yml
をまとめて更新できます。
その他の--mode
としてユーザーを削除するdelete
や既存のFUNDING.ymlを指定して上書きするoverwrite
などがあります。
詳しいコマンドの使い方はREADMEや--help
で見てください。
GitHubリポジトリのSettingsで”Sponsorship”の✔をいれて有効化する
最初に書いたように.github/FUNDING.yml
を置いただけだと、GitHubのスポンサーボタンは表示されません。
ユーザーの場合は、各リポジトリSettingsで”Sponsorship”の✔をいれて有効化する必要があります。
この”Sponsorship”の✔は現在APIがないため手動で更新が必要です。
github-funding-yml-updaterには、この設定を補助するツールもはいっています。
github-funding-yml-updater
をインストールするとgithub-funding-yml-settings
という別のコマンドもインストールされています。
github-funding-yml-settings
に--list-file
を渡す設定するためのURLを出力してくれます。
npm install github-funding-yml-updater -g
github-funding-yml-settings --list-file list.txt
# リポジトリごとの設定URLを出力する
https://github.com/azu/example1/settings#repository-funding-links-feature
https://github.com/azu/example2/settings#repository-funding-links-feature
あとはこの設定ページから1コづつ”Sponsorship”の✔をいれていくだけです。
Organizationの一括設定
GitHub Organizationの場合は.github
という名前のリポジトリを使うことで、Organization全体に一括設定が可能です。
たとえば、efcl/.githubというリポジトリにFUNDING.yml
などをのGitHubメタファイルを配置すると、
そのOrganizationにあるリポジトリに反映されます。
- https://github.com/efcl/.github
- GitHubメタファイル置き場
- https://github.com/efcl/efcl.github.io
- FUNDING.ymlを置いてなくてもスポンサーボタンがでている
注意点として、.github
リポジトリのSettingsで”Sponsorship”の✔を入れないとスポンサーボタンは有効化されません。
この機能はCreating a default community health file for your organization - GitHub Helpにも書かれているようにCONTRIBUTING.md
、CODE_OF_CONDUCT.md
、SECURITY.md
などのファイルも配置できます。
その他: github:buttons
github:buttonsはGitHub Sponsorのボタンに対応しています。
次のような感じで、ウェブサイトにGitHubと似たようなスポンサーボタンを配置できます。
おわりに
github-funding-yml-updaterを使ったリポジトリの.github/FUNDING.yml
の一括アップデートについて書きました。
Organizationについては、.github
リポジトリを使うことで一括で設定できます。
ユーザー単位のリポジトリについては現状では一括設定する.github
リポジトリはありません。
ユーザースコープのメタリポジトリについては、次のIssueで話し合われています。
お知らせ欄
JavaScript Primerの書籍版がAmazonで購入できます。
JavaScriptに関する最新情報は週一でJSer.infoを更新しています。
GitHub Sponsorsでの支援を募集しています。