diff --git a/.github/workflows/static-analysis.yaml b/.github/workflows/static-analysis.yaml index aba7bf3b6b25..0e31c210c498 100644 --- a/.github/workflows/static-analysis.yaml +++ b/.github/workflows/static-analysis.yaml @@ -67,3 +67,52 @@ jobs: - name: Run pre-commit run: | pre-commit run --show-diff-on-failure --color=always --all-files + + type-completeness-check: + name: Type completeness check + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + persist-credentials: false + fetch-depth: 0 + + - name: Set up uv + uses: astral-sh/setup-uv@v4 + with: + python-version: "3.12" + + - name: Calculate type completeness score + id: calculate_current_score + run: | + # `pyright` will exit with a non-zero status code if it finds any issues, + # so we need to explicitly ignore the exit code with `|| true`. + uv tool run --with . pyright --verifytypes prefect --ignoreexternal --outputjson > prefect-analysis.json || true + SCORE=$(jq -r '.typeCompleteness.completenessScore' prefect-analysis.json) + echo "current_score=$SCORE" >> $GITHUB_OUTPUT + + - name: Checkout base branch + run: | + git checkout ${{ github.base_ref }} + + - name: Calculate base branch score + id: calculate_base_score + run: | + uv tool run --with . pyright --verifytypes prefect --ignoreexternal --outputjson > prefect-analysis-base.json || true + BASE_SCORE=$(jq -r '.typeCompleteness.completenessScore' prefect-analysis-base.json) + echo "base_score=$BASE_SCORE" >> $GITHUB_OUTPUT + + - name: Compare scores + run: | + CURRENT_SCORE=$(echo ${{ steps.calculate_current_score.outputs.current_score }}) + BASE_SCORE=$(echo ${{ steps.calculate_base_score.outputs.base_score }}) + + if (( $(echo "$BASE_SCORE > $CURRENT_SCORE" | bc -l) )); then + echo "❌ Type completeness score has decreased from $BASE_SCORE to $CURRENT_SCORE" >> $GITHUB_STEP_SUMMARY + echo "Please add type annotations to your code to increase the type completeness score." >> $GITHUB_STEP_SUMMARY + exit 1 + elif (( $(echo "$BASE_SCORE < $CURRENT_SCORE" | bc -l) )); then + echo "✅ Type completeness score has increased from $BASE_SCORE to $CURRENT_SCORE" >> $GITHUB_STEP_SUMMARY + else + echo "✅ Type completeness score remained unchanged at $BASE_SCORE" >> $GITHUB_STEP_SUMMARY + fi