アクセストークンをパラメーターに使用するスクリプトをgithubのworkflow経由で実行するようにしてみた
何isこの記事
「アクセストークンをパラメーターに使用するスクリプトをgithubのworkflowを使用して実行することで、ローカル環境でアクセストークンを持たなくても実行できるようになるよ!」
という記事です。他にいい方法はあるかもしれませんが、5秒ほど調べて同じこと書いてる記事が見つからなかったので記事にしてます。
背景
LINEのMessaging APIを使用してLINEのアプリを作成するときはローカルでngrokやcloudflaredなどを使用してローカルとネットを繋いでそれをWebhook URLに登録する必要があるのですが、トンネルサービスを使用したときにURLが毎回変わる場合、Webhook URLを毎回更新する必要があり、それを管理画面に行って更新するのがめんどくさかったのでWebhook URLを更新するためのシェルスクリプトを作りました。
シェルスクリプトを作成
このシェルスクリプトでは.envから環境変数を取得して、それを使用してcurlでLINEのWebhookのURLを更新してます。(これは完成系ではないです)
#!/bin/bash
# .env ファイルから環境変数を読み込む
if [ -f .env ]; then
export $(grep 'LINE_CHANNEL_ACCESS_TOKEN' .env | sed 's/#.*//g' | xargs)
fi
# ユーザーにエンドポイントURLの入力を促す
echo "Enter the webhook endpoint URL:"
read endpoint
curl -X PUT \
-H "Authorization: Bearer $LINE_CHANNEL_ACCESS_TOKEN" \
-H "Content-Type:application/json" \
-d "{\"endpoint\":\"$endpoint\"}" \
https://api.line.me/v2/bot/channel/webhook/endpoint
シークレットを登録
リポジトリのSettings
> Secrets and variables
> Actions
> Secrets
> Repository secrets
でLINE_CHANNEL_ACCESS_TOKEN
を登録します。
workflowを作成
先ほど登録したLINE_CHANNEL_ACCESS_TOKEN
をsecrets
から取得するようにしてます。
url
は実行時に渡すようにします。
name: Update Line Webhook URL
on:
workflow_dispatch:
inputs:
url:
description: 'URL'
required: true
jobs:
update:
runs-on: ubuntu-latest
steps:
- name: Update Webhook URL
run: |
curl -X PUT \
-H 'Authorization: Bearer ${{ secrets.LINE_CHANNEL_ACCESS_TOKEN }}' \
-H 'Content-Type:application/json' \
-d '{"endpoint":"${{ github.event.inputs.url }}"}' \
https://api.line.me/v2/bot/channel/webhook/endpoint
シェルスクリプトを更新
ghを使用してworkflowを実行するように更新します。
openでgithub actionsのページを開いている箇所は、cliでworkflowの実行結果を取得することもできますが、ページに飛ばす方が楽なのでそうしてます。
#!/bin/bash
# ユーザーにエンドポイントURLの入力を促す
echo "Enter the webhook endpoint URL:"
read endpoint
gh workflow run update-line-webhook-url.yml -F url="$endpoint"
# ワークフローの実行結果を確認するためにブラウザを開く
SLEEP_SEC=5
echo "$SLEEP_SEC"秒後にブラウザでGitHub Actionsのページを開きます
sleep $SLEEP_SEC
open https://github.com/shinaps/run-sh-in-github-workflow/actions
実行
IDEのボタンで実行してるので変な感じになってますが、普通に
sh update-line-webhook-url.sh
で動きます。
(base) ~/dev/run-sh-in-github-workflow git:[main]
/bin/bash /Users/shinaps/dev/run-sh-in-github-workflow/update-line-webhook-url.sh
Enter the webhook endpoint URL:
https://example.com/
✓ Created workflow_dispatch event for update-line-webhook-url.yml at main
To see runs for this workflow, try: gh run list --workflow=update-line-webhook-url.yml
5秒後にブラウザでGitHub Actionsのページを開きます
実行結果
リポジトリ
あとがき
cloudflareのZero TrustのTunnelsを使用したらこの方法で毎回Webhook URLを更新する必要がなくなったのでこの仕組みは消す予定なのですが、せっかくなので記事にしておこうという気持ちで書きました。
同じことをやろうとしてる方はcloudflareのZero TrustのTunnelsを使用してURL固定した方が良い場合もあるので↓も試してみてください。
Discussion