我創建了一個 GitHub 操作管道來對最近提交的代碼進行 linting。測驗腳本在我的本地環境中有效,但在 GitHub 服務器上無效。我沒有注意到什么特點?
這是我的 linting 代碼:
#!/usr/bin/env bash
LATEST_COMMIT=$(git rev-parse HEAD);
echo "Analyzing code changes under the commit hash: $LATEST_COMMIT";
FILES_UNDER_THE_LATEST_COMMIT=$(git diff-tree --no-commit-id --name-only -r $LATEST_COMMIT);
echo "Files under the commit:";
echo $FILES_UNDER_THE_LATEST_COMMIT;
MATCHES=$(echo $FILES_UNDER_THE_LATEST_COMMIT | grep '.py');
echo "Files under the commit with Python extension: $MATCHES";
echo "Starting linting...";
if echo $MATCHES | grep -q '.py';
then
echo $MATCHES | xargs pylint --rcfile .pylintrc;
else
echo "Nothing to lint";
fi
這是我的 GitHub 操作配置:
name: Pylint
on: [push]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ["3.10"]
steps:
- uses: actions/checkout@v3
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v3
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
if: "!contains(github.event.head_commit.message, 'NO_LINT')"
run: |
python -m pip install --upgrade pip
pip install pylint psycopg2 snowflake-connector-python pymssql
chmod x .github/workflows/run_linting.sh
- name: Analysing all Python scripts in the project with Pylint
if: "contains(github.event.head_commit.message, 'CHECK_ALL')"
run: pylint --rcfile .pylintrc lib processes tests
- name: Analysing the latest committed changes Pylint
if: "!contains(github.event.head_commit.message, 'NO_LINT')"
run: .github/workflows/run_linting.sh
我在 GitHub 中得到的:

我的電腦上有什么:

uj5u.com熱心網友回復:
簡而言之,這是您的問題:
steps: - uses: actions/checkout@v3
默認情況下,checkout@v2創建checkout@v3一個淺(深度 1)的單分支克隆。這樣的克隆只有一個提交:最近的一個。
因此,這:
git diff-tree --no-commit-id --name-only -r $LATEST_COMMIT
根本不產生任何輸出。沒有可用于比較的父提交。(我認為這是 Git 中的一個錯誤:git diff-tree應該注意到由于移植檔案而缺少父級。但是,傳統上會為根提交產生一個空差異,并且在沒有特殊處理的情況下,淺克隆讓人認為這是一個根提交。奇怪的是,面向用戶的系統會將每個檔案都視為已添加 - 仍然不是您想要的,但它確實可以作業。).git/shallowgit diff-tree git diff-treegit diff-tree git diff
要解決此問題,請強制深度至少為 2。使用depth: 0將強制執行完整(非淺)克隆,但使用淺單分支克隆的原因是通過省略不必要的提交來加速操作。由于這里只需要提交的前兩個“層”,因此depth: 2提供了正確的數字。
旁注:您的bash代碼中的每個命令都以分號結尾。這很好用,但沒有必要(它讓我想起了太多的 C 或 C 編程。1 此外,您可以運行git diff-tree <options> HEAD:這里不需要單獨的git rev-parse步驟(盡管您可能仍然希望在 中這樣做echo)。
1當我從 C 切換到 C 到 Go 到 Python 到 shell 等時,我要么放入太多或太少的括號和分號,導致 C 編譯器錯誤來自:
if x == 0 {
因為我的大腦處于 Go 模式。?? 當我切換回 hacking Go 代碼時,我放入了太多括號,但gofmt洗掉它們并且沒有編譯錯誤。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/493152.html
