test.yml 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. name: TaskScheduler Unit Test
  2. on:
  3. push:
  4. branches: [ main ]
  5. pull_request:
  6. branches: [ main ]
  7. workflow_dispatch:
  8. jobs:
  9. UnitTests_Linux:
  10. runs-on: ubuntu-latest
  11. steps:
  12. - name: Checkout
  13. uses: actions/checkout@v4
  14. - name: Install dependencies
  15. run: |
  16. sudo apt-get update
  17. sudo apt-get install -y cmake build-essential libgtest-dev pkg-config
  18. - name: Build and install Google Test
  19. run: |
  20. cd /usr/src/gtest
  21. sudo cmake .
  22. sudo cmake --build . --target all
  23. sudo cp lib/*.a /usr/lib || sudo cp *.a /usr/lib
  24. - name: Create CMakeLists.txt
  25. run: |
  26. cat > CMakeLists.txt << 'EOF'
  27. cmake_minimum_required(VERSION 3.10)
  28. project(TaskSchedulerTests VERSION 1.0.0)
  29. set(CMAKE_CXX_STANDARD 14)
  30. set(CMAKE_CXX_STANDARD_REQUIRED ON)
  31. # Find required packages
  32. find_package(PkgConfig REQUIRED)
  33. find_package(Threads REQUIRED)
  34. # Include directories
  35. include_directories(${CMAKE_SOURCE_DIR}/src)
  36. include_directories(${CMAKE_SOURCE_DIR}/tests)
  37. # Gather source files
  38. file(GLOB TASKSCHEDULER_SOURCES
  39. "${CMAKE_SOURCE_DIR}/src/*.cpp"
  40. "${CMAKE_SOURCE_DIR}/src/*.c"
  41. )
  42. file(GLOB TEST_SOURCES
  43. "${CMAKE_SOURCE_DIR}/tests/*.cpp"
  44. )
  45. # Check if we have test files
  46. list(LENGTH TEST_SOURCES TEST_COUNT)
  47. if(TEST_COUNT EQUAL 0)
  48. message(FATAL_ERROR "No test files found in tests/ directory")
  49. endif()
  50. # Create the test executable
  51. add_executable(taskscheduler_tests
  52. ${TEST_SOURCES}
  53. ${TASKSCHEDULER_SOURCES}
  54. )
  55. # Link libraries
  56. target_link_libraries(taskscheduler_tests
  57. gtest
  58. gtest_main
  59. pthread
  60. )
  61. # Compiler definitions for Arduino compatibility
  62. target_compile_definitions(taskscheduler_tests PRIVATE
  63. ARDUINO=300
  64. )
  65. # Compiler flags
  66. target_compile_options(taskscheduler_tests PRIVATE
  67. -Wall
  68. -Wextra
  69. -O2
  70. )
  71. # Enable testing
  72. enable_testing()
  73. add_test(NAME TaskSchedulerUnitTests COMMAND taskscheduler_tests)
  74. EOF
  75. - name: Build tests
  76. run: |
  77. cmake .
  78. make -j$(nproc)
  79. - name: Run unit tests
  80. run: |
  81. ./taskscheduler_tests