mirror of
https://github.com/sunnypilot/sunnypilot.git
synced 2026-09-10 15:43:42 +08:00
83 lines
2.7 KiB
YAML
83 lines
2.7 KiB
YAML
name: Test Models Compatibility With Tinygrad Changes
|
|
on:
|
|
push:
|
|
paths:
|
|
- 'tinygrad_repo'
|
|
pull_request:
|
|
paths:
|
|
- 'tinygrad_repo'
|
|
workflow_dispatch:
|
|
|
|
jobs:
|
|
generate-matrix:
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
models: ${{ steps.set-matrix.outputs.models }}
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: Fetch and Parse json
|
|
id: set-matrix
|
|
run: |
|
|
python3 -c '
|
|
import json, urllib.request, os, re
|
|
|
|
with open("openpilot/sunnypilot/models/fetcher.py", "r") as f:
|
|
urls = re.findall(r"MODEL_URL(?:_CHESTNUT)?\s*=\s*[\"'"'"']([^\"'"'"']+)[\"'"'"']", f.read())
|
|
|
|
artifacts = []
|
|
for url in urls:
|
|
data = json.loads(urllib.request.urlopen(url).read())
|
|
for bundle in data.get("bundles", []):
|
|
for model in bundle.get("models", []):
|
|
if "artifact" in model:
|
|
artifacts.append(model["artifact"])
|
|
|
|
with open(os.environ["GITHUB_OUTPUT"], "a") as f:
|
|
f.write(f"models={json.dumps(artifacts)}\n")
|
|
'
|
|
|
|
test-model:
|
|
name: Test ${{ matrix.artifact.file_name }}
|
|
needs: generate-matrix
|
|
runs-on: ubuntu-latest
|
|
container: ghcr.io/commaai/openpilot-base:latest
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
artifact: ${{ fromJson(needs.generate-matrix.outputs.models) }}
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
submodules: true
|
|
|
|
- name: Download Model Chunks in Parallel
|
|
run: |
|
|
mkdir -p /tmp/model_chunks
|
|
echo '${{ toJson(matrix.artifact.chunks) }}' > chunks.json
|
|
|
|
BASE_URL="${{ matrix.artifact.download_uri.url }}"
|
|
export BASE_DIR=$(dirname "$BASE_URL")
|
|
|
|
python3 -c '
|
|
import json, os
|
|
with open("chunks.json") as f:
|
|
chunks = json.load(f)
|
|
manifest_path = f"/tmp/model_chunks/${{ matrix.artifact.file_name }}.chunkmanifest"
|
|
with open(manifest_path, "w") as f:
|
|
f.write(str(len(chunks)))
|
|
base_dir = os.environ["BASE_DIR"]
|
|
with open("/tmp/curl_config.txt", "w") as f:
|
|
for c in chunks:
|
|
fn = c["file_name"]
|
|
f.write(f"url = \"{base_dir}/{fn}\"\noutput = \"/tmp/model_chunks/{fn}\"\n")
|
|
'
|
|
curl -Z --parallel-immediate --parallel-max 16 -s -S -f -L -K /tmp/curl_config.txt
|
|
|
|
- name: Run Model Compatibility Test
|
|
env:
|
|
MODEL_BASE_NAME: ${{ matrix.artifact.file_name }}
|
|
MODEL_CHUNK_DIR: "/tmp/model_chunks"
|
|
PYTHONPATH: ".:./tinygrad_repo"
|
|
run: |
|
|
python3 -m pytest openpilot/sunnypilot/modeld_v2/tests/test_models.py
|