GitHubのREST APIを使って名前に '/' の入ったEnvironmentを作る

要点: %2F/エスケープしてあげればいい

Create or update an environment

GitHub は Environment を作成する REST API を提供しています。

docs.github.com

使い方はリファレンスに詳しく書いてありますが、curl なら次のような感じ。適切な権限を付与したアクセストークン (GITHUB_PAT) を用いて、リポジトリ (OWNER/REPO) に ENVIRONMENT_NAME という名前で Environment を作るコマンドです。

export GITHUB_PAT=<YOUR_TOKEN>
export OWNER=<YOUR_OWNER>
export REPO=<YOUR_REPO>
export ENVIRONMENT_NAME=<YOUR_ENVIRONMENT_NAME>

curl -L \
  -X PUT \
  -H "Accept: application/vnd.github+json" \
  -H "Authorization: Bearer "${GITHUB_PAT}"" \
  -H "X-GitHub-Api-Version: 2022-11-28" \
  https://api.github.com/repos/"${OWNER}"/"${REPO}"/environments/"${ENVIRONMENT_NAME}"

トークンの作り方:

docs.github.com

Environment 名に '/' を使いたいとき

Environment 名に / を使って、例えば、production/backend というように構造化したいかもしれません。

その場合は、/%2Fパーセントエンコーディングする必要があります。

コマンド例 (ENVIRONMENT_NAME に注目):

export GITHUB_PAT=<YOUR_TOKEN>
export OWNER=<YOUR_OWNER>
export REPO=<YOUR_REPO>
# / を %2F に変換
export ENVIRONMENT_NAME=production%2Fbackend

curl -L \
  -X PUT \
  -H "Accept: application/vnd.github+json" \
  -H "Authorization: Bearer "${GITHUB_PAT}"" \
  -H "X-GitHub-Api-Version: 2022-11-28" \
  https://api.github.com/repos/"${OWNER}"/"${REPO}"/environments/"${ENVIRONMENT_NAME}"

エンコードしないとエラーレスポンスが返ってきます。

プライベートリポジトリだと具体的なエラーメッセージは無く、Not Found とだけ返ってくるので注意です。

{
  "message": "Not Found",
  "documentation_url": "https://docs.github.com/rest"
}

docs.github.com

補足1. ラベルの場合

Environment と同じように、Issue や Pull Request に付けるラベルも REST API を通じて作れます。

しかし、ラベルの場合は / が名前に入っていてもエスケープ処理が不要でした。

docs.github.com

補足2. プラン

GitHub Free プランでは、プライベートリポジトリで Environment を使えません。実際に試すときはリポジトリの可視性やプランを確認してください。

docs.github.com