106 lines
3.9 KiB
YAML
106 lines
3.9 KiB
YAML
name: Python Test
|
||
|
||
on:
|
||
workflow_dispatch:
|
||
pull_request:
|
||
branches:
|
||
- main
|
||
- develop
|
||
paths:
|
||
- 'src/**'
|
||
- 'tests/**'
|
||
- '.github/workflows/pytest.yml'
|
||
- 'requirements.txt'
|
||
- 'requirements-dev.txt'
|
||
jobs:
|
||
python-test:
|
||
runs-on: ubuntu-latest
|
||
steps:
|
||
- name: Checkout code
|
||
uses: actions/checkout@v3
|
||
|
||
- name: Set up Python
|
||
uses: actions/setup-python@v4
|
||
with:
|
||
python-version: "3.12"
|
||
|
||
- name: Install dependencies
|
||
id: installDependencies
|
||
run: |
|
||
pip install -r requirements.txt
|
||
pip install -r requirements-dev.txt
|
||
|
||
- name: Run Python Test
|
||
id: runPyTest
|
||
run: |
|
||
pytest --junitxml=pytest.xml --cov-report term-missing --cov=src tests/ | tee pytest-coverage.txt
|
||
|
||
- name: Coverage Report
|
||
id: CoverageReport
|
||
if: success() # テスト成功時のみ実行
|
||
run: |
|
||
coverage-badge -o coverage.svg
|
||
python - <<EOF
|
||
from scripts.generate_coverage import GenerateCoverage
|
||
generate_coverage = GenerateCoverage()
|
||
generate_coverage.save_table()
|
||
EOF
|
||
|
||
- name: Generate coverage-report Branch AND README.md
|
||
id: generateCoverageReportBranch
|
||
if: success() # テスト成功時のみ実行
|
||
run: |
|
||
# ブランチ存在確認と安全な作成/チェックアウト処理
|
||
set -euo pipefail
|
||
git fetch --all --prune
|
||
|
||
# 未追跡ファイルを一時退避(coverage.svg, coverage_table.md など)
|
||
mkdir -p /tmp/coverage-backup
|
||
if [ -f coverage.svg ]; then mv coverage.svg /tmp/coverage-backup/; fi
|
||
if [ -f coverage_table.md ]; then mv coverage_table.md /tmp/coverage-backup/; fi
|
||
|
||
# 1) リモートの coverage-report が存在するか
|
||
if git ls-remote --exit-code origin coverage-report >/dev/null 2>&1; then
|
||
echo "Remote branch exists: origin/coverage-report"
|
||
# ローカルにブランチが無ければ作成してトラッキング
|
||
if ! git rev-parse --verify coverage-report >/dev/null 2>&1; then
|
||
git switch -c coverage-report --track origin/coverage-report || git checkout -b coverage-report origin/coverage-report
|
||
else
|
||
git switch coverage-report || git checkout coverage-report
|
||
fi
|
||
else
|
||
echo "Remote branch missing; creating orphan local branch coverage-report"
|
||
# 2) リモートに無い場合は orphan で作成
|
||
git switch --orphan coverage-report || git checkout --orphan coverage-report
|
||
# ワークツリーを初期化
|
||
git rm -rf . || true
|
||
fi
|
||
|
||
# 退避したファイルを復元
|
||
if [ -f /tmp/coverage-backup/coverage.svg ]; then mv /tmp/coverage-backup/coverage.svg .; fi
|
||
if [ -f /tmp/coverage-backup/coverage_table.md ]; then mv /tmp/coverage-backup/coverage_table.md .; fi
|
||
|
||
- name: Update Readme
|
||
id: updateReadme
|
||
run: |
|
||
echo "# Pytest Report" > README.md
|
||
echo "" >> README.md
|
||
echo "" >> README.md
|
||
echo "" >> README.md
|
||
cat coverage_table.md >> README.md
|
||
cat README.md
|
||
|
||
- name: Check files before upload
|
||
id: checkFiles
|
||
run: ls -l README.md coverage.svg
|
||
|
||
- name: Commit Test Report To coverage-report Branch
|
||
id: commitTestReport
|
||
if: success() # テスト成功時のみ実行
|
||
run: |
|
||
git config --global user.name "github-actions[bot]"
|
||
git config --global user.email "github-actions[bot]@users.noreply.github.com"
|
||
git add README.md coverage.svg
|
||
git commit -m "Update coverage report"
|
||
git push https://actions-bot:${{ secrets.GITEA_TOKEN }}@gitea.pglikers.com/data-science/cloud-run-job-base.git coverage-report --force
|