Skip to content
This repository was archived by the owner on May 1, 2024. It is now read-only.

Commit 709ba8a

Browse files
authored
Merge pull request #6 from eFiniLan/2023.08.24
2023.08.24
2 parents 233bce1 + 8d8aed5 commit 709ba8a

File tree

822 files changed

+18649
-26145
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

822 files changed

+18649
-26145
lines changed

.devcontainer/.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
.Xauthority

.devcontainer/Dockerfile

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
FROM ghcr.io/commaai/openpilot-base:latest
2+
3+
# remove gitconfig if exists, since its gonna be replaced by host one
4+
RUN rm -f /root/.gitconfig
5+
RUN apt update && apt install -y vim net-tools usbutils htop ripgrep
6+
RUN pip install ipython jupyter jupyterlab

.devcontainer/devcontainer.json

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
{
2+
"name": "openpilot devcontainer",
3+
"build": {
4+
"dockerfile": "Dockerfile"
5+
},
6+
"postCreateCommand": "bash -c 'if [[ $DISPLAY == *xquartz* ]]; then echo \"export DISPLAY=host.docker.internal:0\" >> /root/.bashrc; fi'",
7+
"postStartCommand": "git config --file .gitmodules --get-regexp path | awk '{ print $2 }' | xargs -I{} git config --global --add safe.directory \"$PWD/{}\"",
8+
"initializeCommand": ".devcontainer/setup_host.sh",
9+
"privileged": true,
10+
"containerEnv": {
11+
"DISPLAY": "${localEnv:DISPLAY}",
12+
"PYTHONPATH": "${containerWorkspaceFolder}",
13+
"force_color_prompt": "1"
14+
},
15+
"runArgs": [
16+
"--volume=/tmp/.X11-unix:/tmp/.X11-unix",
17+
"--volume=${localWorkspaceFolder}/.devcontainer/.Xauthority:/root/.Xauthority",
18+
"--volume=${localEnv:HOME}/.comma:/root/.comma",
19+
"--volume=/tmp/comma_download_cache:/tmp/comma_download_cache",
20+
"--volume=/tmp/devcontainer_scons_cache:/tmp/scons_cache",
21+
"--shm-size=1G"
22+
]
23+
}

.devcontainer/setup_host.sh

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
#!/usr/bin/env bash
2+
3+
# setup links to Xauthority
4+
XAUTHORITY_LINK=".devcontainer/.Xauthority"
5+
rm -f $XAUTHORITY_LINK
6+
if [[ -z $XAUTHORITY ]]; then
7+
echo "XAUTHORITY not set. Fallback to ~/.Xauthority ..."
8+
if ! [[ -f $HOME/.Xauthority ]]; then
9+
echo "~/.XAuthority file does not exist. GUI tools may not work properly."
10+
touch $XAUTHORITY_LINK # dummy file to satisfy container volume mount
11+
else
12+
ln -sf $HOME/.Xauthority $XAUTHORITY_LINK
13+
fi
14+
else
15+
ln -sf $XAUTHORITY $XAUTHORITY_LINK
16+
fi

.dockerignore

+3
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@
1616
*.so
1717
*.a
1818

19+
venv/
20+
.venv/
21+
1922
notebooks
2023
phone
2124
massivemap

.gitattributes

+1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
*.dlc filter=lfs diff=lfs merge=lfs -text
22
*.onnx filter=lfs diff=lfs merge=lfs -text
3+
selfdrive/car/tests/test_models_segs.txt filter=lfs diff=lfs merge=lfs -text

