GitHubリポジトリのSettingsをコンソールから操作できない場合にEnvironmentsをAPIで設定する
はじめに
EnterpriseプランのGitHub Organizationにメンバーとして参加している場合などで、GitHubのSettings項目がコンソールに表示されず操作できない事があります。
このような状況でOrganizationの所有者に代わってGitHub Actionsで使用するEnvironments(環境変数)の設定を行いたいシーンがありました。
この場合APIを使用する方法がありますので紹介します。
APIを利用してできる事は他にもたくさんあり、以下のリンク先からドキュメントが確認可能です。
すべての REST API ドキュメント
前提
Environmentsの環境変数名や値などの設定はAPIを利用して行えますが、入れ物となるEnvironmentの作成はAPIでは行えません。
そのため、あらかじめアカウントの所有者に必要なEnvironmentを以下の手順で作ってもらっておきます。
- SettingsのメニューからEnvironmentsを選択し、New environmentをクリック。
- Nameを入力し、Configure environmentをクリックで作成されます。
Environmentに対してAPIで設定を行う
Environment の一覧取得 (List environments)
作成済みのEnvironmentの一覧を取得するAPIです。
公式ドキュメントによる説明はこちら→List environments
エンドポイントは以下の通りです。
GET /repos/{owner}/{repo}/environments
owner
にはリポジトリが属するOrganization名、repo
にはリポジトリ名を記載します。
また、AuthorizationヘッダにはBearerトークンを指定します。
このトークンの値にはGitHubのpersonal access token
を利用します。
$ curl -L \ -H "Accept: application/vnd.github+json" \ -H "Authorization: Bearer {YOUR_TOKEN}" \ -H "X-GitHub-Api-Version: 2022-11-28" \ https://api.github.com/repos/{owner}/{repo}/environments { "total_count": 2, "environments": [ { "id": 2557874471, "node_id": "EN_kwDOLbBsnc6YdhEn", "name": "prd", "url": "https://api.github.com/repos/{owner}/{repo}/environments/prd", "html_url": "https://github.com/{owner}/{repo}/deployments/activity_log?environments_filter=prd", "created_at": "2024-03-24T12:05:12Z", "updated_at": "2024-03-24T12:05:12Z", "can_admins_bypass": true, "protection_rules": [ ], "deployment_branch_policy": null }, { "id": 2557873981, "node_id": "EN_kwDOLbBsnc6Ydg89", "name": "stg", "url": "https://api.github.com/repos/{owner}/{repo}/environments/stg", "html_url": "https://github.com/{owner}/{repo}/deployments/activity_log?environments_filter=stg", "created_at": "2024-03-24T12:05:03Z", "updated_at": "2024-03-24T12:05:03Z", "can_admins_bypass": true, "protection_rules": [ ], "deployment_branch_policy": null } ] }
作成済みのstgとprdのEnvironmentが取得できました。
Environment variablesの設定 (Create an environment variable)
続きまして、前項のEnviromentに対してvariables(環境変数の名前と値)の設定を行います。
公式ドキュメントによる説明はこちら→Create an environment variable
エンドポイントは以下の通りです。
POST /repos/{owner}/{repo}/environments/{environment_name}/variables
environment_name
にはvariablesを設定するEnvironmentの名前を記載します。
また-dオプションでvariablesの内容を指定します。
今回追加するvariablesはAWS_ACCOUNT_ID
という名前で123456789012
という値を設定します。
$ curl -L \ -X PUT \ -H "Accept: application/vnd.github+json" \ -H "Authorization: Bearer $YOUR_TOKEN" \ -H "X-GitHub-Api-Version: 2022-11-28" \ https://api.github.com/repos/{owner}/{repo}/environments/stg/variables \ -d '{"name": "AWS_ACCOUNT_ID", "value": "123456789012"}' { }
variablesの設定が完了しました。
設定したEnvironment variablesの確認(Get an environment variable)
公式ドキュメントによる説明はこちら→Get an environment variable
設定したvariablesが正しく設定されているか確認します。
エンドポイントは以下の通りです。
GET /repos/{owner}/{repo}/environments/{environment_name}/variables/{variable_name}
variable_name
には設定したvariablesの名前(環境変数名)を記載します。
curl -L \ -H "Accept: application/vnd.github+json" \ -H "Authorization: Bearer $YOUR_TOKEN" \ -H "X-GitHub-Api-Version: 2022-11-28" \ https://api.github.com/repos/{owner}/{repo}/environments/stg/variables/AWS_ACCOUNT_ID { "name": "AWS_ACCOUNT_ID", "value": "123456789012", "created_at": "2024-03-24T13:50:42Z", "updated_at": "2024-03-24T13:50:42Z" }
追加したvariablesの内容が確認できました。
まとめ
今回はGitHubのEnvironmentsのvariablesをAPIで設定する方法を紹介しました。
APIを利用することでコンソールからsettingsが操作できない場合にもその項目を設定することができます。
他にもAPIを利用してできる項目は多くありますので、必要に応じて活用してみてください。