💭
GitHub ActionsでPR時にPythonのLinterとテストツールを実行したかった
mainブランチへのプルリク作成・同期時にPythonのLinter (flake8)とテストツール (pytest)を実行できるようにしました。エラー時は、GitHubのAnnotetionにエラー内容を表示、Slackに通知されるようにしました。
コードは、下記。
Slack通知は、ワークフロービルダーのWebhookを利用しています。そのため、新しいワークフロー公開し、取得したWebhook URLをGitHub ActionsのSecretに「SLACK_WEBHOOK_URL」という名前で保存しておく必要があります。
.github/workflows/python-lint-and-test.yml
name: Python Lint and Test
on:
pull_request:
types: [opened, synchronize]
branches: ["main"]
paths:
- "**.py"
permissions:
contents: read
jobs:
lint-and-test:
runs-on: ubuntu-20.04
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Set up Python 3.9
uses: actions/setup-python@v3
with:
python-version: "3.9"
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install flake8 pytest
- name: Add problem matcher
run: |
echo "::add-matcher::.github/flake8_error.json"
echo "::add-matcher::.github/flake8_warning.json"
- name: Lint with flake8
run: |
flake8 . --max-complexity=10 --max-line-length=90
- name: Test with pytest
run: |
pytest
- name: Notify slack when job failed
if: ${{ failure() }}
uses: slackapi/slack-github-action@25e41412fd45a59ddd15477c38c78942ba97b50b
with:
payload: |
{
"url": "${{github.server_url}}/${{github.repository}}/actions/runs/${{github.run_id}}",
"workflow": "${{github.workflow}}"
}
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
.github/flake8_error.json
{
"problemMatcher": [
{
"owner": "flake8-error",
"severity": "error",
"pattern": [
{
"regexp": "^([^:]+):(\\d+):(\\d+):\\s+(E\\d+\\s+.+)$",
"file": 1,
"line": 2,
"column": 3,
"message": 4
}
]
}
]
}
.github/flake8_warning.json
{
"problemMatcher": [
{
"owner": "flake8-warning",
"severity": "warning",
"pattern": [
{
"regexp": "^([^:]+):(\\d+):(\\d+):\\s+(W\\d+\\s+.+)$",
"file": 1,
"line": 2,
"column": 3,
"message": 4
}
]
}
]
}
※最初のキー名を problemMatcher という名前にしないと正しく動作しないので注意
Discussion