.github/workflows/badges.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ on:
77
env:
88
BASE_IMAGE: openpilot-base
99
DOCKER_REGISTRY: ghcr.io/commaai
10-
RUN: docker run --shm-size 1G -v $PWD:/tmp/openpilot -w /tmp/openpilot -e PYTHONPATH=/tmp/openpilot -e NUM_JOBS -e JOB_ID -e GITHUB_ACTION -e GITHUB_REF -e GITHUB_HEAD_REF -e GITHUB_SHA -e GITHUB_REPOSITORY -e GITHUB_RUN_ID -v /tmp/scons_cache:/tmp/scons_cache -v /tmp/comma_download_cache:/tmp/comma_download_cache -v /tmp/openpilot_cache:/tmp/openpilot_cache $DOCKER_REGISTRY/$BASE_IMAGE:latest /bin/sh -c
10+
RUN: docker run --shm-size 1G -v $PWD:/tmp/openpilot -w /tmp/openpilot -e PYTHONPATH=/tmp/openpilot -e NUM_JOBS -e JOB_ID -e GITHUB_ACTION -e GITHUB_REF -e GITHUB_HEAD_REF -e GITHUB_SHA -e GITHUB_REPOSITORY -e GITHUB_RUN_ID -v ~/scons_cache:/tmp/scons_cache -v ~/comma_download_cache:/tmp/comma_download_cache -v ~/openpilot_cache:/tmp/openpilot_cache $DOCKER_REGISTRY/$BASE_IMAGE:latest /bin/sh -c
1111

1212
jobs:
1313
badges:

.github/workflows/prebuilt.yaml

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ env:
1010

1111
DOCKER_LOGIN: docker login ghcr.io -u ${{ github.actor }} -p ${{ secrets.GITHUB_TOKEN }}
1212
BUILD: |
13-
DOCKER_BUILDKIT=1 docker build --pull --build-arg BUILDKIT_INLINE_CACHE=1 --cache-from $DOCKER_REGISTRY/$BASE_IMAGE:latest -t $DOCKER_REGISTRY/$BASE_IMAGE:latest -t $BASE_IMAGE:latest -f Dockerfile.openpilot_base .
13+
DOCKER_BUILDKIT=1 docker build --pull --cache-to type=inline --cache-from $DOCKER_REGISTRY/$BASE_IMAGE:latest -t $DOCKER_REGISTRY/$BASE_IMAGE:latest -t $BASE_IMAGE:latest -f Dockerfile.openpilot_base .
1414
1515
jobs:
1616
build_prebuilt:
@@ -34,7 +34,7 @@ jobs:
3434
- name: Build Docker image
3535
run: |
3636
eval "$BUILD"
37-
DOCKER_BUILDKIT=1 docker build --pull --build-arg BUILDKIT_INLINE_CACHE=1 --cache-from $DOCKER_REGISTRY/$IMAGE_NAME:latest -t $DOCKER_REGISTRY/$IMAGE_NAME:latest -f Dockerfile.openpilot .
37+
DOCKER_BUILDKIT=1 docker build --pull --cache-to type=inline --cache-from $DOCKER_REGISTRY/$IMAGE_NAME:latest -t $DOCKER_REGISTRY/$IMAGE_NAME:latest -f Dockerfile.openpilot .
3838
- name: Push to container registry
3939
run: |
4040
$DOCKER_LOGIN

.github/workflows/selfdrive_tests.yaml

+56-54
Original file line numberDiff line numberDiff line change
@@ -2,29 +2,31 @@ name: selfdrive
22

33
on:
44
push:
5-
branches-ignore:
6-
- 'testing-closet*'
5+
branches:
6+
- master
77
pull_request:
88

99
concurrency:
1010
group: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' && github.run_id || github.head_ref || github.ref }}-${{ github.workflow }}-${{ github.event_name }}
1111
cancel-in-progress: true
1212

1313
env:
14+
PYTHONWARNINGS: error
15+
1416
BASE_IMAGE: openpilot-base
1517
CL_BASE_IMAGE: openpilot-base-cl
1618
DOCKER_REGISTRY: ghcr.io/commaai
1719
AZURE_TOKEN: ${{ secrets.AZURE_COMMADATACI_OPENPILOTCI_TOKEN }}
1820

