Ini ialah terjemahan
QualityChecksPythonShell. Halaman bahasa Inggeris ialah teks yang sah, dan perubahan di sini akan ditimpa pada penerbitan wiki yang seterusnya.
English | Dansk | Bahasa Melayu
Membaca keputusan semakan kualiti
Cara seorang jurutera perisian memanggil semakan kualiti bersama, membaca larian yang gagal dan menjadikannya lulus. Aliran kerja ini menjalankan lint dan semakan format ke atas fail Python dan shell sesebuah repositori dengan alat yang disematkan versinya, tidak mengubah sebarang fail dan tidak memerlukan secret. Kontraknya ialah ADR-0005 dalam repositori ini.
Memanggil aliran kerja
name: Quality
on:
pull_request:
push:
branches: [ main ]
jobs:
quality:
permissions:
contents: read
uses: TirSystem/github-action/.gitea/workflows/quality-checks.yml@v1
with:
languages: python,shell
| Input | Lalai | Maksud |
|---|---|---|
languages |
python,shell |
Senarai bahasa yang disemak, dipisahkan koma |
working-directory |
. |
Direktori, relatif kepada akar repositori, yang failnya disemak |
ruff-version |
0.6.9 |
Versi ruff |
mypy-version |
1.11.2 |
Versi mypy |
shellcheck-py-version |
0.10.0.1 |
Versi pakej shellcheck-py (ShellCheck 0.10.0) |
shfmt-py-version |
3.11.0.2 |
Versi pakej shfmt-py (shfmt 3.11.0) |
tools-ref |
v1 |
Tag atau cabang TirSystem/github-action tempat skrip tools/quality-checks.sh diambil |
Rujuk aliran kerja pada tag major (@v1) atau pada tag tepat (@v1.0.0), jangan sekali-kali pada main dan jangan pada cabang pull request: cabang itu dipadam apabila pull request digabungkan dan rujukan itu berhenti berfungsi. Lihat panduan naik taraf untuk apa yang diterima oleh setiap pilihan.
Fail aliran kerja memanggil skrip dalam repositori ini, yang diambil pada tools-ref. Panggilan pada tag tepat hanya disematkan sepenuhnya apabila tools-ref menamakan tag yang sama, contohnya @v1.0.1 dengan tools-ref: v1.0.1; dengan nilai lalai skrip mengikuti v1.
Perkara yang disemak
| Bahasa | Fail | Alat |
|---|---|---|
| Python | *.py yang dijejaki di bawah direktori kerja |
ruff check, ruff format --check, mypy --strict |
| Shell | *.sh yang dijejaki di bawah direktori kerja |
shellcheck, shfmt -d |
Fail yang tidak dijejaki tidak disemak. Bahasa tanpa fail dilangkau dengan notis dan dikira lulus. Ujian projek tidak dijalankan.
Membaca satu larian
- Buka semakan status pada pull request, kemudian kerja
quality-checks. - Setiap alat mempunyai kumpulan lognya sendiri yang dinamakan sempena alat itu. Setiap alat dijalankan walaupun alat sebelumnya gagal, jadi satu larian menunjukkan semua dapatan.
- Satu alat berakhir dengan
PASS <alat>atauFAIL <alat>. Baris terakhir larian yang gagal menamakan alat yang gagal:Quality checks failed: ruff check shellcheck. - Satu dapatan ditulis oleh alat itu sendiri sebagai
laluan:baris:lajur: KOD mesej. Laluan relatif kepadaworking-directory.
Kegagalan biasa dan pembetulan
| Alat | Apa yang ditunjukkan log | Pembetulan |
|---|---|---|
ruff check |
F401 ... imported but unused |
Buang import itu, atau gunakannya |
ruff format --check |
Would reformat: <fail> |
Jalankan ruff format <fail> dan commit |
mypy --strict |
Function is missing a type annotation |
Tambah jenis bagi parameter dan nilai pulangan |
shellcheck |
SC2086 ... Double quote to prevent globbing |
Letakkan pengembangan dalam tanda petikan: "$1" |
shfmt -d |
perbezaan antara <fail>.orig dan <fail> |
Jalankan shfmt -w <fail> dengan pilihan projek dan commit |
Untuk mengulang satu larian pada mesin anda, pasang versi yang sama dan jalankan arahan dalam jadual:
python3 -m venv .qc
.qc/bin/pip install ruff==0.6.9 mypy==1.11.2 shellcheck-py==0.10.0.1 shfmt-py==3.11.0.2
.qc/bin/ruff check . && .qc/bin/ruff format --check .
Mengkonfigur alat
Aliran kerja tidak menambah sebarang konfigurasi; ia berjalan dari akar repositori, jadi fail projek itu sendiri terpakai:
| Alat | Fail | Contoh |
|---|---|---|
| ruff | pyproject.toml |
[tool.ruff] dengan line-length = 100 |
| mypy | pyproject.toml |
[tool.mypy] dengan ignore_missing_imports bagi setiap modul |
| shellcheck | .shellcheckrc |
external-sources=true dan source-path=SCRIPTDIR |
| shfmt | .editorconfig |
[*.sh] dengan indent_size = 2 dan switch_case_indent = true |
shfmt mengikut gaya sesebuah projek hanya melalui .editorconfig. Projek shell yang memformat dengan bendera sendiri (contohnya shfmt -i 2 -ci) patut menjangka kegagalan format pada larian pertama dan menyatakan bendera itu di sana; pada penerimaan pertama (RepoFoundry) satu baris, switch_case_indent = true, sudah mencukupi dan tiada skrip diubah.
Apabila aliran kerja itu sendiri gagal
| Mesej | Punca | Pembetulan |
|---|---|---|
[configuration] Unknown language '<x>' |
languages mempunyai nilai selain python atau shell |
Betulkan input |
[configuration] working-directory must be a relative path inside the repository. |
Laluan mutlak atau .. |
Gunakan laluan di dalam repositori |
[configuration] working-directory '<x>' does not exist. |
Direktori itu tiada dalam repositori | Betulkan input |
| Langkah pemasangan gagal | PyPI atau rangkaian runner tidak dapat dicapai | Jalankan semula kerja itu; lihat troubleshooting.md |
TirSystem GitHub Actions
English
Dansk
Bahasa Melayu