                          ./selfdrive/boardd/tests/test_boardd_usbprotocol && \
                          ./selfdrive/common/tests/test_util && \
                          ./selfdrive/loggerd/tests/test_logger &&\
                          ./selfdrive/proclogd/tests/test_proclog && \
                          ./selfdrive/ui/replay/tests/test_replay && \
                          ./selfdrive/camerad/test/ae_gray_test"
      - name: Upload coverage to Codecov
        run: bash <(curl -s https://codecov.io/bash) -v -F unit_tests
 
</s> remove   if (!msg_buf) return;
 </s> add   if (ret <= 0 || !msg_buf) return;

  std::lock_guard lk(s.lock);
  cloudlog_init(); </s> remove   vasprintf(&msg_buf, fmt, args);
 </s> add   int ret = vasprintf(&msg_buf, fmt, args); </s> remove void log(int levelnum, const char* filename, int lineno, const char* func, const char* msg, const std::string& log_s) {
  std::lock_guard lk(s.lock);
  cloudlog_init();
 </s> add static void log(int levelnum, const char* filename, int lineno, const char* func, const char* msg, const std::string& log_s) {
                        ./selfdrive/common/tests/test_swaglog && \
                          ./selfdrive/boardd/tests/test_boardd_usbprotocol && \
                          ./selfdrive/common/tests/test_util && \
                        ./selfdrive/common/tests/test_swaglog && \
                          ./selfdrive/loggerd/tests/test_logger &&\
                          ./selfdrive/proclogd/tests/test_proclog && \
                          ./selfdrive/ui/replay/tests/test_replay && \
                          ./selfdrive/camerad/test/ae_gray_test"
      - name: Upload coverage to Codecov
        run: bash <(curl -s https://codecov.io/bash) -v -F unit_tests
keep add keep keep keep keep keep keep
 swaglog.cc: add test case. fixed the ctx of the first message is empty (#23226)

* test case

* add to selfdrive_tests.yaml

* fix ctx_j is empty

* check return value too 
.github/workflows/selfdrive_tests.yaml