1921
DOCKER_LOGIN: docker login ghcr.io -u ${{ github.actor }} -p ${{ secrets.GITHUB_TOKEN }}
2022
BUILD: |
21-
DOCKER_BUILDKIT=1 docker build --pull --build-arg BUILDKIT_INLINE_CACHE=1 --cache-from $DOCKER_REGISTRY/$BASE_IMAGE:latest -t $DOCKER_REGISTRY/$BASE_IMAGE:latest -t $BASE_IMAGE:latest -f Dockerfile.openpilot_base .
23+
DOCKER_BUILDKIT=1 docker build --pull --cache-to type=inline --cache-from $DOCKER_REGISTRY/$BASE_IMAGE:latest -t $DOCKER_REGISTRY/$BASE_IMAGE:latest -t $BASE_IMAGE:latest -f Dockerfile.openpilot_base .
2224
23-
RUN: docker run --shm-size 1G -v $PWD:/tmp/openpilot -w /tmp/openpilot -e FILEREADER_CACHE=1 -e PYTHONPATH=/tmp/openpilot -e NUM_JOBS -e JOB_ID -e GITHUB_ACTION -e GITHUB_REF -e GITHUB_HEAD_REF -e GITHUB_SHA -e GITHUB_REPOSITORY -e GITHUB_RUN_ID -v /tmp/scons_cache:/tmp/scons_cache -v /tmp/comma_download_cache:/tmp/comma_download_cache -v /tmp/openpilot_cache:/tmp/openpilot_cache $BASE_IMAGE /bin/sh -c
25+
RUN: docker run --shm-size 1G -v $PWD:/tmp/openpilot -w /tmp/openpilot -e PYTHONWARNINGS=error -e FILEREADER_CACHE=1 -e PYTHONPATH=/tmp/openpilot -e NUM_JOBS -e JOB_ID -e GITHUB_ACTION -e GITHUB_REF -e GITHUB_HEAD_REF -e GITHUB_SHA -e GITHUB_REPOSITORY -e GITHUB_RUN_ID -v ~/scons_cache:/tmp/scons_cache -v ~/comma_download_cache:/tmp/comma_download_cache -v ~/openpilot_cache:/tmp/openpilot_cache $BASE_IMAGE /bin/sh -c
2426

2527
BUILD_CL: |
26-
DOCKER_BUILDKIT=1 docker build --build-arg BUILDKIT_INLINE_CACHE=1 --cache-from $DOCKER_REGISTRY/$CL_BASE_IMAGE:latest -t $DOCKER_REGISTRY/$CL_BASE_IMAGE:latest -t $CL_BASE_IMAGE:latest -f Dockerfile.openpilot_base_cl .
27-
RUN_CL: docker run --shm-size 1G -v $PWD:/tmp/openpilot -w /tmp/openpilot -e PYTHONPATH=/tmp/openpilot -e NUM_JOBS -e JOB_ID -e GITHUB_ACTION -e GITHUB_REF -e GITHUB_HEAD_REF -e GITHUB_SHA -e GITHUB_REPOSITORY -e GITHUB_RUN_ID -v /tmp/scons_cache:/tmp/scons_cache -v /tmp/comma_download_cache:/tmp/comma_download_cache -v /tmp/openpilot_cache:/tmp/openpilot_cache $CL_BASE_IMAGE /bin/sh -c
28+
DOCKER_BUILDKIT=1 docker build --cache-to type=inline --cache-from $DOCKER_REGISTRY/$CL_BASE_IMAGE:latest -t $DOCKER_REGISTRY/$CL_BASE_IMAGE:latest -t $CL_BASE_IMAGE:latest -f Dockerfile.openpilot_base_cl .
29+
RUN_CL: docker run --shm-size 1G -v $PWD:/tmp/openpilot -w /tmp/openpilot -e PYTHONWARNINGS=error -e PYTHONPATH=/tmp/openpilot -e NUM_JOBS -e JOB_ID -e GITHUB_ACTION -e GITHUB_REF -e GITHUB_HEAD_REF -e GITHUB_SHA -e GITHUB_REPOSITORY -e GITHUB_RUN_ID -v ~/scons_cache:/tmp/scons_cache -v ~/comma_download_cache:/tmp/comma_download_cache -v ~/openpilot_cache:/tmp/openpilot_cache $CL_BASE_IMAGE /bin/sh -c
2830

2931
UNIT_TEST: coverage run --append -m unittest discover
3032

