field_ios

In-the-field app for Radroots on iOS
git clone https://radroots.dev/git/field_ios.git
Log | Files | Refs | README | LICENSE

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