From 59d7c5e64ac3c8666c54c3443f912e4e0db92eb9 Mon Sep 17 00:00:00 2001 From: Adeeb Shihadeh Date: Thu, 31 Dec 2020 14:57:01 -0800 Subject: [PATCH] move to github container registry + CI speedup (#19621) --- .github/workflows/test.yaml | 363 ++++++++---------- ...erfile.openpilotci => Dockerfile.openpilot | 3 + Dockerfile.openpilot_base | 1 + .../loggerd/tests/loggerd_tests_common.py | 1 + selfdrive/loggerd/uploader.py | 6 +- .../test_longitudinal.py | 11 +- .../test/process_replay/process_replay.py | 2 +- .../test/process_replay/test_processes.py | 15 +- tools/lib/tests/test_caching.py | 5 +- tools/lib/url_file.py | 2 +- tools/webcam/Dockerfile | 38 +- 11 files changed, 219 insertions(+), 228 deletions(-) rename Dockerfile.openpilotci => Dockerfile.openpilot (94%) diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index d79ef849..1f65f390 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -6,18 +6,17 @@ on: pull_request: env: - RUN: docker run --shm-size 1G --rm tmppilot /bin/sh -c - PERSIST_WITH_CACHE: docker run --shm-size 1G -v /tmp/comma_download_cache:/tmp/comma_download_cache --name tmppilot tmppilot /bin/sh -c - PERSIST: docker run --shm-size 1G --name tmppilot tmppilot /bin/sh -c - CI_RUN: docker run -e GITHUB_ACTION -e GITHUB_REF -e GITHUB_HEAD_REF -e GITHUB_SHA -e GITHUB_REPOSITORY -e GITHUB_RUN_ID --rm tmppilotci /bin/bash -c - UNIT_TEST: coverage run --append -m unittest discover - BUILD: | - docker pull $(grep -ioP '(?<=^from)\s+\S+' Dockerfile.openpilot_base) || true - docker pull docker.io/commaai/openpilot-base:latest || true - docker build --cache-from docker.io/commaai/openpilot-base:latest -t commaai/openpilot-base:latest -f Dockerfile.openpilot_base . + BASE_IMAGE: openpilot-base + DOCKER_REGISTRY: ghcr.io/commaai - docker pull docker.io/commaai/openpilotci:latest || true - docker build --cache-from docker.io/commaai/openpilotci:latest -t tmppilot -f Dockerfile.openpilotci . + DOCKER_LOGIN: docker login ghcr.io -u adeebshihadeh -p ${{ secrets.CONTAINER_TOKEN }} + BUILD: | + docker pull $(grep -iohP '(?<=^from)\s+\S+' Dockerfile.openpilot_base) || true + docker pull $DOCKER_REGISTRY/$BASE_IMAGE:latest || true + docker build --cache-from $DOCKER_REGISTRY/$BASE_IMAGE:latest -t $DOCKER_REGISTRY/$BASE_IMAGE:latest -t $BASE_IMAGE:latest -f Dockerfile.openpilot_base . + + RUN: docker run --shm-size 1G -v $PWD:/tmp/openpilot -e PYTHONPATH=/tmp/openpilot -e GITHUB_ACTION -e GITHUB_REF -e GITHUB_HEAD_REF -e GITHUB_SHA -e GITHUB_REPOSITORY -e GITHUB_RUN_ID -v /tmp/comma_download_cache:/tmp/comma_download_cache $BASE_IMAGE /bin/sh -c + UNIT_TEST: coverage run --append -m unittest discover jobs: build_release: @@ -25,32 +24,27 @@ jobs: runs-on: ubuntu-20.04 timeout-minutes: 50 env: - TEST_DIR: tmppilot + STRIPPED_DIR: tmppilot steps: - uses: actions/checkout@v2 with: submodules: true - name: Strip non-release files run: | - mkdir $TEST_DIR - cp -pR --parents $(cat release/files_common) $TEST_DIR - cp Dockerfile.openpilot_base Dockerfile.openpilotci $TEST_DIR + mkdir $STRIPPED_DIR + cp -pR --parents $(cat release/files_common) $STRIPPED_DIR + cp Dockerfile.openpilot_base $STRIPPED_DIR # need this to build on x86 - cp -pR --parents phonelibs/libyuv phonelibs/snpe \ - external/bin selfdrive/modeld/runners $TEST_DIR - - # need these so docker copy won't fail - cp Pipfile Pipfile.lock .pylintrc .pre-commit-config.yaml $TEST_DIR - cd $TEST_DIR - mkdir laika laika_repo tools + cp -pR --parents phonelibs/libyuv phonelibs/snpe selfdrive/modeld/runners $STRIPPED_DIR - name: Build Docker image - run: cd $TEST_DIR && eval "$BUILD" - - name: Build openpilot and run quick check + run: eval "$BUILD" + - name: Build openpilot and run checks run: | - $RUN "cd /tmp/openpilot && \ - scons -j$(nproc) && \ - $UNIT_TEST selfdrive/car" + cd $STRIPPED_DIR + ${{ env.RUN }} "cd /tmp/openpilot && \ + scons -j$(nproc) && \ + python -m unittest discover selfdrive/car" build_mac: name: build macos @@ -81,22 +75,24 @@ jobs: name: build webcam runs-on: ubuntu-20.04 timeout-minutes: 90 + env: + IMAGE_NAME: openpilotwebcamci steps: - uses: actions/checkout@v2 with: submodules: true - name: Build Docker image run: | - docker pull docker.io/commaai/openpilotwebcamci:latest - docker build --cache-from docker.io/commaai/openpilotwebcamci:latest -t tmppilotwebcam -f tools/webcam/Dockerfile . + eval "$BUILD" + docker pull $DOCKER_REGISTRY/$IMAGE_NAME:latest || true + docker build --cache-from $DOCKER_REGISTRY/$IMAGE_NAME:latest -t $DOCKER_REGISTRY/$IMAGE_NAME:latest -f tools/webcam/Dockerfile . - name: Build openpilot - run: docker run --shm-size 1G --rm tmppilotwebcam /bin/sh -c "cd /tmp/openpilot && USE_WEBCAM=1 scons -j$(nproc)" - - name: Push to dockerhub + run: docker run --shm-size 1G --rm $DOCKER_REGISTRY/$IMAGE_NAME /bin/sh -c "cd /tmp/openpilot && USE_WEBCAM=1 scons -j$(nproc)" + - name: Push to container registry if: github.ref == 'refs/heads/master' && github.event_name != 'pull_request' && github.repository == 'commaai/openpilot' run: | - docker login -u wmelching -p ${{ secrets.COMMA_DOCKERHUB_TOKEN}} - docker tag tmppilotwebcam docker.io/commaai/openpilotwebcamci:latest - docker push docker.io/commaai/openpilotwebcamci:latest + $DOCKER_LOGIN + docker push $DOCKER_REGISTRY/$IMAGE_NAME:latest docker_push: name: docker push @@ -105,18 +101,15 @@ jobs: if: github.ref == 'refs/heads/master' && github.event_name != 'pull_request' && github.repository == 'commaai/openpilot' needs: static_analysis # hack to ensure slow tests run first since this and static_analysis are fast steps: - - uses: actions/checkout@v2 - with: - submodules: true - - name: Build Docker image - run: eval "$BUILD" - - name: Push to dockerhub - run: | - docker login -u wmelching -p ${{ secrets.COMMA_DOCKERHUB_TOKEN}} - docker tag commaai/openpilot-base:latest docker.io/commaai/openpilot-base:latest - docker push docker.io/commaai/openpilot-base:latest - docker tag tmppilot docker.io/commaai/openpilotci:latest - docker push docker.io/commaai/openpilotci:latest + - uses: actions/checkout@v2 + with: + submodules: true + - name: Build Docker image + run: eval "$BUILD" + - name: Push to container registry + run: | + $DOCKER_LOGIN + docker push $DOCKER_REGISTRY/$BASE_IMAGE:latest docker_push_prebuilt: name: docker push prebuilt @@ -124,188 +117,168 @@ jobs: timeout-minutes: 50 if: github.event_name == 'status' && github.repository == 'commaai/openpilot' needs: [static_analysis, unit_tests, process_replay, test_longitudinal, test_car_models] + env: + IMAGE_NAME: openpilot-prebuilt steps: - - uses: actions/checkout@v2 - with: - submodules: true - - name: Build Docker image - run: echo "RUN cd /tmp/openpilot && scons -c && scons -j\$(nproc)" >> Dockerfile.openpilotci && eval "$BUILD" - - name: Push to dockerhub - run: | - docker login -u wmelching -p ${{ secrets.COMMA_DOCKERHUB_TOKEN}} - docker tag tmppilot docker.io/commaai/openpilot:latest - docker push docker.io/commaai/openpilot:latest + - uses: actions/checkout@v2 + with: + submodules: true + - name: Build Docker image + run: | + eval "$BUILD" + docker pull $DOCKER_REGISTRY/$IMAGE_NAME:latest || true + docker build --cache-from $DOCKER_REGISTRY/$IMAGE_NAME:latest -t $DOCKER_REGISTRY/$IMAGE_NAME:latest -f Dockerfile.openpilot . + - name: Push to container registry + run: | + $DOCKER_LOGIN + docker push $DOCKER_REGISTRY/$IMAGE_NAME:latest static_analysis: name: static analysis runs-on: ubuntu-20.04 timeout-minutes: 50 steps: - - uses: actions/checkout@v2 - with: - submodules: true - - name: Build Docker image - run: eval "$BUILD" - - name: pre-commit - run: $RUN "cd /tmp/openpilot/ && git init && git add -A && pre-commit run --all" + - uses: actions/checkout@v2 + with: + submodules: true + - name: Build Docker image + run: eval "$BUILD" + - name: pre-commit + run: ${{ env.RUN }} "cd /tmp/openpilot/ && git init && git add -A && pre-commit run --all" valgrind: name: valgrind runs-on: ubuntu-20.04 timeout-minutes: 50 steps: - - uses: actions/checkout@v2 - with: - submodules: true - - name: Cache dependencies - id: dependency-cache - uses: actions/cache@v2 - with: - path: | - /tmp/comma_download_cache - key: ${{ hashFiles('.github/workflows/test.yaml', 'selfdrive/test/test_valgrind_replay.py') }} - - name: Build Docker image - run: eval "$BUILD" - - name: Run valgrind - run: | - $PERSIST_WITH_CACHE "cd /tmp/openpilot && \ - scons -j$(nproc) && \ - FILEREADER_CACHE=1 python selfdrive/test/test_valgrind_replay.py" - - name: Print logs - if: always() - run: | - docker cp tmppilot:/tmp/openpilot/selfdrive/test/valgrind_logs.txt valgrind_logs.txt - cat valgrind_logs.txt - - uses: actions/upload-artifact@v2 - if: always() - continue-on-error: true - with: - name: valgrind_logs.txt - path: valgrind_logs.txt + - uses: actions/checkout@v2 + with: + submodules: true + - name: Cache dependencies + id: dependency-cache + uses: actions/cache@v2 + with: + path: /tmp/comma_download_cache + key: ${{ hashFiles('.github/workflows/test.yaml', 'selfdrive/test/test_valgrind_replay.py') }} + - name: Build Docker image + run: eval "$BUILD" + - name: Run valgrind + run: | + ${{ env.RUN }} "cd /tmp/openpilot && \ + scons -j$(nproc) && \ + FILEREADER_CACHE=1 python selfdrive/test/test_valgrind_replay.py" + - name: Print logs + if: always() + run: cat selfdrive/test/valgrind_logs.txt unit_tests: name: unit tests runs-on: ubuntu-20.04 timeout-minutes: 50 steps: - - uses: actions/checkout@v2 - with: - submodules: true - - name: Build Docker image - run: eval "$BUILD" - - name: Run unit tests - run: | - $PERSIST "cd /tmp/openpilot && \ - scons -j$(nproc) && \ - coverage run selfdrive/test/test_fingerprints.py && \ - $UNIT_TEST common && \ - $UNIT_TEST opendbc/can && \ - $UNIT_TEST selfdrive/boardd && \ - $UNIT_TEST selfdrive/controls && \ - $UNIT_TEST selfdrive/monitoring && \ - $UNIT_TEST selfdrive/loggerd && \ - $UNIT_TEST selfdrive/car && \ - $UNIT_TEST selfdrive/locationd && \ - $UNIT_TEST selfdrive/athena && \ - $UNIT_TEST selfdrive/thermald && \ - $UNIT_TEST tools/lib/tests" - - name: Upload coverage to Codecov - run: | - docker commit tmppilot tmppilotci - $CI_RUN "cd /tmp/openpilot && bash <(curl -s https://codecov.io/bash) -v -F unit_tests" + - uses: actions/checkout@v2 + with: + submodules: true + - name: Build Docker image + run: eval "$BUILD" + - name: Run unit tests + run: | + ${{ env.RUN }} "cd /tmp/openpilot && \ + scons -j$(nproc) && \ + coverage run selfdrive/test/test_fingerprints.py && \ + $UNIT_TEST common && \ + $UNIT_TEST opendbc/can && \ + $UNIT_TEST selfdrive/boardd && \ + $UNIT_TEST selfdrive/controls && \ + $UNIT_TEST selfdrive/monitoring && \ + $UNIT_TEST selfdrive/loggerd && \ + $UNIT_TEST selfdrive/car && \ + $UNIT_TEST selfdrive/locationd && \ + $UNIT_TEST selfdrive/athena && \ + $UNIT_TEST selfdrive/thermald && \ + $UNIT_TEST tools/lib/tests" + - name: Upload coverage to Codecov + run: bash <(curl -s https://codecov.io/bash) -v -F unit_tests process_replay: name: process replay runs-on: ubuntu-20.04 timeout-minutes: 50 steps: - - uses: actions/checkout@v2 - with: - submodules: true - - name: Cache dependencies - id: dependency-cache - uses: actions/cache@v2 - with: - path: | - /tmp/comma_download_cache - key: ${{ hashFiles('.github/workflows/test.yaml', 'selfdrive/test/process_replay/test_processes.py') }} - - name: Build Docker image - run: eval "$BUILD" - - name: Run replay - run: | - $PERSIST_WITH_CACHE "cd /tmp/openpilot && \ - scons -j$(nproc) && \ - FILEREADER_CACHE=1 CI=1 coverage run selfdrive/test/process_replay/test_processes.py" - - name: Upload coverage to Codecov - run: | - docker commit tmppilot tmppilotci - $CI_RUN "cd /tmp/openpilot && bash <(curl -s https://codecov.io/bash) -v -F process_replay" - - name: Print diff - if: always() - run: | - docker cp tmppilot:/tmp/openpilot/selfdrive/test/process_replay/diff.txt diff.txt - cat diff.txt - - uses: actions/upload-artifact@v2 - if: always() - continue-on-error: true - with: - name: process_replay_diff.txt - path: diff.txt + - uses: actions/checkout@v2 + with: + submodules: true + - name: Cache dependencies + id: dependency-cache + uses: actions/cache@v2 + with: + path: /tmp/comma_download_cache + key: ${{ hashFiles('.github/workflows/test.yaml', 'selfdrive/test/process_replay/test_processes.py') }} + - name: Build Docker image + run: eval "$BUILD" + - name: Run replay + run: | + ${{ env.RUN }} "cd /tmp/openpilot && \ + scons -j$(nproc) && \ + FILEREADER_CACHE=1 CI=1 coverage run selfdrive/test/process_replay/test_processes.py" + - name: Upload coverage to Codecov + run: bash <(curl -s https://codecov.io/bash) -v -F process_replay + - name: Print diff + if: always() + run: cat selfdrive/test/process_replay/diff.txt + - uses: actions/upload-artifact@v2 + if: always() + continue-on-error: true + with: + name: process_replay_diff.txt + path: selfdrive/test/process_replay/diff.txt test_longitudinal: name: longitudinal runs-on: ubuntu-20.04 timeout-minutes: 50 steps: - - uses: actions/checkout@v2 - with: - submodules: true - - name: Build Docker image - run: eval "$BUILD" - - name: Test longitudinal - run: | - $PERSIST "mkdir -p /tmp/openpilot/selfdrive/test/out && \ - cd /tmp/openpilot/ && \ - scons -j$(nproc) && \ - cd selfdrive/test/longitudinal_maneuvers && \ - OPTEST=1 ./test_longitudinal.py" - - name: Copy artifacts - if: always() - run: | - mkdir out - docker cp tmppilot:/tmp/openpilot/selfdrive/test/longitudinal_maneuvers/out/longitudinal/ out/ - - uses: actions/upload-artifact@v2 - if: always() - continue-on-error: true - with: - name: longitudinal - path: out + - uses: actions/checkout@v2 + with: + submodules: true + - name: Build Docker image + run: eval "$BUILD" + - name: Test longitudinal + run: | + ${{ env.RUN }} "mkdir -p /tmp/openpilot/selfdrive/test/out && \ + cd /tmp/openpilot/ && \ + scons -j$(nproc) && \ + cd selfdrive/test/longitudinal_maneuvers && \ + ./test_longitudinal.py" + - uses: actions/upload-artifact@v2 + if: always() + continue-on-error: true + with: + name: longitudinal + path: selfdrive/test/longitudinal_maneuvers/out/longitudinal/ test_car_models: - name: test car models + name: car models runs-on: ubuntu-20.04 timeout-minutes: 50 steps: - - uses: actions/checkout@v2 - with: - submodules: true - - name: Cache dependencies - id: dependency-cache - uses: actions/cache@v2 - with: - path: | - /tmp/comma_download_cache - key: ${{ hashFiles('.github/workflows/test.yaml', 'selfdrive/test/test_car_models.py') }} - - name: Build Docker image - run: eval "$BUILD" - - name: Test car models - run: | - $PERSIST_WITH_CACHE "cd /tmp/openpilot && \ - scons -j$(nproc) && \ - FILEREADER_CACHE=1 coverage run --parallel-mode -m nose --processes=4 --process-timeout=60 \ - selfdrive/test/test_models.py && \ - coverage combine" - - name: Upload coverage to Codecov - run: | - docker commit tmppilot tmppilotci - $CI_RUN "cd /tmp/openpilot && bash <(curl -s https://codecov.io/bash) -v -F test_car_models" + - uses: actions/checkout@v2 + with: + submodules: true + - name: Cache dependencies + id: dependency-cache + uses: actions/cache@v2 + with: + path: /tmp/comma_download_cache + key: ${{ hashFiles('.github/workflows/test.yaml', 'selfdrive/test/test_car_models.py') }} + - name: Build Docker image + run: eval "$BUILD" + - name: Test car models + run: | + ${{ env.RUN }} "cd /tmp/openpilot && \ + scons -j$(nproc) && \ + FILEREADER_CACHE=1 coverage run --parallel-mode -m nose --processes=4 --process-timeout=60 \ + selfdrive/test/test_models.py && \ + coverage combine" + - name: Upload coverage to Codecov + run: bash <(curl -s https://codecov.io/bash) -v -F test_car_models diff --git a/Dockerfile.openpilotci b/Dockerfile.openpilot similarity index 94% rename from Dockerfile.openpilotci rename to Dockerfile.openpilot index ce60d3c2..8363a06f 100644 --- a/Dockerfile.openpilotci +++ b/Dockerfile.openpilot @@ -23,3 +23,6 @@ COPY ./opendbc /tmp/openpilot/opendbc COPY ./cereal /tmp/openpilot/cereal COPY ./panda /tmp/openpilot/panda COPY ./selfdrive /tmp/openpilot/selfdrive + +WORKDIR /tmp/openpilot +RUN scons -j$(nproc) diff --git a/Dockerfile.openpilot_base b/Dockerfile.openpilot_base index 6667809e..7b1a65a5 100644 --- a/Dockerfile.openpilot_base +++ b/Dockerfile.openpilot_base @@ -60,4 +60,5 @@ RUN pyenv install 3.8.2 && \ pip install --no-cache-dir pipenv==2020.8.13 && \ cd /tmp && \ pipenv install --system --deploy --dev --clear && \ + pip uninstall torch tensorflow -y && \ pip uninstall -y pipenv diff --git a/selfdrive/loggerd/tests/loggerd_tests_common.py b/selfdrive/loggerd/tests/loggerd_tests_common.py index b05057fd..acd62ec9 100644 --- a/selfdrive/loggerd/tests/loggerd_tests_common.py +++ b/selfdrive/loggerd/tests/loggerd_tests_common.py @@ -76,6 +76,7 @@ class UploaderTestCase(unittest.TestCase): uploader.Params = MockParams uploader.fake_upload = True uploader.force_wifi = True + uploader.allow_sleep = False self.seg_num = random.randint(1, 300) self.seg_format = "2019-04-18--12-52-54--{}" self.seg_format2 = "2019-05-18--11-22-33--{}" diff --git a/selfdrive/loggerd/uploader.py b/selfdrive/loggerd/uploader.py index 0c45e02e..3874fbf0 100644 --- a/selfdrive/loggerd/uploader.py +++ b/selfdrive/loggerd/uploader.py @@ -19,6 +19,7 @@ NetworkType = log.ThermalData.NetworkType UPLOAD_ATTR_NAME = 'user.upload' UPLOAD_ATTR_VALUE = b'1' +allow_sleep = bool(os.getenv("UPLOADER_SLEEP", "1")) force_wifi = os.getenv("FORCEWIFI") is not None fake_upload = os.getenv("FAKEUPLOAD") is not None @@ -208,7 +209,8 @@ def uploader_fn(exit_event): d = uploader.next_file_to_upload(with_raw=allow_raw_upload and on_wifi and offroad) if d is None: # Nothing to upload - time.sleep(60 if offroad else 5) + if allow_sleep: + time.sleep(60 if offroad else 5) continue key, fn = d @@ -218,7 +220,7 @@ def uploader_fn(exit_event): success = uploader.upload(key, fn) if success: backoff = 0.1 - else: + elif allow_sleep: cloudlog.info("backoff %r", backoff) time.sleep(backoff + random.uniform(0, backoff)) backoff = min(backoff*2, 120) diff --git a/selfdrive/test/longitudinal_maneuvers/test_longitudinal.py b/selfdrive/test/longitudinal_maneuvers/test_longitudinal.py index c469a328..60f886e3 100755 --- a/selfdrive/test/longitudinal_maneuvers/test_longitudinal.py +++ b/selfdrive/test/longitudinal_maneuvers/test_longitudinal.py @@ -1,6 +1,5 @@ #!/usr/bin/env python3 import os -os.environ['OLD_CAN'] = '1' os.environ['NOCRASH'] = '1' import unittest @@ -11,16 +10,10 @@ from selfdrive.config import Conversions as CV from selfdrive.car.honda.values import CruiseButtons as CB from selfdrive.test.longitudinal_maneuvers.maneuver import Maneuver import selfdrive.manager as manager +from common.file_helpers import mkdirs_exists_ok from common.params import Params -def create_dir(path): - try: - os.makedirs(path) - except OSError: - pass - - def check_no_collision(log): return min(log['d_rel']) > 0 @@ -317,7 +310,7 @@ def setup_output(): view_html += "" % (os.path.join("maneuver" + str(i + 1).zfill(2), c), ) view_html += "" - create_dir(output_dir) + mkdirs_exists_ok(output_dir) with open(os.path.join(output_dir, "index.html"), "w") as f: f.write(view_html) diff --git a/selfdrive/test/process_replay/process_replay.py b/selfdrive/test/process_replay/process_replay.py index e5fb7b6d..15a6c4b2 100755 --- a/selfdrive/test/process_replay/process_replay.py +++ b/selfdrive/test/process_replay/process_replay.py @@ -346,7 +346,7 @@ def python_replay_process(cfg, lr): os.environ['FINGERPRINT'] = msg.carParams.carFingerprint break - manager.prepare_managed_process(cfg.proc_name) + manager.prepare_managed_process(cfg.proc_name, build=True) mod = importlib.import_module(manager.managed_processes[cfg.proc_name]) thread = threading.Thread(target=mod.main, args=args) thread.daemon = True diff --git a/selfdrive/test/process_replay/test_processes.py b/selfdrive/test/process_replay/test_processes.py index 9d0abce0..ea8bc521 100755 --- a/selfdrive/test/process_replay/test_processes.py +++ b/selfdrive/test/process_replay/test_processes.py @@ -14,13 +14,12 @@ INJECT_MODEL = 0 segments = [ ("HONDA", "d83f36766f8012a5|2020-02-05--18-42-21--2"), # HONDA.CIVIC_BOSCH_DIESEL (BOSCH) ("HONDA", "a74b011b32b51b56|2020-07-26--17-09-36--6"), # HONDA.CIVIC (NIDEC) - ("TOYOTA", "77611a1fac303767|2020-02-29--13-29-33--3"), # TOYOTA.COROLLA_TSS2 ("TOYOTA", "b14c5b4742e6fc85|2020-10-14--11-04-47--4"), # TOYOTA.RAV4 (LQR) ("TOYOTA", "0982d79ebb0de295|2020-10-18--19-11-36--5"), # TOYOTA.PRIUS (INDI) ("CHRYSLER", "b6849f5cf2c926b1|2020-02-28--07-29-48--13"), # CHRYSLER.PACIFICA ("HYUNDAI", "5b7c365c50084530|2020-04-15--16-13-24--3"), # HYUNDAI.SONATA - ("SUBARU", "c321c6b697c5a5ff|2020-06-23--11-04-33--12"), # SUBARU.FORESTER - ("VOLKSWAGEN", "76b83eb0245de90e|2020-03-05--19-16-05--3"), # VW.GOLF + ("SUBARU", "c321c6b697c5a5ff|2020-06-23--11-04-33--12"), # SUBARU.FORESTER + ("VOLKSWAGEN", "76b83eb0245de90e|2020-03-05--19-16-05--3"), # VW.GOLF ("NISSAN", "fbbfa6af821552b9|2020-03-03--08-09-43--0"), # NISSAN.XTRAIL # TODO: update this route @@ -170,9 +169,11 @@ if __name__ == "__main__": f.write(diff2) print(diff1) - print("TEST", "FAILED" if failed else "SUCCEEDED") - - print("\n\nTo update the reference logs for this test run:") - print("./update_refs.py") + if failed: + print("TEST FAILED") + print("\n\nTo update the reference logs for this test run:") + print("./update_refs.py") + else: + print("TEST SUCCEEDED") sys.exit(int(failed)) diff --git a/tools/lib/tests/test_caching.py b/tools/lib/tests/test_caching.py index fef6e536..75061277 100644 --- a/tools/lib/tests/test_caching.py +++ b/tools/lib/tests/test_caching.py @@ -1,8 +1,9 @@ #!/usr/bin/env python3 - import os -import unittest import shutil +import unittest + +os.environ["COMMA_CACHE"] = "/tmp/__test_cache__" from tools.lib.url_file import URLFile, CACHE_DIR diff --git a/tools/lib/url_file.py b/tools/lib/url_file.py index 1429eee7..6d2be96d 100644 --- a/tools/lib/url_file.py +++ b/tools/lib/url_file.py @@ -14,7 +14,7 @@ from tools.lib.file_helpers import mkdirs_exists_ok, atomic_write_in_dir K = 1000 CHUNK_SIZE = 1000 * K -CACHE_DIR = "/tmp/comma_download_cache/" +CACHE_DIR = os.environ.get("COMMA_CACHE", "/tmp/comma_download_cache/") def hash_256(link): diff --git a/tools/webcam/Dockerfile b/tools/webcam/Dockerfile index 3bcbffa0..55cfc1da 100644 --- a/tools/webcam/Dockerfile +++ b/tools/webcam/Dockerfile @@ -4,24 +4,40 @@ ENV PYTHONUNBUFFERED 1 ENV PYTHONPATH /tmp/openpilot:${PYTHONPATH} # install opencv -RUN export OPENCV_VERSION='4.2.0' && \ - sudo apt-get -y update && \ - sudo apt-get install -y build-essential cmake && \ - sudo apt-get install -y qt5-default libvtk6-dev && \ - sudo apt-get install -y libdc1394-22-dev libavcodec-dev libavformat-dev libswscale-dev \ - libtheora-dev libvorbis-dev libxvidcore-dev libx264-dev yasm \ - libopencore-amrnb-dev libopencore-amrwb-dev libv4l-dev libxine2-dev && \ - sudo apt-get install -y libtbb-dev libeigen3-dev && \ +ENV OPENCV_VERSION '4.2.0' +ENV DEBIAN_FRONTEND=noninteractive +RUN apt-get update && apt-get install -y --no-install-recommends \ + libvtk6-dev \ + libdc1394-22-dev \ + libavcodec-dev \ + libavformat-dev \ + libswscale-dev \ + libtheora-dev \ + libvorbis-dev \ + libxvidcore-dev \ + libx264-dev \ + yasm \ + libopencore-amrnb-dev \ + libopencore-amrwb-dev \ + libv4l-dev \ + libxine2-dev \ + libtbb-dev \ + && rm -rf /var/lib/apt/lists/* && \ + + mkdir /tmp/opencv_build && \ + cd /tmp/opencv_build && \ wget https://github.com/opencv/opencv/archive/${OPENCV_VERSION}.tar.gz && \ - tar -xvf ${OPENCV_VERSION}.tar.gz && rm ${OPENCV_VERSION}.tar.gz && \ + tar -xvf ${OPENCV_VERSION}.tar.gz && \ mv opencv-${OPENCV_VERSION} OpenCV && \ cd OpenCV && mkdir build && cd build && \ cmake -DWITH_OPENGL=ON -DFORCE_VTK=ON -DWITH_TBB=ON -DWITH_GDAL=ON \ -DWITH_XINE=ON -DENABLE_PRECOMPILED_HEADERS=OFF .. && \ make -j8 && \ - sudo make install && \ - sudo ldconfig + make install && \ + ldconfig && \ + + cd /tmp && rm -rf /tmp/opencv_build RUN mkdir -p /tmp/openpilot