Tindakan GitHub untuk menjalankan analisis statis tentang penggunaan Codechecker sebagai drivernya. Untuk proyek C-Family (C, C ++, Objective-C, CUDA, dll.), Codechecker mendukung mendorong program analisis statis dentang. Beberapa output analisis statis lainnya dapat diintegrasikan ke dalam Codechecker melalui konverter laporan.
Tindakan tunggal ini skrip komposit mencakup langkah -langkah berikut:
Catatan: Analisis statis dapat menjadi proses yang memakan waktu. Direkomendasikan bahwa langkah analisis statis tidak berurutan dengan sisa eksekusi CI, tetapi baik berjalan sebagai pekerjaannya sendiri dalam alur kerja, atau alur kerja yang sama sekali berbeda sama sekali.
Harap pastikan bahwa proyek Anda sepenuhnya dikonfigurasi untuk build sebelum menjalankan tindakan ini.
Catatan: Analisis statis dapat mengandalkan informasi tambahan yang dioptimalkan dalam pembangunan rilis yang sebenarnya. Oleh karena itu, disarankan untuk mengonfigurasi proyek Anda dalam konfigurasi Debug .
Tambahkan pekerjaan ke dalam CI Anda sebagai berikut. Kedua versi tersebut saling eksklusif - Anda dapat memberikan database kompilasi, atau Anda menginstruksikan Codechecker untuk membuat satu.
Beberapa proyek cukup sepele dalam konfigurasi build mereka sehingga tidak ada langkah tambahan yang perlu diambil setelah dieksekusi configure.sh , cmake , atau alat serupa. Jika Anda dapat menghasilkan database kompilasi dari sistem build Anda tanpa menjalankan build itu sendiri, Anda dapat menghemat waktu, dan segera pergi ke analisis.
Anda dapat menentukan database kompilasi yang dihasilkan dalam variabel logfile
job :
steps :
# Check YOUR project out!
- name : " Check out repository "
uses : actions/checkout@v2
# Prepare a build
- name : " Prepare build "
run : |
mkdir -pv Build
cd Build
cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
# Run the analysis
- uses : whisperity/codechecker-analysis-action@v1
id : codechecker
with :
logfile : ${{ github.workspace }}/Build/compile_commands.json
# Upload the results to the CI.
- uses : actions/upload-artifact@v2
with :
name : " CodeChecker Bug Reports "
path : ${{ steps.codechecker.outputs.result-html-dir }} Jenis proyek lain mungkin sangat bergantung pada kode yang dihasilkan . Ketika melihat kode sumber proyek -proyek ini tanpa bangunan telah dieksekusi sebelumnya, mereka tidak menyusun - dengan demikian, analisis tidak dapat dieksekusi juga.
Dalam hal ini, Anda perlu menginstruksikan Codechecker untuk mencatat build (dan menghabiskan waktu melakukan pembuatan) sebelum analisis.
Anda dapat menentukan build untuk dieksekusi dalam variabel build-command .
job :
steps :
# Check YOUR project out!
- name : " Check out repository "
uses : actions/checkout@v2
# Prepare a build
- name : " Prepare build "
run : |
mkdir -pv Build
cd Build
cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_EXPORT_COMPILE_COMMANDS=OFF
# Run the analysis
- uses : whisperity/codechecker-analysis-action@v1
id : codechecker
with :
build-command : " cd ${{ github.workspace }}/Build; cmake --build . "
# Upload the results to the CI.
- uses : actions/upload-artifact@v2
with :
name : " CodeChecker Bug Reports "
path : ${{ steps.codechecker.outputs.result-html-dir }} Jika diminta, variabel output warnings dapat dicocokkan dengan untuk menjalankan langkah dalam pekerjaan yang merusak seluruh pekerjaan jika ada peringatan analisis statis yang dipancarkan oleh proyek.
Catatan: Karena analisis statis berpotensi berisik dan laporan yang sulit diperbaiki, perilaku dan rekomendasi default adalah hanya melaporkan temuan tetapi tidak merusak seluruh CI.
Untuk mendapatkan laporan dalam bentuk yang dapat dikonsumsi manusia, mereka harus diunggah di suatu tempat terlebih dahulu, sebelum langkah kegagalan gagal seluruh pekerjaan!
job :
steps :
# Check YOUR project out!
- name : " Check out repository "
uses : actions/checkout@v2
# Prepare a build
- name : " Prepare build "
run : |
mkdir -pv Build
cd Build
cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_EXPORT_COMPILE_COMMANDS=OFF
# Run the analysis
- uses : whisperity/codechecker-analysis-action@v1
id : codechecker
with :
build-command : " cd ${{ github.workspace }}/Build; cmake --build . "
# Upload the results to the CI.
- uses : actions/upload-artifact@v2
with :
name : " CodeChecker Bug Reports "
path : ${{ steps.codechecker.outputs.result-html-dir }}
# Break the build if there are *ANY* warnings emitted by the analysers.
- name : " Break build if CodeChecker reported any findings "
if : ${{ steps.codechecker.outputs.warnings == 'true' }}
run : exit 1Jika proyek Anda meng -host server codechecker di suatu tempat, pekerjaan dapat dikonfigurasi untuk secara otomatis membuat atau memperbarui menjalankan.
# It is recommended that storing only happens for PUSH events, and preferably
# only for long-term branches.
on :
push :
job :
steps :
# Check YOUR project out!
- name : " Check out repository "
uses : actions/checkout@v2
# Prepare a build
- name : " Prepare build "
run : |
mkdir -pv Build
cd Build
cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_EXPORT_COMPILE_COMMANDS=OFF
# Run the analysis
- uses : whisperity/codechecker-analysis-action@v1
id : codechecker
with :
build-command : " cd ${{ github.workspace }}/Build; cmake --build . "
store : true
store-url : ' http://example.com:8001/MyProject '
store-username : ${{ secrets.CODECHECKER_STORE_USER }}
store-password : ${{ secrets.CODECHECKER_STORE_PASSWORD }}
# store-run-name: "custom run name to store against"Codechecker mampu menghitung perbedaan antara dua analisis. Jika analisis versi stabil dari proyek disimpan (lihat di atas) ke server, pekerjaan untuk permintaan tarik dapat dikonfigurasi yang secara otomatis menolak permintaan tarik jika mencoba memperkenalkan temuan analisis baru .
Untuk mendapatkan laporan dalam bentuk yang dapat dikonsumsi manusia, mereka harus diunggah di suatu tempat terlebih dahulu, sebelum langkah kegagalan gagal seluruh pekerjaan!
on :
pull_request :
runs :
steps :
# Check the pull request out! (In pull_request jobs, the checkout action
# automatically downloads the "after-merge" state of the pull request if
# there are no conflicts.)
- name : " Check out repository "
uses : actions/checkout@v2
# Prepare a build
- name : " Prepare build "
run : |
mkdir -pv Build
cd Build
cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_EXPORT_COMPILE_COMMANDS=OFF
# Run the analysis
- uses : whisperity/codechecker-analysis-action@v1
id : codechecker
with :
build-command : " cd ${{ github.workspace }}/Build; cmake --build . "
store : ${{ github.event_name == 'push' }}
store-url : ' http://example.com:8001/MyProject '
store-username : ${{ secrets.CODECHECKER_STORE_USER }}
store-password : ${{ secrets.CODECHECKER_STORE_PASSWORD }}
# Keep the names for 'store' and 'diff' in sync, or auto-generated!
# diff-run-name: "custom run name to store with"
diff : ${{ github.event_name == 'pull_request' }}
diff-url : ' http://example.com:8001/MyProject '
diff-username : ${{ secrets.CODECHECKER_DIFF_USER }}
diff-password : ${{ secrets.CODECHECKER_DIFF_PASSWORD }}
# diff-run-name: "custom run name to diff against"
# Upload the potential new findings results to the CI.
- uses : actions/upload-artifact@v2
if : ${{ steps.codechecker.outputs.warnings-in-diff == 'true' }}
with :
name : " New introduced results Bug Reports "
path : ${{ steps.codechecker.outputs.diff-html-dir }}
- name : " Fail the job if new findings are introduced "
if : ${{ steps.codechecker.outputs.warnings-in-diff == 'true' }}
shell : bash
run : |
echo "::error title=New static analysis warnings::Analysed commit would introduce new static analysis warnings and potential bugs to the project"
# Fail the build, after results were collected and uploaded.
exit 1 Tindakan tunggal ini skrip komposit mencakup langkah -langkah berikut:
report-converter untuk mengonversi laporan penganalisa lain ke format Codechecker.Catatan: Analisis statis dapat menjadi proses yang memakan waktu. Direkomendasikan bahwa langkah analisis statis tidak berurutan dengan sisa eksekusi CI, tetapi baik berjalan sebagai pekerjaannya sendiri dalam alur kerja, atau alur kerja yang sama sekali berbeda sama sekali.
Silakan merujuk ke dokumentasi penganalisa pilihan Anda untuk ini. Codechecker tidak mendukung mengarahkan analisis melalui alat eksternal, tetapi jika analisis yang berhasil telah dilakukan, itu dapat mengonversi dan menyimpan hasilnya.
job :
steps :
# Check YOUR project out!
- name : " Check out repository "
uses : actions/checkout@v2
# Perform the analysis. Details vary between analysers!
# Example for "PyLint" added below!
- name : " Analyse with PyLint "
run : |
sudo apt-get -y install pylint
pylint -f json --exit-zero myproject > pylint_reports.json
# Run the conversion
- uses : whisperity/codechecker-analysis-action@v1
id : codechecker
with :
report-converter : true
original-analyser : " pylint "
original-analysis-output : " pylint_reports.json "
# Upload the results (after conversion by CodeChecker) to the CI.
- uses : actions/upload-artifact@v2
with :
name : " CodeChecker Bug Reports "
path : ${{ steps.codechecker.outputs.result-html-dir }}Alat Laporan-Konverter mengonversi output dari berbagai analisis ke format umum yang digunakan oleh Codechecker. Setelah konversi selesai, sisa fitur aksi dapat dijalankan dengan cara yang sama seperti untuk proyek C/C ++. Silakan merujuk ke bagian -bagian sebelumnya dari dokumentasi untuk konfigurasi fitur -fitur ini.
| Variabel | Bawaan | Keterangan |
|---|---|---|
config | $(project-root)/.codechecker.json | File konfigurasi yang berisi bendera untuk ditambahkan ke perintah analisis. Dianjurkan agar sebagian besar konfigurasi analisis di versi dengan proyek. ? Baca lebih lanjut tentang file konfigurasi codechecker.json dalam dokumentasi resmi. |
| Variabel | Bawaan | Keterangan |
|---|---|---|
llvm-version | latest | Versi utama LLVM untuk diinstal dan digunakan. LLVM dipasang dari PPA komunitas. Nilai harus berupa versi utama (mis. 13 ) yang didukung oleh PPA untuk OS yang digunakan! Jika latest , kumpulkan versi terbaru (belum dirilis). Jika ignore , jangan instal apapun. (Tidak direkomendasikan.) |
install-custom | false | Jika diatur ke true , buka kemampuan untuk mengkloning secara lokal dan menginstal Codechecker dari repository dan version yang ditentukan. Kalau tidak, version diambil sebagai versi rilis, dan codechecker suite dari PYPI diunduh. |
repository | Ericsson/CodeChecker | Repositori CodeChecker untuk memeriksa dan membangun, jika install-custom true . |
version | master | Jika install-custom false , versi rilis (mis. 6.18.0 ) untuk diunduh dari PYPI, atau master untuk mengambil rilis terbaru. Kalau tidak, cabang (default ke master ), tag, atau komit SHA di repository untuk check out. |
? Baca lebih lanjut tentang CodeChecker log dalam dokumentasi resmi.
| Variabel | Bawaan | Keterangan |
|---|---|---|
logfile | Lokasi database kompilasi JSON yang menjelaskan bagaimana proyek dibangun. Bendera ini digunakan jika sistem build dapat pra-menghasilkan file untuk kami. | |
build-command | Perintah build untuk mengeksekusi. Codechecker mampu mengeksekusi dan mencatat build untuk dirinya sendiri. Bendera ini digunakan jika sistem build tidak dapat menghasilkan informasi dengan sendirinya, atau proyek bergantung pada kode yang dihasilkan lainnya. |
? Baca lebih lanjut tentang CodeChecker analyze dalam dokumentasi resmi.
| Variabel | Bawaan | Keterangan |
|---|---|---|
analyze-output | (dihasilkan secara otomatis) | Direktori di mana output analisis mentah harus disimpan. |
ctu | false | Aktifkan analisis unit terjemahan silang dalam penganalisa statis dentang . |
ignore-analyze-crashes | true | Jika diatur ke true , fase analisis tidak akan melaporkan kesalahan jika beberapa tindakan analisis gagal (karena potensi crash di dentang). |
? Baca lebih lanjut tentang CodeChecker parse dalam dokumentasi resmi.
? Baca lebih lanjut tentang report-converter dalam dokumentasi resmi.
| Variabel | Bawaan | Keterangan |
|---|---|---|
report-converter | false | Jika diatur ke true , pekerjaan itu akan menjalankan konversi laporan dari analisis lain alih -alih mengendarai analisis statis dengan sendirinya. |
original-analyser | "Jenis" analisis yang telah dilakukan sebelumnya. Disahkan sebagai input wajib ke report-converter yang dapat dieksekusi. | |
original-analysis-output | File atau direktori di mana hasil penganalisis pihak ketiga tersedia. Disahkan sebagai input wajib ke report-converter yang dapat dieksekusi. |
? Baca lebih lanjut tentang CodeChecker cmd diff dalam dokumentasi resmi.
? Memeriksa hasil analisis terhadap konten server memerlukan izin PRODUCT_VIEW , jika server memerlukan otentikasi.
| Variabel | Bawaan | Keterangan |
|---|---|---|
diff | false | Jika diatur ke true , pekerjaan akan menghitung perbedaan dari hasil analisis saat ini terhadap hasil yang disimpan di server jarak jauh. |
diff-url | URL produk Codechecker untuk memeriksa dan membedakan, termasuk titik akhir. Biasanya dalam format http://example.com/ProductName . Menentukan variabel ini diperlukan jika diff diatur ke true . | |
diff-username | Jika server memerlukan otentikasi untuk mengakses, tentukan nama pengguna yang harus masuk. | |
diff-password | Kata sandi atau token akses yang dihasilkan sesuai dengan pengguna. ? Catatan: Disarankan bahwa ini dikonfigurasi sebagai rahasia repositori, dan diberikan demikian: ${{ secrets.CODECHECKER_PASSWORD }} Saat mengkonfigurasi tindakan. | |
diff-run-name | (dihasilkan secara otomatis, dalam format user/repo: branchname ) | Eksekusi analisis codechecker dikumpulkan menjadi berjalan . Jalankan biasanya berkorelasi dengan satu konfigurasi analisis. |
? Baca lebih lanjut tentang CodeChecker store di dokumentasi resmi.
? Menyimpan berjalan ke server memerlukan izin PRODUCT_STORE , jika server memerlukan otentikasi.
| Variabel | Bawaan | Keterangan |
|---|---|---|
store | false | Jika diatur ke true , skrip akan mengunggah temuan ke server Codechecker. Biasanya, bendera lain juga perlu dikonfigurasi! |
store-url | URL produk Codechecker untuk disimpan, termasuk titik akhir. Biasanya dalam format http://example.com/ProductName . Menentukan variabel ini diperlukan jika store diatur ke true . | |
store-username | Jika server memerlukan otentikasi untuk mengakses, tentukan nama pengguna yang harus diunggah. | |
store-password | Kata sandi atau token akses yang dihasilkan sesuai dengan pengguna. ? Catatan: Disarankan bahwa ini dikonfigurasi sebagai rahasia repositori, dan diberikan demikian: ${{ secrets.CODECHECKER_PASSWORD }} Saat mengkonfigurasi tindakan. | |
store-run-name | (dihasilkan secara otomatis, dalam format user/repo: branchname ) | Eksekusi analisis codechecker dikumpulkan menjadi berjalan . Jalankan biasanya berkorelasi dengan satu konfigurasi analisis. Runs dapat disimpan secara bertahap, dalam hal ini Codechecker dapat memberi anotasi bahwa laporan diperbaiki. |
outputs tindakan untuk digunakan dalam langkah lebih lanjutTindakan ini memperlihatkan output berikut yang dapat digunakan dalam langkah -langkah alur kerja yang menggantikan analisis.
| Variabel | Nilai | Keterangan |
|---|---|---|
analyze-output | Input yang dihasilkan secara otomatis, atau analyze-output | Direktori di mana file output analisis mentah (baik dibuat oleh analisis, atau oleh konverter) tersedia. |
codechecker-version | Dihasilkan secara otomatis (kemungkinan sama dengan version input) | Versi codechecker yang diinstal yang melakukan analisis. |
codechecker-hash | Dihasilkan secara otomatis. | Hash git dari codechecker terpasang yang melakukan analisis. |
logfile | Input yang dihasilkan secara otomatis, atau logfile | Database kompilasi JSON dari analisis yang dieksekusi. |
llvm-version | Dihasilkan secara otomatis. | String versi lengkap dari paket LLVM/Clang yang diinstal (seperti yang dilaporkan oleh clang --version ). |
diff-html-dir | Dihasilkan secara otomatis. | Direktori di mana laporan bug HTML yang ramah pengguna dihasilkan tentang tentang temuan baru (jika diff diaktifkan). |
diff-result-log | Dihasilkan secara otomatis. | File log keluaran CodeChecker cmd diff yang berisi temuan baru yang dibuang ke dalamnya. |
diff-run-name | Input yang dihasilkan secara otomatis, atau diff-run-name | Nama analisis yang dijalankan (jika diff diaktifkan) terhadap laporan yang dibandingkan. |
result-html-dir | Dihasilkan secara otomatis. | Direktori tempat laporan bug HTML yang ramah pengguna dihasilkan. |
result-log | Dihasilkan secara otomatis. | File log keluaran CodeChecker parse yang berisi temuan yang dibuang ke dalamnya. |
store-run-name | Input yang dihasilkan secara otomatis, atau store-run-name | Nama analisis menjalankan (jika store diaktifkan) yang hasilnya diunggah. |
store-successful | true atau false | Apakah menyimpan hasilnya berhasil. Berguna untuk secara opsional melanggar build nanti untuk mendeteksi kegagalan jaringan. |
warnings | true atau false | Apakah analisis statis melaporkan temuan apa pun. |
warnings-in-diff | true atau false | Jika diff diaktifkan, apakah ada temuan baru dalam analisis saat ini jika dibandingkan dengan konten server. |