This repository was archived by the owner on Sep 15, 2026. It is now read-only.
Repository navigation
ci: ワークフローを ci.yml へ統合し、ruff 移行の仕上げとカバレッジコメントを追加 - #220
Merged
Merged
Conversation
…gration
pytest.yml / security.yml / license-check.yml / code-quality.yml / mypy.yml /
autoblack.yml を 1 本の ci.yml へ統合し、旧 black 前提の運用を ruff へ寄せ切った。
- ci.yml に 14 ジョブを集約(ruff / pytest / mypy / license-check / bandit /
pyt / codeql / lizard / dockerlint / hadolint / dockle / actionlint /
shellcheck / yamllint)。concurrency で同一 ref の古い実行を打ち切り、
permissions は既定 {} + ジョブ単位の最小権限にした。
- autoblack.yml の force-push による自動整形コミットを廃止し、
`ruff format --check .` / `ruff check .` の検証ジョブに置き換えた。
- trivy ジョブを削除した。
- mypy は据え置き(django-stubs / drf-stubs とダミー env をそのまま維持)。
- pytest のカバレッジを Codecov から
py-cov-action/python-coverage-comment-action へ移行し、PR コメントと
データブランチ上のバッジにした。`[tool.coverage.run] relative_files = true`
を追加。
- README / AGENTS.md / .pre-commit-config.yaml の black 参照と uvx ruff 表記を
整理し、バッジを ci.yml とカバレッジバッジへ差し替えた。
code-quality-review.yml と release.yml は対象外で変更していない。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Contributor
|
You are seeing this message because GitHub Code Scanning has recently been set up for this repository, or this pull request contains the workflow file for the Code Scanning tool. What Enabling Code Scanning Means:
For more information about GitHub Code Scanning, check out the documentation. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
これはなに?
GitHub Actions のワークフローを
ci.yml1 本に統合し、あわせて残っていたblack 前提の運用を ruff へ寄せ切り、PR へのカバレッジコメントを追加します。
これまで
pytest.yml/security.yml/license-check.yml/code-quality.yml/mypy.yml/autoblack.ymlの 6 ファイルに散っていて、uv sync/ ダミー env を各所にコピペしていたautoblack.ymlが名前に反して ruff を実行し、しかも 整形結果をブランチへforce-push していた(CI が履歴を書き換える)
という状態でした。これを 1 ファイルにまとめ、権限と同時実行制御を明示します。
やったこと
1.
ci.ymlへの統合.github/workflows/ci.ymlに以下 14 ジョブを集約しました。各ジョブのチェック内容・env・サービスコンテナは既存のものをそのまま引き継いでいます。
ruffruff format --check+ruff checkautoblack.yml(挙動は変更・後述)pytestpytest.ymlmypymypy.ymllicense-checklicense-check.ymlbanditsecurity.ymlpytsecurity.ymlcodeqlsecurity.ymllizardcode-quality.ymldockerlintcode-quality.ymlhadolintcode-quality.ymldocklecode-quality.ymlactionlintcode-quality.ymlshellcheckcode-quality.ymlyamllintcode-quality.ymlconcurrency+cancel-in-progressで同一 ref の古い実行を打ち切ります。permissions: {}(権限なし)とし、ジョブ単位で最小権限を宣言しました(
codeqlのみsecurity-events: write、pytestのみcontents: write/pull-requests: write、他はcontents: read中心)。push(main) /pull_request/workflow_dispatch/schedule(旧security.ymlの週次 cron を引き継ぎ)に統一しました。従来は全ブランチ push で回っていましたが、PR 経由の GitHub Flow では二重実行になるため main + PR に寄せています。
削除したファイル:
autoblack.yml·pytest.yml·security.yml·license-check.yml·code-quality.yml·mypy.yml2. trivy ジョブの削除
コンテナイメージの CVE スキャン(
aquasecurity/trivy-action)は 統合先へ引き継がず削除しました。イメージ側の静的チェックは
hadolint/dockle/dockerlintが引き続き担当します。
3. フォーマットは「自動コミット」から「失敗させる」へ
旧
autoblack.ymlはruff format/ruff check --fixを実行したうえでgit push --force origin HEAD:$GITHUB_REFしていました。CI がブランチ履歴を書き換えるのは事故のもとなので廃止し、
の 検証のみ(違反があれば CI 失敗)に置き換えました。自動コミット・force-push は
ワークフローから完全に無くなっています。手元での自動修正は従来どおり
uv run ruff format ./uv run ruff check . --fix、またはpre-commitで行ってください。4. black → ruff 移行の仕上げ
pyproject.tomlには既に black はなく、[tool.ruff.lint] selectにI(isort) が入っています。
ruff checkが import 順序も検査することを実地で確認しました(未整列の import に
I001 Import block is un-sorted or un-formattedが出る)。isort 単体の導入は不要です。
.pre-commit-config.yaml: 「Format(black 互換)」というコメントを実態に合わせて修正し、ruff-pre-commit の rev を
v0.15.18→v0.16.6へ更新(uv.lockの ruff と揃えるため。バージョンがズレると pre-commit と CI で整形結果が食い違います)。
AGENTS.md: Stack 表と移行表の black 記述を更新。開発コマンドをuvx ruff→uv run ruffへ変更しました(uvxは常に最新の ruff を取ってくるため、uv.lockにピン留めされた CI とバージョンがズレます)。CI の説明節も追加。README.md: Lint/Format 節を書き直し、バッジをci.ymlのものへ差し替え。5. mypy は据え置き
型チェッカは mypy のままです(
ty等へは変更していません)。django-stubs /drf-stubs プラグインと、
settings.pyの import に必要なダミー env はそのまま維持しています(DB/Redis への実接続はしないためサービスコンテナは不要)。
6. PR へのカバレッジコメント + バッジ
py-cov-action/python-coverage-comment-action@v4.3をpytestジョブに追加しました。外部 SaaS は使わず
GITHUB_TOKENだけで動きます。python-coverage-comment-action-dataブランチへ保存。coverage.xmlではなく.coverage(binary) を読むため、pyproject.tomlに[tool.coverage.run] relative_files = trueを追加しました(action の必須要件)。ついでに migrations / tests / manage.py を
omitしています。--cov-report=xmlは他ツール向けに従来どおり残しています。GITHUB_TOKENが read-only になり投稿できないため、continue-on-error: trueを付けてテスト結果を巻き添えにしないようにしました(その場合はコメント本文が artifact
python-coverage-comment-actionに残ります)。MINIMUM_GREEN: 85/MINIMUM_ORANGE: 70)。GIST_TOKENは不要です(要件からの変更点)依頼時には「public gist を作り
GIST_TOKENシークレットと gist id を設定する」という前提がありましたが、この action は v3 以降、バッジの保存先を Gist から
python-coverage-comment-action-dataブランチへ移行済みで、action.ymlに
GIST_TOKEN/GIST_ID/BADGE_FILENAMEといった入力は もう存在しません。そのため gist ではなくデータブランチ方式で実装しています(gist を作る必要も、
gistスコープの PAT を作る必要もありません)。一度だけ必要な設定(マージ後 / リポジトリ管理者)
python-coverage-comment-action-dataブランチを自動生成する(手動で作る必要はない)。
(
*などのワイルドカード保護ルールがある場合のみ要注意)。Read and write permissions になっていることを確認する
(ジョブ側でも
contents: write/pull-requests: writeを宣言済み)。生成された
python-coverage-comment-action-dataブランチの README に出力されるバッジ URL を README へ反映する。
CODECOV_TOKENシークレットは削除して構いません。テスト・動作確認
手元(dev container)で実行したコマンドと結果:
uv run ruff format --check .37 files already formatteduv run ruff check .All checks passed!uv run mypy .Success: no issues found in 25 source filesuv run python manage.py makemigrations --check --dry-runNo changes detecteduv run python manage.py migrateNo migrations to apply.uv run pytest --cov --cov-report=xml43 passed(TOTAL 89%)uv run pip-licenses --with-system --partial-match --allow-only=...actionlint(+ shellcheck 連携)× 変更した全ワークフローyamllint -c .yamllint .github/workflows/actによるローカル実行:act -j ruff→ ✅ Job succeededact -j mypy→ ✅ Job succeededact -j pytest→ ✅ Job succeeded。postgres/redis サービスコンテナが立ち上がり、migration チェック → migrate →
43 passedまで通りました。カバレッジコメントのstep だけは act の合成イベントに対応する branch が GitHub 上に無く
(
compare/main...ci/...が 404)失敗しますが、continue-on-errorによりジョブ全体は成功することも確認できました(= fork PR 時のガードが意図どおり動く)。
その他・備考
code-quality-review.ymlとrelease.ymlは対象外でそのまま残しています。ただし
code-quality-review.ymlは PR で reviewdog 経由の mypy を回しており、今回追加した
ci.ymlのmypyジョブと 重複します。インラインコメントが欲しいだけなら
ci.yml側のmypyを落とす/逆に reviewdog 側を整理するなど、別途見直すとよさそうです(この PR では触っていません)。
manage.pyをomitしたため、以前の Codecov の数値とは単純比較できません。
ruffジョブはuvx ruff(常に最新)ではなくuv sync --frozen+uv run ruffを使っています。ruff のバージョンは
uv.lockに固定されるので、ruff のリリースで突然 CI が落ちることがなくなります(更新は Dependabot / 手動の lock 更新経由)。
workflow_runを使った 2 ワークフロー構成が必要です。今回は「ci.yml 1 本」を優先し、continue-on-error+ artifact に留めています。🤖 Generated with Claude Code