以前IaCとCircleCIで自宅のインフラ環境を管理する方法を記事にしました。
今回はIaCとGitHub Actionsで管理する方法を書いていきます。
とはいっても、CIの設定を変更していくだけなので、以前の記事から「GitHubの設定」まで終わらせておきます。
GitHub Actionsの設定
先にシークレットを登録してしまいましょう。登録方法は以下です。
GitHub Actions でのシークレットの使用 - GitHub Docs
シークレットの内容は以下です。
| Name | Value |
|---|---|
| token | メモしたトークン |
| secret | メモしたクライアントシークレット |
| botdeviceid | メモしたdeviceId |
次にワークフローの定義を置いておくディレクトリを作ります。
mkdir -p .github/workflows
ワークフローの定義を置いていきます。GitHub Actionsは.github/workflows以下に置いたYAMLフォーマットのファイルをワークフローとして実行してくれるので、ファイル名はなんでも大丈夫です。今回は.github/workflows/bot.yamlというファイル名にしておきます。
on:
push:
branches:
- main
paths:
- .github/workflows/bot.yaml
- config.yaml
jobs:
light_toggle:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Generate sign
id: sign
run: |
token="${{ secrets.token }}"
secret="${{ secrets.secret }}"
t="$(date +%s%3N)"
nonce="$(uuidgen)"
sign="$(echo -n "$token$t$nonce" | openssl dgst -binary -sha256 -hmac "$secret" | base64)"
echo "t=$t" >> $GITHUB_OUTPUT
echo "nonce=$nonce" >> $GITHUB_OUTPUT
echo "sign=$sign" >> $GITHUB_OUTPUT
- name: Run read-yaml action
id: yaml-data
uses: jbutcher5/read-yaml@main
with:
file: './config.yaml'
key-path: '["bot", "command"]'
- name: Light toggle
run: |
curl -X POST \
-H "Content-Type: application/json; charset=utf8" \
-H "Authorization: ${{ secrets.token }}" \
-H "t: ${{ steps.sign.outputs.t }}" \
-H "sign: ${{ steps.sign.outputs.sign }}" \
-H "nonce: ${{ steps.sign.outputs.nonce }}" \
-d '{"command": "'${{ steps.yaml-data.outputs.data }}'", "paramter": "default", "commandType": "default"}' \
"https://api.switch-bot.com/v1.1/devices/${{ secrets.botdeviceid }}/commands"
少し補足しておくと、Run read-yaml actionでconfig.yamlをパースして、Light toggleから値を取得しています。
config.yamlを作ります。
bot: # command: turnOff command: turnOn # command: press
.github/workflows/bot.yamlとconfig.yamlをGitHubにPushするとActionsが動き出すので確認してみます。

ワークフローの実行はブランチとパスで制御されています。もしかすると初回だけ動かないかもしれません。その場合はconfig.yamlを少し弄ってcommitし直すと動き出すと思います。