Step Functions の結果を EventBridge 経由で Slack に通知する
下記の記事で EventBridge から Slack への通知が紹介されていたため、Step Functions で試してみました。
基本的な流れは記事で説明されているので省略します。Step Functions 固有の内容だけ本記事で説明します。
Step Functions のイベント
EventBridge では state machine の ARN やステータスを絞り込めます。例えば、以下のように記述すると全 state machine の成功と失敗のイベントを受け取ります。
{ "source": ["aws.states"], "detail-type": ["Step Functions Execution Status Change"], "detail": { "status": ["SUCCEEDED", "FAILED"] } }
実際に Step Functions から受け取ったイベントを貼っておきます。
{ "executionArn":"arn:aws:states:us-west-2:ACCOUNT:execution:helloworld:7cdd674c-eaac-12de-b073-549373ca07fa", "stateMachineArn":"arn:aws:states:us-west-2:ACCOUNT:stateMachine:helloworld", "name":"7cdd674c-eaac-12de-b073-549373ca07fa", "status":"SUCCEEDED", "startDate":1643530763937, "stopDate":1643530764140, "input":"{\n \"Comment\": \"Insert your JSON here\"\n}", "inputDetails":{"included":true}, "output":"\"World\"", "outputDetails":{"included":true} }
input
と output
には state machine の入出力が設定されます。state machine で通知本文を出力する使い方がありそうです。
イベントの内容をダンプするには Input Transformer で以下を指定します。Slack にそのまま JSON がポストされます。
{"json":"$.detail"}
{ "channel": "ID", "text": <json> }
Slack の通知内容
以下のように state machine execution へのリンクを付けておくと便利です。
{ "blocks": [ { "type": "section", "text": { "type": "mrkdwn", "text": "<status> `<output>`" } }, { "type": "context", "elements": [ { "type": "mrkdwn", "text": "https://us-west-2.console.aws.amazon.com/states/home?region=us-west-2#/executions/details/<executionArn>" } ] } ] }
Renovate で特定のパッケージを同時に上げる
Renovate で特定のパッケージ群のバージョンを同時に上げる方法を調べたのでメモです。
解決したい課題
TypeScript GitHub Action で以下のパッケージのバージョンアップを個別に受け取るので CI が失敗してしまう。auto merge できない。
- jest
- jest-circus
- ts-jest
解決策
Group all packages starting with abc together in one PR を参考にしました。Renovate の設定で matchPackageNames
, groupName
を指定すると1つの PR にまとめてバージョンアップされます。
具体的には以下のように設定します。
"packageRules": [ { "matchPackageNames": ["jest", "ts-jest"], "matchPackagePrefixes": ["jest-"], "groupName": "jest" } ]
これで複数のパッケージをまとめた PR を受け取れました。
Pull Request Review 情報を API で取得する
Pull Request のレビューで Code Owner が設定されているかどうかを取得する方法を調べたのでメモ。
GraphQL API の ReviewRequest オブジェクトで Code Owner かどうか取得できます。クエリの例を書いておきます。
query { repository(owner: "OWNER", name: "REPO") { pullRequest(number: 1918) { reviewRequests(first: 10) { nodes { asCodeOwner requestedReviewer { ... on Team { team: name } ... on User { user: login } } } } } } }
{ "data": { "repository": { "pullRequest": { "reviewRequests": { "nodes": [ { "asCodeOwner": true, "requestedReviewer": { "team": "sre" } }, { "asCodeOwner": false, "requestedReviewer": { "user": "int128" } } ] } } } } }