Open toshiki31 opened 1 year ago
pythonの依存関係(requirement.txt)について調べる
from flask import Flask, request
from github import Github
import openai
import os
app = Flask(__name__)
@app.route('/pull_request_review', methods=['POST'])
def pull_request_review():
# GitHub APIを使用してプルリクエストの情報を取得
data = request.json
repo_full_name = data['repository']['full_name']
pr_number = data['pull_request']['number']
token = os.environ['GITHUB_TOKEN']
g = Github(token)
repo = g.get_repo(repo_full_name)
pr = repo.get_pull(pr_number)
# プルリクエストのコードを取得
diff = pr.get_files()[0].patch
# OpenAI APIを使用してレビューを生成
openai.api_key = os.environ['OPENAI_API_KEY']
prompt = f"Please review the following code:\n{diff}\nReview:"
response = openai.Completion.create(engine="text-davinci-002", prompt=prompt, max_tokens=1024)
review = response.choices[0].text.strip()
# GitHub APIを使用してレビューをプルリクエストにコメント
pr.create_issue_comment(review)
return 'OK'
if __name__ == '__main__':
app.run()
コード実行前にはGITHUB_TOKENとOPENAI_API_KEYの設定が必要
このFlaskアプリケーションを実行すると、GitHubからのWebhookを受信するためのエンドポイント /pull_request_review が提供される。プルリクエストのURLに対してこのエンドポイントを登録することで、プルリクエストに対する自動レビューが有効になる。
app funtions からslackにチャットを送るbot作成
[2023-05-17T07:51:34.548Z] File 'C:\Program Files\dotnet\dotnet.exe' is not found, 'dotnet' invocation will rely on the PATH environment variable.
[2023-05-17T07:51:35.968Z] File 'C:\Program Files\dotnet\dotnet.exe' is not found, 'dotnet' invocation will rely on the PATH environment variable.
[2023-05-17T07:51:36.755Z] No job functions found. Try making your job classes and methods public. If you're using binding extensions (e.g. Azure Storage, ServiceBus, Timers, etc.) make sure you've called the registration method for the extension(s) in your startup code (e.g. builder.AddAzureStorage(), builder.AddServiceBus(), builder.AddTimers(), etc.).
For detailed output, run func with --verbose flag.
ex) 毎週水曜日の17:30:5,10に通知
5,10 0 17 * * Wednesday
python -m venv .venv
: 作業ディレクトリに.venv
ファイルを作成.venv\Scripts\activate.bat
: cmdの先頭に(.venv)が表示->venvが実行中pip install -r requirements.txt
func start
を実行file 'c:\program files\dotnet\dotnet.exe' is not found, 'dotnet' invocation will rely on the path environment variable.
dotnetが存在しないというエラー文 https://qiita.com/ataraken/items/58ead74b62d30aceb854 を参考にして.NET7をインストール
ModuleNotFoundError: No module named 'azure'
'azure'というモジュールが見つからないというエラー
azureがインストールされていないだけ
pip install azure-functions
で解決
Can't determine project language from files. Please use one of [--csharp, --javascript, --typescript, --java, --python, --powershell, --custom]
func start --python
などfuncstartの後に言語を指定する
edited
:
editedは、GitHub上の特定の要素(例:イシュー、プルリクエスト、コメントなど)が編集されたことを示すアクションです。要素の編集には、タイトル、本文、ラベル、割り当てられたユーザーなどの変更が含まれます。このアクションは、要素の履歴を追跡したり、変更を確認したりするために使用されます。
synchronize
:
synchronizeは、GitHub上のプルリクエストに関連しています。このアクションは、プルリクエストのブランチが更新された場合にトリガーされます。通常、プルリクエストに新しいコミットがプッシュされ、変更が加わったことを示します。synchronizeアクションは、CI/CD(継続的インテグレーション/デリバリー)パイプラインのトリガーや、プルリクエストの最新の状態を取得するために使用されます。
プリリクエストが開いている状態で新しいコミットが追加されたとことをトリガーとするアクションは無い
azurite
ディレクトリを作成azurite --silent --location c:\azurite --debug c:\azurite\debug.log
を実行func start
import json
import requests
import azure.functions as func
def main(mytimer: func.TimerRequest) -> None:
if mytimer.past_due:
print('The timer is past due!')
url = 'https://hooks.slack.com/services/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'
payload = {
"text": "日報書いてね!!",
"username": "Azure Functions Bot",
"icon_emoji": ":zap:",
"channel": "#webhook"
}
response=requests.post(url, data=json.dumps(payload))
print(response)
print("Success??")
# print("Timer last triggered at " + str(mytimer.last))
# print("Timer triggered at " + str(mytimer.next))
if __name__ == '__main__':
main()
githubAppのwebhookurlの欄は
ngrokのURL+func start
したときに出るURLのポート番号から後ろ
toshi-github-on-azureのwebhookURL(ngrokver) https://2466-2400-4152-1-3700-c4db-97a7-a1d2-bb82.ngrok-free.app/api/slack_http_trigger
ngrokのURLをwebhookURLに変更してから/api...を追加する
slack APP https://zenn.dev/nyancat/articles/20211219-create-slack-app
slackのメッセージ送信機能(chat.postMessage)について https://api.slack.com/methods/chat.postMessage
slack app - pythonによるメッセージ送信 https://note.com/npaka/n/n4bcb38a1ea74
次やること https://chat.openai.com/share/cc0c0910-3cad-4674-b64d-fdb159d3dde2
import logging
import requests
import azure.functions as func
from github import Github, GithubIntegration
# ==このファイルについて==
# slack_appを用いてメッセージ送信(受信も?)
TOKEN = 'xoxb-5193135314608-5389893783333-FobyTh1hrpDgmtiYSsOynSHJ'
CHANNEL = 'send_issue'
app_id = 339107
with open("c:/send-message-on-slack.private-key.pem") as key:
private_key = key.read()
integration = GithubIntegration(
app_id,
private_key,
)
def main(req: func.HttpRequest) -> func.HttpResponse:
logging.info('Python HTTP trigger function processed a request.')
payload = req.get_json()
logging.info(payload)
keys = payload.keys()
if payload['action'] == 'opened':
if "issue" in keys:
installation_id = payload['installation']['id']
repo_full_name = payload['repository']['full_name']
issue_number = payload['issue']['number']
user = payload['issue']['user']['login']
issue_url = payload['issue']['html_url']
url = "https://slack.com/api/chat.postMessage"
headers = {"Authorization": "Bearer "+TOKEN}
data = {
"text": "@{}が{}でissueを開きました\n{}".format(user,repo_full_name,issue_url),
"username": "send_issue_Bot",
}
r = requests.post(url, headers=headers, data=data)
logging.info("return ", r.json())
return func.HttpResponse(status_code=200)
個人メモ