name: Openpilot Tests on: [push, pull_request] env: RUN: docker run --shm-size 1G --rm tmppilot /bin/sh -c PERSIST: docker run --shm-size 1G --name tmppilot tmppilot /bin/sh -c LOAD: docker load -i tmppilot.tar.gz/tmppilot.tar.gz 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 jobs: build: name: build runs-on: ubuntu-16.04 steps: - uses: actions/checkout@v2 with: submodules: true - name: Build docker image run: | docker pull $(grep -ioP '(?<=^from)\s+\S+' Dockerfile.openpilot) || true docker pull docker.io/commaai/openpilot:latest || true docker build --cache-from docker.io/commaai/openpilot:latest -t tmppilot -f Dockerfile.openpilot . docker save tmppilot:latest | gzip > tmppilot.tar.gz - uses: actions/upload-artifact@v2 with: name: tmppilot.tar.gz path: tmppilot.tar.gz build_release: name: build release runs-on: ubuntu-16.04 timeout-minutes: 30 env: TEST_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 $TEST_DIR # copy submodules cp -pR panda/ opendbc/ cereal/ $TEST_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 flake8_openpilot.sh pylint_openpilot.sh .pylintrc \ .coveragerc-app $TEST_DIR cd $TEST_DIR mkdir pyextra laika laika_repo tools release - name: Build run: | cd $TEST_DIR docker pull $(grep -ioP '(?<=^from)\s+\S+' Dockerfile.openpilot) || true docker pull docker.io/commaai/openpilot:latest || true docker build --cache-from docker.io/commaai/openpilot:latest -t tmppilot -f Dockerfile.openpilot . push: name: push runs-on: ubuntu-16.04 needs: build if: github.ref == 'refs/heads/master' && github.event_name != 'pull_request' && github.repository == 'commaai/openpilot' steps: - uses: actions/download-artifact@v1 with: name: tmppilot.tar.gz - name: Load image run: $LOAD - name: Login to dockerhub run: docker login -u wmelching -p ${{ secrets.DOCKERHUB_TOKEN }} - name: Tag image run: docker tag tmppilot docker.io/commaai/openpilot:latest - name: Push image run: docker push docker.io/commaai/openpilot:latest linter: name: linter runs-on: ubuntu-16.04 needs: build steps: - uses: actions/download-artifact@v1 with: name: tmppilot.tar.gz - name: Load image run: $LOAD - name: flake8 run: $RUN "cd /tmp/openpilot/ && ./flake8_openpilot.sh" - name: pylint run: $RUN "cd /tmp/openpilot/ && ./pylint_openpilot.sh" unit_tests: name: unit tests runs-on: ubuntu-16.04 needs: build steps: - uses: actions/download-artifact@v1 with: name: tmppilot.tar.gz - name: Load image run: $LOAD - name: Run unit tests run: | $PERSIST "cd /tmp/openpilot && \ 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/loggerd && \ $UNIT_TEST selfdrive/car && \ $UNIT_TEST selfdrive/locationd && \ $UNIT_TEST selfdrive/athena && \ $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) -Z -F unit_tests" process_replay: name: process replay runs-on: ubuntu-16.04 needs: build timeout-minutes: 30 steps: - uses: actions/download-artifact@v1 with: name: tmppilot.tar.gz - name: Load image run: $LOAD - name: Run replay run: | $PERSIST "cd /tmp/openpilot && 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) -Z -F process_replay" - name: Copy diff if: always() run: | docker cp tmppilot:/tmp/openpilot/selfdrive/test/process_replay/diff.txt diff.txt - name: Print diff if: always() run: cat diff.txt - uses: actions/upload-artifact@v2 if: always() with: name: process_replay_diff.txt path: diff.txt test_longitudinal: name: longitudinal runs-on: ubuntu-16.04 needs: build timeout-minutes: 30 steps: - uses: actions/download-artifact@v1 with: name: tmppilot.tar.gz - name: Load image run: $LOAD - name: Test longitudinal run: | $PERSIST "cd /tmp/openpilot/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() with: name: longitudinal path: out test_car_models: name: test car models runs-on: ubuntu-16.04 needs: build timeout-minutes: 30 steps: - uses: actions/download-artifact@v1 with: name: tmppilot.tar.gz - name: Load image run: $LOAD - name: Test car models run: | $PERSIST "mkdir -p /data/params && cd /tmp/openpilot && coverage run --parallel-mode --concurrency=multiprocessing --rcfile=./.coveragerc-app selfdrive/test/test_car_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) -Z -F test_car_models"