Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add coverage and use reusable workflow from everest-ci #97

Merged
merged 11 commits into from
Nov 26, 2024
3 changes: 3 additions & 0 deletions .ci/build-kit/docker/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# syntax=docker/dockerfile:1
ARG BASE_IMAGE_TAG=latest
FROM ghcr.io/everest/everest-ci/build-kit-base:${BASE_IMAGE_TAG}
17 changes: 0 additions & 17 deletions .ci/build-kit/install_and_test.sh

This file was deleted.

23 changes: 23 additions & 0 deletions .ci/build-kit/scripts/compile.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
#!/bin/sh

cmake \
-B "$EXT_MOUNT/build" \
-S "$EXT_MOUNT/source" \
-G Ninja \
-DBUILD_TESTING=ON \
-DCMAKE_BUILD_TYPE=Debug \
-DCMAKE_INSTALL_PREFIX="$EXT_MOUNT/dist" \
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON

retVal=$?
if [ $retVal -ne 0 ]; then
echo "Configuring failed with return code $retVal"
exit $retVal
fi

ninja -C "$EXT_MOUNT/build"
retVal=$?
if [ $retVal -ne 0 ]; then
echo "Compiling failed with return code $retVal"
exit $retVal
fi
9 changes: 9 additions & 0 deletions .ci/build-kit/scripts/install.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#!/bin/sh

ninja -C "$EXT_MOUNT/build" install
retVal=$?

if [ $retVal -ne 0 ]; then
echo "Installation failed with return code $retVal"
exit $retVal
fi
25 changes: 25 additions & 0 deletions .ci/build-kit/scripts/run_coverage.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#!/bin/sh

ninja \
-C "$EXT_MOUNT/build" \
everest-evse_security_gcovr_coverage
retValHTML=$?

ninja \
-C "$EXT_MOUNT/build" \
everest-evse_security_gcovr_coverage_xml
retValXML=$?

# Copy the generated coverage report and xml to the mounted directory in any case
cp -R "$EXT_MOUNT/build/everest-evse_security_gcovr_coverage" "$EXT_MOUNT/gcovr-coverage"
cp "$EXT_MOUNT/build/everest-evse_security_gcovr_coverage_xml.xml" "$EXT_MOUNT/gcovr-coverage-xml.xml"

if [ $retValHTML -ne 0 ]; then
echo "Coverage HTML report failed with return code $retValHTML"
exit $retValHTML
fi

if [ $retValXML -ne 0 ]; then
echo "Coverage XML report failed with return code $retValXML"
exit $retValXML
fi
12 changes: 12 additions & 0 deletions .ci/build-kit/scripts/run_unit_tests.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#!/bin/sh

CTEST_OUTPUT_ON_FAILURE=1 ninja -C "$EXT_MOUNT/build" test
retVal=$?

# Copy the LastTest.log file to the mounted directory in any case
cp "$EXT_MOUNT/build/Testing/Temporary/LastTest.log" "$EXT_MOUNT/ctest-report"

if [ $retVal -ne 0 ]; then
echo "Unit tests failed with return code $retVal"
exit $retVal
fi
63 changes: 20 additions & 43 deletions .github/workflows/build_and_test.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Build and test libevse-security
name: Build, Lint and Test
on:
pull_request: {}
workflow_dispatch:
Expand All @@ -11,47 +11,24 @@ on:
options:
- 'ubuntu-22.04'
- 'large-ubuntu-22.04-xxl'
schedule:
- cron: '37 13,1 * * *'

