以前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し直すと動き出すと思います。