@@ -39,30 +41,33 @@ jobs:
3941
with:
4042
submodules: true
4143
- name: Build devel
44+
timeout-minutes: 1
4245
run: TARGET_DIR=$STRIPPED_DIR release/build_devel.sh
4346
- uses: ./.github/workflows/setup
4447
- name: Check submodules
4548
if: github.ref == 'refs/heads/master' && github.repository == 'commaai/openpilot'
49+
timeout-minutes: 1
4650
run: release/check-submodules.sh
4751
- name: Build openpilot and run checks
52+
timeout-minutes: ${{ ((steps.restore-scons-cache.outputs.cache-hit == 'true') && 10 || 30) }} # allow more time when we missed the scons cache
4853
run: |
4954
cd $STRIPPED_DIR
5055
${{ env.RUN }} "CI=1 python selfdrive/manager/build.py"
5156
- name: Run tests
57+
timeout-minutes: 2
5258
run: |
5359
cd $STRIPPED_DIR
5460
${{ env.RUN }} "release/check-dirty.sh && \
5561
python -m unittest discover selfdrive/car"
5662
- name: pre-commit
63+
timeout-minutes: 3
5764
run: |
5865
cd $GITHUB_WORKSPACE
5966
cp .pre-commit-config.yaml $STRIPPED_DIR
60-
cp .pylintrc $STRIPPED_DIR
61-
cp mypy.ini $STRIPPED_DIR
6267
cp pyproject.toml $STRIPPED_DIR
6368
cp poetry.lock $STRIPPED_DIR
6469
cd $STRIPPED_DIR
65-
${{ env.RUN }} "pre-commit run --all"
70+
${{ env.RUN }} "unset PYTHONWARNINGS && pre-commit run --all"
6671
6772
build_all:
6873
name: build all
@@ -72,14 +77,20 @@ jobs:
7277
with:
7378
submodules: true
7479
- uses: ./.github/workflows/setup
75-
with:
76-
save-cache: true
7780
- name: Build openpilot with all flags
81+
timeout-minutes: ${{ ((steps.restore-scons-cache.outputs.cache-hit == 'true') && 12 || 30) }} # allow more time when we missed the scons cache
7882
run: ${{ env.RUN }} "scons -j$(nproc) --extras && release/check-dirty.sh"
79-
- name: Cleanup scons cache
83+
- name: Cleanup scons cache and rebuild
84+
timeout-minutes: ${{ ((steps.restore-scons-cache.outputs.cache-hit == 'true') && 2 || 30) }} # allow more time when we missed the scons cache
8085
run: |
8186
${{ env.RUN }} "rm -rf /tmp/scons_cache/* && \
8287
scons -j$(nproc) --cache-populate"
88+
- name: Save scons cache
89+
uses: actions/cache/save@v3
90+
if: github.ref == 'refs/heads/master'
91+
with:
92+
path: ~/scons_cache
93+
key: scons-${{ env.CACHE_COMMIT_DATE }}-${{ github.sha }}
8394

