この投稿ではCLA(Contributor License Agreement)署名をGitHub Actionsで自動化する方法を紹介します。
使うもの
CLA assistantはSaaS版がありますが、今回使うのはGitHub内で完結するCLA assistant liteです。CLA assistant liteは、GitHub Actionsで動作するため、外部のサーバーが不要という特徴があります。同意したコントリビューターの情報はリポジトリ内にファイルとして残るので、SaaS版がサービス終了したときに同意者リストデータを消失するといった心配がありません。
CLA assistant liteを使ったCLA署名の流れ
CLA assistant liteを使ったとき、CLAの署名は次の流れで行われます。
- コントリビューターがプルリクエストを作成する。
- GitHub ActionsにてCLA assistant botが起動する。
- プルリクエストのコメントに、CLA同意を求めるコメントがbot名義で付く。このときCIステータスはFAILになる。
- コントリビューターはCLA同意表明をプルリクエストのコメント欄で行う。
- 再びGitHub ActionsにてCLA assistant botが起動し、コントリビューターの情報をmainブランチのcla.jsonに書き足す。CIステータスPASSで終了する。
- プロジェクトのオーナーなどマージ権限がある人がプルリクエストをマージする。
- GitHub ActionsにてCLA assistant botが起動し、プルリクエストをロックする。ロックにより、後でコントリビューターがコメントを消すことができなくなる。
設定方法
GitHub Actionsの設定
まず.github/workflows/cla.ymlを作成します。
name: "CLA Assistant"
on:
issue_comment:
types: [created]
pull_request_target:
types: [opened,closed,synchronize]
jobs:
CLAssistant:
runs-on: ubuntu-latest
steps:
- name: "CLA Assistant"
if: (github.event.comment.body == 'recheck' || github.event.comment.body == 'I have read the CLA Document and I hereby sign the CLA') || github.event_name == 'pull_request_target'
# Beta Release
uses: cla-assistant/github-action@v2.1.3-beta
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# the below token should have repo scope and must be manually added by you in the repository's secret
PERSONAL_ACCESS_TOKEN : ${{ secrets.PERSONAL_ACCESS_TOKEN }}
with:
path-to-signatures: 'signatures/version1/cla.json'
path-to-document: 'https://github.com/cla-assistant/github-action/blob/master/SAPCLA.md' # e.g. a CLA or a DCO document
# branch should not be protected
branch: 'main'
#allowlist: user1,bot*
#below are the optional inputs - If the optional inputs are not given, then default values will be taken
#remote-organization-name: enter the remote organization name where the signatures should be stored (Default is storing the signatures in the same repository)
#remote-repository-name: enter the remote repository name where the signatures should be stored (Default is storing the signatures in the same repository)
#create-file-commit-message: 'For example: Creating file for storing CLA Signatures'
#signed-commit-message: 'For example: $contributorName has signed the CLA in #$pullRequestNo'
#custom-notsigned-prcomment: 'pull request comment with Introductory message to ask new contributors to sign'
#custom-pr-sign-comment: 'The signature to be committed in order to sign the CLA'
#custom-allsigned-prcomment: 'pull request comment when all contributors has signed, defaults to **CLA Assistant Lite bot** All Contributors have signed the CLA.'
#lock-pullrequest-aftermerge: false - if you don't want this bot to automatically lock the pull request after merging (default - true)
#use-dco-flag: true - If you are using DCO instead of CLA
アクセストークンの設定
PERSONAL_ACCESS_TOKEN
が必要なので、Personal access tokenのページでアクセストークンを作ります。
リポジトリの「Settings」→「Secrets」→「New repository secret」を開きます。
「Name」をPERSONAL_ACCESS_TOKEN
にし、「Value」には先程作ったアクセストークンを入力します。
以上で設定は完了です。
動作確認
プルリクエストを作ってみます。
コメントすると再びGitHub Actionが実行され、チェックが通ります。
signatures/version1/cla.jsonを開くと同意者の情報が書き加えられているのがわかります。