kopia lustrzana https://github.com/RobertGawron/IonizationChamber
pull/273/head
rodzic
d372c4c617
commit
8d6268c613
|
@ -27,25 +27,18 @@ jobs:
|
|||
docker-${{ hashFiles('DevOps/Docker/Dockerfile', 'docker-compose.yml') }}
|
||||
docker-
|
||||
|
||||
- name: Get Project Name
|
||||
id: project-name
|
||||
run: |
|
||||
# Extract the project name from docker-compose.yml
|
||||
PROJECT_NAME=$(basename $(pwd) | tr '[:upper:]' '[:lower:]')
|
||||
echo "project-name=${PROJECT_NAME}" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Build Docker Image
|
||||
uses: docker/build-push-action@v3
|
||||
with:
|
||||
context: .
|
||||
file: DevOps/Docker/Dockerfile
|
||||
tags: ${{ steps.project-name.outputs.project-name }}_app:ci-image
|
||||
tags: chamber:ci-image
|
||||
load: true
|
||||
cache-from: type=local,src=/tmp/.buildx-cache
|
||||
cache-to: type=local,dest=/tmp/.buildx-cache,mode=max
|
||||
|
||||
- name: Save Docker Image
|
||||
run: docker save -o image.tar ${{ steps.project-name.outputs.project-name }}_app:ci-image
|
||||
run: docker save -o image.tar chamber:ci-image
|
||||
|
||||
- name: Upload Docker Image
|
||||
uses: actions/upload-artifact@v4
|
||||
|
@ -80,36 +73,38 @@ jobs:
|
|||
- name: Load Docker Image
|
||||
run: docker load -i image.tar
|
||||
|
||||
- name: Get Project Name
|
||||
id: project-name
|
||||
run: |
|
||||
PROJECT_NAME=$(basename $(pwd) | tr '[:upper:]' '[:lower:]')
|
||||
echo "project-name=${PROJECT_NAME}" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Start Docker Compose
|
||||
- name: Prepare for Docker Compose
|
||||
run: |
|
||||
# Tag the image to match what docker-compose expects
|
||||
docker tag ${{ steps.project-name.outputs.project-name }}_app:ci-image ${{ steps.project-name.outputs.project-name }}_app
|
||||
docker-compose up -d --no-build
|
||||
docker tag chamber:ci-image chamber:latest
|
||||
|
||||
# Create docker-compose override to use our image
|
||||
echo "services:" > docker-compose.ci.yml
|
||||
echo " app:" >> docker-compose.ci.yml
|
||||
echo " image: chamber:latest" >> docker-compose.ci.yml
|
||||
echo " build: null" >> docker-compose.ci.yml
|
||||
|
||||
- name: Start Docker Compose
|
||||
run: docker-compose -f docker-compose.yml -f docker-compose.ci.yml up -d --no-build
|
||||
|
||||
- name: Run Analysis or Build
|
||||
run: |
|
||||
case "${{ matrix.type }}" in
|
||||
c-static)
|
||||
docker-compose exec -T app bash -c "dos2unix /workspace/ContinuousIntegration/run_c_static_code_analysis.sh && bash /workspace/ContinuousIntegration/run_c_static_code_analysis.sh"
|
||||
docker cp $(docker-compose ps -q app):/workspace/build/C_Lint_ReportApplicationOnly.txt .
|
||||
docker cp $(docker-compose ps -q app):/workspace/build/C_Lint_ReportFull.txt .
|
||||
docker-compose -f docker-compose.yml -f docker-compose.ci.yml exec -T app bash -c "dos2unix /workspace/ContinuousIntegration/run_c_static_code_analysis.sh && bash /workspace/ContinuousIntegration/run_c_static_code_analysis.sh"
|
||||
docker cp $(docker-compose -f docker-compose.yml -f docker-compose.ci.yml ps -q app):/workspace/build/C_Lint_ReportApplicationOnly.txt .
|
||||
docker cp $(docker-compose -f docker-compose.yml -f docker-compose.ci.yml ps -q app):/workspace/build/C_Lint_ReportFull.txt .
|
||||
;;
|
||||
python-static)
|
||||
docker-compose exec -T app bash -c "dos2unix /workspace/ContinuousIntegration/run_python_static_code_analysis.sh && bash /workspace/ContinuousIntegration/run_python_static_code_analysis.sh"
|
||||
docker cp $(docker-compose ps -q app):/workspace/build/python_lint_report .
|
||||
docker-compose -f docker-compose.yml -f docker-compose.ci.yml exec -T app bash -c "dos2unix /workspace/ContinuousIntegration/run_python_static_code_analysis.sh && bash /workspace/ContinuousIntegration/run_python_static_code_analysis.sh"
|
||||
docker cp $(docker-compose -f docker-compose.yml -f docker-compose.ci.yml ps -q app):/workspace/build/python_lint_report .
|
||||
;;
|
||||
firmware)
|
||||
docker-compose exec -T app bash -c "cd /workspace/build && cmake ../Software/Firmware/ && make -j$(nproc)"
|
||||
docker cp $(docker-compose ps -q app):/workspace/build/IonizationChamber.cdb .
|
||||
docker cp $(docker-compose ps -q app):/workspace/build/IonizationChamber.lk .
|
||||
docker cp $(docker-compose ps -q app):/workspace/build/IonizationChamber.ihx .
|
||||
docker cp $(docker-compose ps -q app):/workspace/build/IonizationChamber.map .
|
||||
docker-compose -f docker-compose.yml -f docker-compose.ci.yml exec -T app bash -c "cd /workspace/build && cmake ../Software/Firmware/ && make -j$(nproc)"
|
||||
docker cp $(docker-compose -f docker-compose.yml -f docker-compose.ci.yml ps -q app):/workspace/build/IonizationChamber.cdb .
|
||||
docker cp $(docker-compose -f docker-compose.yml -f docker-compose.ci.yml ps -q app):/workspace/build/IonizationChamber.lk .
|
||||
docker cp $(docker-compose -f docker-compose.yml -f docker-compose.ci.yml ps -q app):/workspace/build/IonizationChamber.ihx .
|
||||
docker cp $(docker-compose -f docker-compose.yml -f docker-compose.ci.yml ps -q app):/workspace/build/IonizationChamber.map .
|
||||
;;
|
||||
esac
|
||||
|
||||
|
@ -124,4 +119,4 @@ jobs:
|
|||
|
||||
- name: Clean Up Containers
|
||||
if: always()
|
||||
run: docker-compose down
|
||||
run: docker-compose -f docker-compose.yml -f docker-compose.ci.yml down
|
|
@ -1,76 +0,0 @@
|
|||
# Get the number of available processors
|
||||
include(ProcessorCount)
|
||||
ProcessorCount(NPROC)
|
||||
if(NOT NPROC OR NPROC EQUAL 0)
|
||||
set(NPROC 1) # Fallback to 1 if ProcessorCount fails
|
||||
endif()
|
||||
|
||||
# Define the source directories to analyze
|
||||
set(CODECHECKER_SOURCE_DIRS
|
||||
${CMAKE_SOURCE_DIR}/Software/STM32F103RBTx/Application/BusinessLogic
|
||||
${CMAKE_SOURCE_DIR}/Software/STM32F103RBTx/Application/Device
|
||||
${CMAKE_SOURCE_DIR}/Software/STM32F103RBTx/Application/Driver
|
||||
${CMAKE_SOURCE_DIR}/Software/ESP8266
|
||||
${CMAKE_SOURCE_DIR}/Software/Common
|
||||
${CMAKE_SOURCE_DIR}/Simulation/FirmwarePCSimulator
|
||||
)
|
||||
|
||||
# Define the output directories for CodeChecker analysis and reports
|
||||
set(CODECHECKER_ANALYZE_DIR ${CMAKE_BINARY_DIR}/BuildArtifacts/StaticAnalysisIntermediary)
|
||||
set(CODECHECKER_REPORT_DIR ${CMAKE_BINARY_DIR}/BuildArtifacts/StaticAnalysis)
|
||||
set(CODECHECKER_SKIP_FILE ${CMAKE_SOURCE_DIR}/DevOps/Scripts/CodeCheckerSkipList)
|
||||
|
||||
# Ensure the output directories exist
|
||||
file(MAKE_DIRECTORY ${CODECHECKER_ANALYZE_DIR})
|
||||
file(MAKE_DIRECTORY ${CODECHECKER_REPORT_DIR})
|
||||
message(WARNING ${CODECHECKER_SKIP_FILE})
|
||||
|
||||
# Add a custom target for CodeChecker analysis
|
||||
add_custom_target(static
|
||||
COMMAND CodeChecker analyze compile_commands.json
|
||||
--output ${CODECHECKER_ANALYZE_DIR}
|
||||
--file ${CODECHECKER_SOURCE_DIRS}
|
||||
--skip ${CODECHECKER_SKIP_FILE}
|
||||
--jobs ${NPROC}
|
||||
--enable-all
|
||||
--disable checker:clang-diagnostic-c++98-compat
|
||||
--disable modernize-use-trailing-return-type
|
||||
--disable readability-identifier-length
|
||||
--disable readability-uppercase-literal-suffix
|
||||
--disable modernize-avoid-c-arrays
|
||||
--disable modernize-use-auto
|
||||
--disable altera-unroll-loops
|
||||
--disable cppcheck-missingIncludeSystem
|
||||
--disable cppcheck-toomanyconfigs
|
||||
--disable checker:clang-diagnostic-padded
|
||||
--disable altera-struct-pack-align
|
||||
--disable clang-diagnostic-weak-vtables
|
||||
--disable altera-id-dependent-backward-branch
|
||||
--disable bugprone-easily-swappable-parameters
|
||||
--disable clang-diagnostic-covered-switch-default
|
||||
COMMENT "Running CodeChecker analysis..."
|
||||
VERBATIM
|
||||
)
|
||||
|
||||
# Add a custom command to generate the HTML report
|
||||
add_custom_command(TARGET static POST_BUILD
|
||||
COMMAND CodeChecker parse ${CODECHECKER_ANALYZE_DIR}
|
||||
--skip ${CODECHECKER_SKIP_FILE}
|
||||
--export html
|
||||
--output ${CODECHECKER_REPORT_DIR}
|
||||
COMMENT "Generating CodeChecker HTML report..."
|
||||
VERBATIM
|
||||
)
|
||||
|
||||
# Add a custom command to check for errors and fail the build if any are found
|
||||
add_custom_command(TARGET static POST_BUILD
|
||||
COMMAND bash -c "if [ -n \"\$(CodeChecker parse ${CODECHECKER_ANALYZE_DIR} --print-issues | grep -i 'error')\" ]; then echo 'CodeChecker found errors!'; exit 1; fi"
|
||||
COMMENT "Failing the build if CodeChecker finds errors..."
|
||||
VERBATIM
|
||||
)
|
||||
|
||||
# Message if CodeChecker is not found (optional)
|
||||
find_program(CODECHECKER_EXECUTABLE CodeChecker)
|
||||
if(NOT CODECHECKER_EXECUTABLE)
|
||||
message(WARNING "CodeChecker not found. Skipping static analysis.")
|
||||
endif()
|
|
@ -49,9 +49,9 @@ target_compile_definitions(STM8StdPeriph PRIVATE
|
|||
# Set include directories for the library
|
||||
target_include_directories(STM8StdPeriph PUBLIC
|
||||
${CMAKE_SOURCE_DIR}
|
||||
${CMAKE_SOURCE_DIR}/Application
|
||||
${CMAKE_SOURCE_DIR}/Device
|
||||
${CMAKE_SOURCE_DIR}/Driver
|
||||
${CMAKE_SOURCE_DIR}/Application
|
||||
${CMAKE_SOURCE_DIR}/Device
|
||||
${CMAKE_SOURCE_DIR}/Driver
|
||||
${CMAKE_SOURCE_DIR}/STM8S_StdPeriph_Lib/inc
|
||||
)
|
||||
|
||||
|
@ -108,7 +108,7 @@ find_package(Python3 COMPONENTS Interpreter REQUIRED)
|
|||
# Add post-build memory check
|
||||
add_custom_command(TARGET IonizationChamber POST_BUILD
|
||||
COMMAND ${Python3_EXECUTABLE}
|
||||
/workspace/ContinuousIntegration/check_memory.py
|
||||
"${CMAKE_SOURCE_DIR}/../../DevOps/Scripts/CheckFirmwareRomRamUsage.py"
|
||||
${MAX_ROM_SIZE}
|
||||
${MAX_RAM_SIZE}
|
||||
$<TARGET_FILE_DIR:IonizationChamber>/$<TARGET_FILE_BASE_NAME:IonizationChamber>.map
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
services:
|
||||
app:
|
||||
container_name: app
|
||||
container_name: ionizationchamber
|
||||
ulimits:
|
||||
core: -1 # unlimited core dump size
|
||||
build:
|
||||
|
|
Ładowanie…
Reference in New Issue