8495
build_mac:
8596
name: build macos
@@ -103,9 +114,11 @@ jobs:
103114
restore-keys: macos_scons-
104115
- name: Cache dependencies
105116
id: dependency-cache
106-
uses: actions/cache@v2
117+
uses: actions/cache@v3
107118
with:
108119
path: |
120+
.env
121+
.venv
109122
~/github_brew_cache_entries.txt
110123
~/.pyenv
111124
~/Library/Caches/pypoetry
@@ -116,7 +129,7 @@ jobs:
116129
/opt/homebrew/opt
117130
/opt/homebrew/Caskroom/gcc-arm-*
118131
/Applications/ArmGNUToolchain/*/*/*
119-
key: macos_deps-${{ hashFiles('tools/mac_setup.sh', 'update_requirements.sh', 'poetry.lock') }}
132+
key: macos_deps-${{ hashFiles('tools/mac_setup.sh', 'tools/install_python_dependencies.sh', 'poetry.lock') }}
120133
restore-keys: macos_deps-
121134
- name: Brew link restored dependencies
122135
run: |
@@ -132,20 +145,22 @@ jobs:
132145
- name: Install dependencies
133146
if: steps.dependency-cache.outputs.cache-hit != 'true'
134147
run: ./tools/mac_setup.sh
148+
env:
149+
# package install has DeprecationWarnings
150+
PYTHONWARNINGS: default
135151
- name: Build openpilot
136152
run: |
137-
source tools/openpilot_env.sh
153+
eval "$(pyenv init --path)"
138154
poetry run scons -j$(nproc)
139155
- name: Run tests
140156
run: |
141-
source tools/openpilot_env.sh
142-
export PYTHONPATH=$PWD
157+
eval "$(pyenv init --path)"
143158
poetry run tools/plotjuggler/test_plotjuggler.py
144159
- name: Pre Cache - Cleanup scons cache
145160
if: github.ref == 'refs/heads/master'
146161
run: |
147-
source tools/openpilot_env.sh
148162
rm -rf /tmp/scons_cache/*
163+
eval "$(pyenv init --path)"
149164
poetry run scons -j$(nproc) --cache-populate
150165
- name: Save scons cache
151166
id: scons-save-cache
@@ -158,8 +173,9 @@ jobs:
158173
if: steps.dependency-cache.outputs.cache-hit != 'true'
159174
run: |
160175
new_cellar=$(brew list --formula -1)
176+
exceptions="zstd lz4 xz" # caching step needs zstd
161177
comm -12 <(echo "$EXISTING_CELLAR") <(echo "$new_cellar") | while read pkg; do
162-
if [[ $pkg != "zstd" ]]; then # caching step needs zstd
178+
if [[ " $exceptions " != *" $pkg "* ]]; then
163179
rm -rf "$(brew --cellar)/$pkg"
164180
fi
165181
done
@@ -203,7 +219,8 @@ jobs:
203219
- name: Build Docker image
204220
run: eval "$BUILD"
205221
- name: pre-commit
206-
run: ${{ env.RUN }} "pre-commit run --all"
222+
timeout-minutes: 4
223+
run: ${{ env.RUN }} "unset PYTHONWARNINGS && pre-commit run --all"
207224

208225
valgrind:
209226
name: valgrind
@@ -216,6 +233,7 @@ jobs:
216233
- name: Build openpilot
217234
run: ${{ env.RUN }} "scons -j$(nproc)"
218235
- name: Run valgrind
236+
timeout-minutes: 1
219237
run: |
220238
${{ env.RUN }} "python selfdrive/test/test_valgrind_replay.py"
221239
- name: Print logs
@@ -231,8 +249,10 @@ jobs:
231249
submodules: true
232250
- uses: ./.github/workflows/setup
233251
- name: Build openpilot
252+
timeout-minutes: ${{ ((steps.restore-scons-cache.outputs.cache-hit == 'true') && 10 || 30) }} # allow more time when we missed the scons cache
234253
run: ${{ env.RUN }} "scons -j$(nproc)"
235254
- name: Run unit tests
255+
timeout-minutes: 40
236256
run: |
237257
${{ env.RUN }} "export SKIP_LONG_TESTS=1 && \
238258
$UNIT_TEST common && \
@@ -243,6 +263,7 @@ jobs:
243263
$UNIT_TEST system/loggerd && \
244264
$UNIT_TEST selfdrive/car && \
245265
$UNIT_TEST selfdrive/locationd && \
266+
$UNIT_TEST selfdrive/test/longitudinal_maneuvers && \
246267
$UNIT_TEST system/tests && \
247268
$UNIT_TEST system/ubloxd && \
248269
selfdrive/locationd/test/_test_locationd_lib.py && \
@@ -255,6 +276,7 @@ jobs:
255276
QT_QPA_PLATFORM=offscreen ./selfdrive/ui/tests/test_translations && \
256277
./selfdrive/ui/tests/test_translations.py && \
257278
./common/tests/test_util && \
279+
./common/tests/test_ratekeeper && \
258280
./common/tests/test_swaglog && \
259281
./selfdrive/boardd/tests/test_boardd_usbprotocol && \
260282
./system/loggerd/tests/test_logger &&\
@@ -279,12 +301,13 @@ jobs:
279301
id: dependency-cache
280302
uses: actions/cache@v3
281303
with:
282-
path: /tmp/comma_download_cache
304+
path: ~/comma_download_cache
283305
key: proc-replay-${{ hashFiles('.github/workflows/selfdrive_tests.yaml', 'selfdrive/test/process_replay/ref_commit') }}
284306
- name: Build openpilot
285307
run: |
286308
${{ env.RUN }} "scons -j$(nproc)"
287309
- name: Run replay
310+
timeout-minutes: 30
288311
run: |
289312
${{ env.RUN }} "CI=1 coverage run selfdrive/test/process_replay/test_processes.py -j$(nproc) && \
290313
coverage xml"
@@ -321,43 +344,22 @@ jobs:
321344
- name: Build openpilot
322345
run: |
323346
${{ env.RUN }} "scons -j$(nproc)"
347+
# PYTHONWARNINGS triggers a SyntaxError in onnxruntime
324348
- name: Run model replay with ONNX
349+
timeout-minutes: 2
325350
run: |
326-
${{ env.RUN_CL }} "ONNXCPU=1 CI=1 NO_NAV=1 coverage run selfdrive/test/process_replay/model_replay.py && \
351+
${{ env.RUN_CL }} "unset PYTHONWARNINGS && \
352+
ONNXCPU=1 CI=1 NO_NAV=1 coverage run selfdrive/test/process_replay/model_replay.py && \
327353
coverage xml"
328354
- name: Run unit tests
355+
timeout-minutes: 4
329356
run: |
330-
${{ env.RUN_CL }} "$UNIT_TEST selfdrive/modeld && \
357+
${{ env.RUN_CL }} "unset PYTHONWARNINGS && \
358+
$UNIT_TEST selfdrive/modeld && \
331359
coverage xml"
332360
- name: "Upload coverage to Codecov"
333361
uses: codecov/codecov-action@v3
334362

335-
test_longitudinal:
336-
name: longitudinal
337-
runs-on: ubuntu-20.04
338-
steps:
339-
- uses: actions/checkout@v3
340-
with:
341-
submodules: true
342-
- uses: ./.github/workflows/setup
343-
- name: Build openpilot
344-
run: |
345-
${{ env.RUN }} "scons -j$(nproc)"
346-
- name: Test longitudinal
347-
run: |
348-
${{ env.RUN }} "mkdir -p selfdrive/test/out && \
349-
cd selfdrive/test/longitudinal_maneuvers && \
350-
coverage run ./test_longitudinal.py && \
351-
coverage xml"
352-
- name: "Upload coverage to Codecov"
353-
uses: codecov/codecov-action@v3
354-
- uses: actions/upload-artifact@v2
355-
if: always()
356-
continue-on-error: true
357-
with:
358-
name: longitudinal
359-
path: selfdrive/test/longitudinal_maneuvers/out/longitudinal/
360-
361363
test_cars:
362364
name: cars
363365
runs-on: ubuntu-20.04
@@ -372,16 +374,16 @@ jobs:
372374
- uses: ./.github/workflows/setup
373375
- name: Cache test routes
374376
id: dependency-cache
375-
uses: actions/cache@03e00da99d75a2204924908e1cca7902cafce66b
377+
uses: actions/cache@v3
376378
with:
377-
path: /tmp/comma_download_cache
379+
path: ~/comma_download_cache
378380
key: car_models-${{ hashFiles('selfdrive/car/tests/test_models.py', 'selfdrive/car/tests/routes.py') }}-${{ matrix.job }}
379381
- name: Build openpilot
380382
run: ${{ env.RUN }} "scons -j$(nproc)"
381383
- name: Test car models
384+
timeout-minutes: 25
382385
run: |
383-
${{ env.RUN }} "coverage run -m pytest selfdrive/car/tests/test_models.py && \
384-
coverage xml && \
386+
${{ env.RUN }} "pytest --cov --cov-report=xml -n auto --dist=loadscope selfdrive/car/tests/test_models.py && \
385387
chmod -R 777 /tmp/comma_download_cache"
386388
env:
387389
NUM_JOBS: 5
@@ -410,7 +412,7 @@ jobs:
410412
id: save_diff
411413
run: |
412414
${{ env.RUN }} "scons -j$(nproc)"
413-
output=$(${{ env.RUN }} "python selfdrive/debug/print_docs_diff.py --path /tmp/openpilot_cache/base_car_info") || true
415+
output=$(${{ env.RUN }} "python selfdrive/debug/print_docs_diff.py --path /tmp/openpilot_cache/base_car_info")
414416
output="${output//$'\n'/'%0A'}"
415417
echo "::set-output name=diff::$output"
416418
- name: Find comment

0 commit comments

Comments
 (0)