Closed11

GitHub CLI で secret を設定

hankei6kmhankei6km

まずは 1 つ登録してみる。

--body で指定。

$ gh secret set BASE_URL --body "foo"
✓ Set secret BASE_URL for hankei6km/test-collage-cms-content
$ gh secret list
BASE_URL  Updated 2021-12-28

ウェブ UI でも確認。
GitHub リポジトリに secret が設定されたスクリーンショット

hankei6kmhankei6km

削除してみる。

$ gh secret remove BASE_URL
✓ Removed secret BASE_URL from hankei6km/test-collage-cms-content
$ gh secret list
# 削除されている。

確認などはされない。

ウェブ UI でも確認。
GitHub リポジトリから secret が削除された状態のスクリーンショット

hankei6kmhankei6km

stdin から設定

$ echo -n "foo" | gh secret set BASE_YRL
✓ Set secret BASE_YRL for hankei6km/test-collage-cms-content
$ gh secret list
BASE_YRL  Updated 2021-12-28
hankei6kmhankei6km

Environment へ設定。

$ echo -n "foo" | gh secret set --env pages BASE_URL
✓ Set secret BASE_URL for hankei6km/test-collage-cms-content
$ gh secret list --env pages
BASE_URL  Updated 2021-12-28

ウェブ UIでも確認。
GitHub リポジトリの Environment に secret が設定されたスクリーンショット

hankei6kmhankei6km

echo-n を忘れていた。

上のサンプルも修正。

$ echo -n "foo" | gh secret set --env pages BASE_URL

Action が失敗するので少し悩んだ。

hankei6kmhankei6km

コマンドも個数が多いと面倒なのでスクリプトにした。

set-secrets-to-env.sh
#!/bin/bash

ENVIRONEMT="pages-staging"

VAR_NAMES=(
"BASE_PATH"
"BASE_URL"
 ...
)

for VAR_NAME in "${VAR_NAMES[@]}"; do
  echo -n $"${!VAR_NAME}" | gh secret set -e "${ENVIRONEMT}" "${VAR_NAME}"
done
$ source .env
$ bash set-secrets-to-env.sh
✓ Set secret BASE_PATH for hankei6km/test-collage-cms-content
✓ Set secret BASE_URL for hankei6km/test-collage-cms-content

// snip

$ exit
hankei6kmhankei6km

やはり .env から設定したかったので念のため issue を検索したら 2.4.0 で .env から設定できるようになっていた。

secret set: allow importing secrets from a dotenv file by @lpessoa in #4534

https://github.com/cli/cli/releases/tag/v2.4.0

更新したのであとで試す。

$ gh --version
gh version 2.4.0 (2021-12-21)
https://github.com/cli/cli/releases/tag/v2.4.0

$ gh secret set --help

// snip

FLAGS
  -b, --body string                         The value for the secret (reads from standard input if not specified)
  -e, --env environment                     Set deployment environment secret
  -f, --env-file file                       Load secret names and values from a dotenv-for
hankei6kmhankei6km

試した。実際に Action から使って想定通りに動作した。

コメントや空行も大丈夫なもよう。" 等のエスケープは試していない(必要になったら調べる)。

.env
# test secret
BASE_PATH="/test-collage-cms-content/"

BASE_URL="https://hankei6km.github.io"
$ gh secret set --env pages-staging --env-file .env
✓ Set secret BASE_PATH for hankei6km/test-collage-cms-content
✓ Set secret BASE_URL for hankei6km/test-collage-cms-content

.env で指定されていた変数が設定されている状態のスクリーンショット

このスクラップは2021/12/29にクローズされました