Closed4
slackからgithub actionsワークフローを動かす
下調べ
github actions apiを叩き、workflow_dispatch/repository_dispatchトリガーで動かせそう
手始めにcurlで動かす
ワークフロー作成
こちらをパクらせていただく
エンドポイントの詳細はこれかな
curlでリクエストを投げる ~権限が足りない編~
$ curl -L \
-X POST \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer $GITHUB_TOKEN"\
-H "X-GitHub-Api-Version: 2022-11-28" \
https://api.github.com/repos/$OWNER/$REPO/dispatches \
-d '{"event_type":"echo_message","client_payload":{"message":"Hello!"}}'
{
"message": "Bad credentials",
"documentation_url": "https://docs.github.com/rest",
"status": "401"
}
PATがおかしそうなので再作成
PATを作る
必要な権限はこれ
"Contents" repository permissions (write)
curlでリクエストを投げる ~成功編~
$ curl -L \
> -X POST \
> -H "Accept: application/vnd.github+json" \
> -H "Authorization: Bearer $GITHUB_TOKEN" \
> -H "X-GitHub-Api-Version: 2022-11-28" \
> https://api.github.com/repos/$OWNER/$REPO/dispatches \
> -d '{"event_type":"echo_message","client_payload":{"message":"Hello!"}}'
成功
204が返ってきたらOKっぽい
ワークフローの様子
おお、成功している
Lambdaからリクエストを投げる
コードを作る
今度はLambdaでも投げる。言語はpython3.12
トークンはsecretsmanagerなりにあとで置き換える
lambdaコード
import json
import os
import requests
def lambda_handler(event, context):
# 環境変数からパラメータを取得
github_token = os.environ['GITHUB_TOKEN']
owner = os.environ['OWNER']
repo = os.environ['REPO']
# GitHub APIエンドポイント
url = f'https://api.github.com/repos/{owner}/{repo}/dispatches'
# リクエストヘッダー
headers = {
'Accept': 'application/vnd.github+json',
'Authorization': f'Bearer {github_token}',
'X-GitHub-Api-Version': '2022-11-28'
}
# リクエストボディ
payload = {
'event_type': 'echo_message',
'client_payload': {
'message': 'Hello from Lambda!'
}
}
try:
# POSTリクエストの送信
response = requests.post(url, headers=headers, data=json.dumps(payload))
# レスポンスの処理
if response.status_code == 204:
print('Success')
return {
'statusCode': 200,
'body': json.dumps('Success')
}
else:
print(f'Failed with status code: {response.status_code}, response: {response.json()}')
return {
'statusCode': response.status_code,
'body': json.dumps(response.json())
}
except Exception as e:
print(f'Error occurred: {e}')
return {
'statusCode': 500,
'body': json.dumps('Internal Server Error')
}
確認
よさげ
slackワークフロー化(だめだった)
普通にやる
slackで
@aws lambda invoke --function-name <lambda関数の名前> --region <リージョン>
すればOKです。
毎回手打ちするのは手間なのでslackワークフロー化したい
作れんかった...
無料プランだとワークフロービルダーが使えない...
zapierと連携すればいけるかな?
今度試したい
このスクラップは2024/06/20にクローズされました