swift-quality.sh (2143B)
1 #!/usr/bin/env bash 2 set -euo pipefail 3 4 ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" 5 cd "$ROOT" 6 7 readonly -a SOURCE_PATHS=( 8 Package.swift 9 Tera 10 TeraPublicAPITests 11 TeraTests 12 TeraUITests 13 ) 14 readonly -a MAINTAINABILITY_RULES=( 15 cyclomatic_complexity 16 file_length 17 function_body_length 18 function_parameter_count 19 large_tuple 20 type_body_length 21 ) 22 readonly -a PYTHON_QUALITY_PATHS=( 23 scripts/ffi_source.py 24 scripts/ffi_artifacts.py 25 scripts/ffi_build.py 26 scripts/ffi_installed.py 27 scripts/test_ffi_installed.py 28 scripts/test_ffi_artifacts.py 29 scripts/ffi_provenance.py 30 scripts/test_ffi_provenance.py 31 scripts/maintainability_ratchet.py 32 scripts/package_contract.py 33 scripts/package_privacy.py 34 scripts/test_package_privacy.py 35 scripts/legacy_identifiers.py 36 scripts/test_legacy_identifiers.py 37 scripts/app_dependency_graph.py 38 scripts/test_app_dependency_graph.py 39 scripts/test_maintainability_ratchet.py 40 scripts/test_package_contract.py 41 scripts/kotlin_smoke.py 42 scripts/test_kotlin_smoke.py 43 scripts/test_xcode_selection.py 44 ) 45 46 command -v swiftformat >/dev/null || { 47 echo "swift-quality: swiftformat is unavailable" >&2 48 exit 1 49 } 50 command -v swiftlint >/dev/null || { 51 echo "swift-quality: swiftlint is unavailable" >&2 52 exit 1 53 } 54 55 swiftformat --lint --strict --config .swiftformat "${SOURCE_PATHS[@]}" 56 swiftlint lint \ 57 --strict \ 58 --quiet \ 59 --no-cache \ 60 --silence-deprecation-warnings \ 61 --config .swiftlint.yml \ 62 "${SOURCE_PATHS[@]}" 63 64 metric_arguments=() 65 for rule in "${MAINTAINABILITY_RULES[@]}"; do 66 metric_arguments+=(--only-rule "$rule") 67 done 68 swiftlint lint \ 69 --strict \ 70 --quiet \ 71 --no-cache \ 72 --silence-deprecation-warnings \ 73 --config .swiftlint.yml \ 74 --baseline test-fixtures/swiftlint-maintainability-baseline.v1.json \ 75 "${metric_arguments[@]}" \ 76 "${SOURCE_PATHS[@]}" 77 78 uv run --offline --project scripts/persona-verifier ruff format --check "${PYTHON_QUALITY_PATHS[@]}" 79 uv run --offline --project scripts/persona-verifier ruff check "${PYTHON_QUALITY_PATHS[@]}" 80 uv run --offline --project scripts/persona-verifier python scripts/maintainability_ratchet.py verify