pull/273/head
RobertGawron 2025-06-24 20:19:49 +02:00
rodzic d372c4c617
commit 8d6268c613
4 zmienionych plików z 29 dodań i 110 usunięć

Wyświetl plik

@ -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

Wyświetl plik

@ -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()

Wyświetl plik

@ -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

Wyświetl plik

@ -1,6 +1,6 @@
services:
app:
container_name: app
container_name: ionizationchamber
ulimits:
core: -1 # unlimited core dump size
build: