ノート: GitHub Actionsは現在GitHub AEでベータです。
GITHUB_TOKENシークレットについて
GitHubは、ワークフローで利用するGITHUB_TOKENシークレットを自動的に生成します。 このGITHUB_TOKENは、ワークフローの実行内での認証に利用できます。
GitHub Actionsを有効化すると、GitHubはリポジトリにGitHub Appをインストールします。 GITHUB_TOKENシークレットは、GitHub Appインストールアクセストークンです。 このインストールアクセストークンは、リポジトリにインストールされたGitHub Appの代わりに認証を受けるために利用できます このトークンの権限は、ワークフローを含むリポジトリに限定されます。 詳しい情報については「GITHUB_TOKENの権限」を参照してください。
各ジョブの開始前に、GitHub はジョブのインストールアクセストークンをフェッチします。 トークンはジョブが終了すると期限切れになります。
このトークンは、github.tokenコンテキストにもあります。 詳しい情報については、「GitHub Actions のコンテキストと式構文」を参照してください。
ワークフロー内でのGITHUB_TOKENの利用
GITHUB_TOKENシークレットを利用するためには、ワークフローファイル内で参照しなければなりません。 トークンの利用には、そのトークンを要求するアクションへ入力としてそのトークンを渡すことや、認証を受けたGitHub APIコールの発行が含まれます。
リポジトリのGITHUB_TOKENを使ってGitHub Actions アプリケーションの代わりにタスクを実行した場合、そのGITHUB_TOKENによって生じたイベントは、新たなワークフローの実行を生じさせません。 これによって、予想外の再帰的なワークフローの実行が生じないようになります。 たとえば、ワークフローの実行によってリポジトリのGITHUB_TOKENを使ったコードのプッシュが行われた場合、そのリポジトリにpushイベントが生じた際に実行されるよう設定されたワークフローが含まれていても、新しいワークフローの実行は行われません。
GITHUB_TOKENを入力として渡す例
以下のワークフローの例ではlabeler actionを使用しています。これには、repo-token入力パラメータの値としてGITHUB_TOKENを渡すことが必要です。
name: Pull request labeler
on:
- pull_request_target
jobs:
triage:
runs-on: ubuntu-latest
steps:
- uses: actions/labeler@v2
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
REST APIの呼び出しの例
GITHUB_TOKENを使って、認証されたAPIコールを発行できます。 以下のワークフローの例では、GitHub REST APIを使ってIssueを作成しています。
name: Create issue on commit
on:
- push
jobs:
create_commit:
runs-on: ubuntu-latest
steps:
- name: Create issue using REST API
run: |
curl --request POST \
--url https://api.github.com/repos/${{ github.repository }}/issues \
--header 'authorization: Bearer ${{ secrets.GITHUB_TOKEN }}' \
--header 'content-type: application/json' \
--data '{
"title": "Automated issue for commit: ${{ github.sha }}",
"body": "This issue was automatically created by the GitHub Action workflow **${{ github.workflow }}**. \n\n The commit hash was: _${{ github.sha }}_."
}' \
--fail
GITHUB_TOKENの権限
GitHub Apps が各権限でアクセスできる API エンドポイントについては、「GitHub App の権限」を参照してください。
| 権限 | アクセスタイプ | フォークしたリポジトリからのアクセス |
|---|---|---|
| actions | 読み取り/書き込み | 読み取り |
| checks | 読み取り/書き込み | 読み取り |
| contents | 読み取り/書き込み | 読み取り |
| deployments | 読み取り/書き込み | 読み取り |
| issues | 読み取り/書き込み | 読み取り |
| metadata | 読み取り | 読み取り |
| packages | 読み取り/書き込み | 読み取り |
| pull requests | 読み取り/書き込み | 読み取り |
| repository projects | 読み取り/書き込み | 読み取り |
| statuses | 読み取り/書き込み | 読み取り |
GITHUB_TOKENで利用できない権限を要求するトークンが必要な場合は、個人アクセストークンを生成して、それをリポジトリのシークレットに設定できます。
- リポジトリに対して適切な権限を持つトークンを利用もしくは生成してください。 詳しい情報については、「個人アクセストークンを作成する」を参照してください。
- ワークフローのリポジトリにそのトークンをシークレットとして追加し、
${{ secrets.SECRET_NAME }}構文でそれを参照してください。 詳しい情報については、「暗号化されたシークレットの作成と利用」を参照してください。