🐷

GitHubリポジトリユーザーをAzure Static Web Appsに同期するActionsを作った

に公開

これは何?

GitHubリポジトリーのコラボレーター権限をAzure Static Web Apps(SWA)のカスタムロールに同期する再利用可能なGitHub Actionsです。

GitHub Actionsを手動もしくはスケジュールで実行することで、GitHubリポジトリーの権限変更をSWAに同期します。

新しく追加されたユーザーがいた場合は、SWAの招待リンクをGitHub Discussionsで通知します。

背景

近年、生成AIの活用が進むにあたり、開発ドキュメントもテキストでコードとあわせてバージョン管理システムに保管することが増えているように思います。

その際、Markdown文書から静的サイトジェネレーターを通していずれかにホスティングするとした場合、個人的にはAzure Static Web Apps(SWA)を好んで利用しています。

最大の理由は、Pull Requestを作成した際に、自動的にステージング用のサイトに配備してくれることで、PRによる差分と、ステージングに配置されたドキュメントの双方を確認しながら、効果的にレビューを行えるからです。

ただ開発対象が非Publicなリポジトリーの場合、どう認証を制御するか課題があります。

SWA標準の簡易GitHub認証では、GitHubにログインできる人であればだれでも閲覧が可能になってしまします。簡易GitHub認証を利用した上で、閲覧可能なユーザーをSWAに登録することで閲覧を制限できますが、標準では手動で管理する必要があります。

そこでGitHubリポジトリーにアクセス可能なユーザーをSWAに同期するための再利用可能なActionsを作成しました。

提供するActions

本プロジェクトでは2つの再利用可能なGitHub Actionsを提供しています。

  • swa-github-role-sync
  • swa-github-discussion-cleanup

swa-github-role-sync

GitHubリポジトリのコラボレーター権限をSWAのカスタムロールへ同期し、新規ユーザーには招待リンクをDiscussionで通知します。

主な機能:

  • GitHub権限(admin/maintain/write/triage/read)とSWAロールの1:1マッピング
  • minimum-permissionで同期対象の最小権限レベルを指定可能
  • 差分検出による重複招待の抑制
  • GitHub ActionsのJob Summaryへの結果出力
- uses: nuitsjp/swa-github-role-sync@v1
  with:
    github-token: ${{ secrets.GITHUB_TOKEN }}
    swa-name: my-swa-app
    swa-resource-group: my-swa-rg
    discussion-category-name: Announcements

swa-github-discussion-cleanup

有効期限切れの招待Discussionを自動削除します。

主な機能:

  • 作成日時ベースの期限切れDiscussion自動削除
  • タイトルテンプレートによる削除対象のフィルタリング
  • 手動実行時の即時削除モード
- uses: nuitsjp/swa-github-discussion-cleanup@v1
  with:
    github-token: ${{ secrets.GITHUB_TOKEN }}
    discussion-category-name: Announcements
    expiration-hours: 168

利用方法

GitHubリポジトリーのドキュメントを参照してください。

関連リンク

Discussion