GitHubリポジトリのSettingsをコンソールから操作できない場合にEnvironmentsをAPIで設定する

2024.03.25

はじめに

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を利用してできる項目は多くありますので、必要に応じて活用してみてください。