jobs:
lint:
name: Lint
runs-on: ${{ inputs.runner || 'ubuntu-22.04' }}
steps:
- name: Checkout libevse-security
uses: actions/checkout@v3
with:
path: source
- name: Run clang-format
uses: everest/everest-ci/github-actions/[email protected]
with:
source-dir: source
extensions: hpp,cpp
exclude: cache
test:
name: Build and test libevse-security
runs-on: ${{ inputs.runner || 'ubuntu-22.04' }}
steps:
- name: Checkout libevse-security
uses: actions/checkout@v3
with:
path: source
- name: Setup run scripts
run: |
mkdir scripts
rsync -a source/.ci/build-kit/ scripts
- name: Pull docker container
run: |
docker pull --platform=linux/x86_64 --quiet ghcr.io/everest/build-kit-alpine:latest
docker image tag ghcr.io/everest/build-kit-alpine:latest build-kit
- name: Unit test and install
run: |
docker run \
--volume "$(pwd):/ext" \
--name test-container \
build-kit run-script install_and_test
- name: Archive test results
if: always()
uses: actions/upload-artifact@v3
with:
name: ctest-report
path: ${{ github.workspace }}/ctest-report
ci:
name: Build, Lint and Test
uses: everest/everest-ci/.github/workflows/[email protected]
permissions:
contents: read
secrets:
coverage_deploy_token: ${{ secrets.SA_GITHUB_PAT }}
with:
runner: ${{ inputs.runner || 'ubuntu-22.04' }}
artifact_deploy_target_repo: EVerest/everest.github.io
run_coverage: true
do_not_run_coverage_badge_creation: false
run_install_wheels: false
run_integration_tests: false
ctest_report_path: ctest-report
coverage_report_path: gcovr-coverage
coverage_xml_path: gcovr-coverage-xml.xml
2 changes: 2 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ option(USING_CUSTOM_PROVIDER "Include code for using OpenSSL 3 and the custom pr

if((${CMAKE_PROJECT_NAME} STREQUAL ${PROJECT_NAME} OR ${PROJECT_NAME}_BUILD_TESTING) AND BUILD_TESTING)
set(LIBEVSE_SECURITY_BUILD_TESTING ON)
evc_include(CodeCoverage)
append_coverage_compiler_flags()
endif()

if(USING_TPM2 AND USING_CUSTOM_PROVIDER)
Expand Down
44 changes: 29 additions & 15 deletions tests/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -32,42 +32,56 @@ add_compile_definitions(BUILD_TESTING_EVSE_SECURITY)

add_test(${TEST_TARGET_NAME} ${TEST_TARGET_NAME})

install(
PROGRAMS "${CMAKE_CURRENT_SOURCE_DIR}/generate_test_certs.sh"
PROGRAMS "${CMAKE_CURRENT_SOURCE_DIR}/generate_test_certs_multi.sh"
setup_target_for_coverage_gcovr_html(
NAME ${PROJECT_NAME}_gcovr_coverage
EXECUTABLE ctest
DEPENDENCIES ${TEST_TARGET_NAME}
EXCLUDE "tests/*"
)

setup_target_for_coverage_gcovr_xml(
NAME ${PROJECT_NAME}_gcovr_coverage_xml
EXECUTABLE ctest
DEPENDENCIES ${TEST_TARGET_NAME}
EXCLUDE "tests/*"
)

file(COPY
"${CMAKE_CURRENT_SOURCE_DIR}/generate_test_certs.sh"
"${CMAKE_CURRENT_SOURCE_DIR}/generate_test_certs_multi.sh"
DESTINATION "${CMAKE_BINARY_DIR}/tests"
)

install(
DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/configs"
file(COPY
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Installing these files during configure makes the CI reusable workflow happy. Was there a reason why they were installed before? @james-ctc

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

install was being used in other places so it was done to follow the same pattern.

Not a problem here, but in some tests there were issues that the file(COPY ...) doesn't appear to be part of the dependencies so when there is an update ninja/make doesn't copy the updates. It is possible that was the original reason for using install.

Elsewhere I have added specific targets where checking for updates is important.

moving away from using install is a very good improvement.

"${CMAKE_CURRENT_SOURCE_DIR}/configs"
DESTINATION "${CMAKE_BINARY_DIR}/tests"
FILES_MATCHING PATTERN "*.cnf"
)

install(
DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/future_leaf"
file(COPY
"${CMAKE_CURRENT_SOURCE_DIR}/future_leaf"
DESTINATION "${CMAKE_BINARY_DIR}/tests"
FILES_MATCHING PATTERN "*"
)

install(
DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/expired_leaf"
file(COPY
"${CMAKE_CURRENT_SOURCE_DIR}/expired_leaf"
DESTINATION "${CMAKE_BINARY_DIR}/tests"
FILES_MATCHING PATTERN "*"
)

install(
DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/expired_runtime"
file(COPY
"${CMAKE_CURRENT_SOURCE_DIR}/expired_runtime"
DESTINATION "${CMAKE_BINARY_DIR}/tests"
FILES_MATCHING PATTERN "*"
)

install(
PROGRAMS "${CMAKE_CURRENT_SOURCE_DIR}/create-pki.sh"
file(COPY
"${CMAKE_CURRENT_SOURCE_DIR}/create-pki.sh"
DESTINATION "${CMAKE_BINARY_DIR}/tests"
)

install(
FILES "${CMAKE_CURRENT_SOURCE_DIR}/openssl-pki.conf"
file(COPY
"${CMAKE_CURRENT_SOURCE_DIR}/openssl-pki.conf"
DESTINATION "${CMAKE_BINARY_DIR}/tests"
)