CI #98
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CI | |
on: | |
push: | |
branches: | |
- main | |
pull_request: | |
types: [opened, synchronize, reopened] | |
# Allows you to run this workflow manually from the Actions tab | |
workflow_dispatch: | |
jobs: | |
build: | |
name: Build | |
runs-on: ubuntu-20.04 | |
env: | |
SONAR_SCANNER_VERSION: 4.6.1.2450 # Find the latest version in the "Windows" link on this page: | |
# https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/ | |
SONAR_SERVER_URL: "https://sonarcloud.io" | |
BUILD_WRAPPER_OUT_DIR: build_wrapper_output_directory # Directory where build-wrapper output will be placed | |
steps: | |
- uses: actions/checkout@v2 | |
with: | |
fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis | |
- name: Set up JDK 11 | |
uses: actions/setup-java@v1 | |
with: | |
java-version: 11 | |
- name: Cache SonarQube packages | |
uses: actions/cache@v1 | |
with: | |
path: ~/.sonar/cache | |
key: ${{ runner.os }}-sonar | |
restore-keys: ${{ runner.os }}-sonar | |
- name: Download and install LIBCHECK | |
env: | |
LIBCHECK_REPO_URL: "https://github.com/libcheck/check/releases/download/0.15.2/check-0.15.2.tar.gz" | |
run: | | |
# Install LIBCHECK | |
cd $GITHUB_WORKSPACE/.. | |
wget ${{ env.LIBCHECK_REPO_URL }} | |
tar xf check-0.15.2.tar.gz | |
cd check-0.15.2 | |
patch CMakeLists.txt $GITHUB_WORKSPACE/patches/check-0.15.2.patch | |
mkdir -p build | |
cd build | |
cmake .. | |
make -j4 | |
sudo make install | |
- name: Download and install CPPLINT | |
env: | |
CPPLINT_VERSION: "1.6.1" | |
run: | | |
pip install cpplint==${{env.CPPLINT_VERSION}} | |
- name: Download and install MBEDTLS | |
env: | |
MBEDTLS_VERSION: "2.28.1" | |
MBEDTLS_REPO_URL: "https://github.com/ARMmbed/mbedtls/archive/refs/tags" | |
run: | | |
# Install MBEDTLS | |
cd $GITHUB_WORKSPACE/.. | |
wget ${{ env.MBEDTLS_REPO_URL }}/v${{ env.MBEDTLS_VERSION}}.tar.gz | |
tar xf v${{ env.MBEDTLS_VERSION}}.tar.gz | |
cd mbedtls-${{ env.MBEDTLS_VERSION}} | |
mkdir build | |
cd build | |
cmake -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DBUILD_TESTS=NO -DBUILD_EXAMPLES=NO -DCMAKE_BUILD_TYPE=Release .. | |
make -j8 | |
sudo make install | |
- name: Download and set up sonar-scanner | |
env: | |
SONAR_SCANNER_DOWNLOAD_URL: https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-${{ env.SONAR_SCANNER_VERSION }}-linux.zip | |
run: | | |
mkdir -p $HOME/.sonar | |
curl -sSLo $HOME/.sonar/sonar-scanner.zip ${{ env.SONAR_SCANNER_DOWNLOAD_URL }} | |
unzip -o $HOME/.sonar/sonar-scanner.zip -d $HOME/.sonar/ | |
echo "$HOME/.sonar/sonar-scanner-${{ env.SONAR_SCANNER_VERSION }}-linux/bin" >> $GITHUB_PATH | |
- name: Download and set up build-wrapper | |
env: | |
BUILD_WRAPPER_DOWNLOAD_URL: ${{ env.SONAR_SERVER_URL }}/static/cpp/build-wrapper-linux-x86.zip | |
run: | | |
curl -sSLo $HOME/.sonar/build-wrapper-linux-x86.zip ${{ env.BUILD_WRAPPER_DOWNLOAD_URL }} | |
unzip -o $HOME/.sonar/build-wrapper-linux-x86.zip -d $HOME/.sonar/ | |
echo "$HOME/.sonar/build-wrapper-linux-x86" >> $GITHUB_PATH | |
- name: Download and install s2opc | |
env: | |
S2OPC_REPO_URL: "https://gitlab.com/systerel/S2OPC.git" | |
S2OPC_SHA: "S2OPC_Toolkit_1.3.0" | |
run: | | |
# Install S2OPC | |
cd $GITHUB_WORKSPACE/.. | |
git clone --branch ${{ env.S2OPC_SHA }} --single-branch ${{ env.S2OPC_REPO_URL }} | |
cd S2OPC | |
git checkout ${{ env.S2OPC_SHA }} | |
git show --oneline --shortstat | |
git apply $GITHUB_WORKSPACE/patches/S2OPC.patch | |
WITH_USER_ASSERT=1 S2OPC_CLIENTSERVER_ONLY=1 WITH_NANO_EXTENDED=1 USE_STATIC_EXT_LIBS=1 BUILD_SHARED_LIBS=0 CMAKE_INSTALL_PREFIX=/usr/local ./build.sh | |
sudo make install -C build | |
- name: Download and install Fledge | |
env: | |
FLEDGE_REPO_URL: "https://github.com/fledge-iot/fledge/archive/refs/tags/v2.0.1.zip" | |
run: | | |
cd $GITHUB_WORKSPACE/.. | |
curl -sSLo fledge-pkg.zip ${{ env.FLEDGE_REPO_URL }} | |
unzip -o fledge-pkg.zip -d . | |
mv fledge-2.0.1 fledge | |
cd fledge | |
sudo apt-get update | |
sudo apt-get install libcurl4-openssl-dev | |
sudo ./requirements.sh | |
sudo make install -j8 | |
sudo mkdir -p /usr/include/fledge/rapidjson/ | |
find C/common/ -name '*.h' -exec sudo cp -prv '{}' '/usr/include/fledge/' ';' | |
find C/plugins/ -name '*.h' -exec sudo cp -prv '{}' '/usr/include/fledge/' ';' | |
find C/services/ -name '*.h' -exec sudo cp -prv '{}' '/usr/include/fledge/' ';' | |
find C/tasks/ -name '*.h' -exec sudo cp -prv '{}' '/usr/include/fledge/' ';' | |
sudo cp -prv C/thirdparty/rapidjson/include/rapidjson/* /usr/include/fledge/rapidjson/ | |
sudo mkdir -p /usr/lib/fledge/ | |
sudo cp -prv /usr/local/fledge/lib/* /usr/lib/fledge/ | |
- name: Download and install Google Unit Test framework | |
run: | | |
sudo apt-get install libgtest-dev | |
cd /usr/src/gtest | |
sudo cmake CMakeLists.txt | |
sudo make | |
sudo apt-get install libgmock-dev | |
- name: Download and install gcovr | |
run: | | |
sudo apt-get install gcovr | |
- name: Build and coding rules | |
env: | |
FLEDGE_SRC: "$GITHUB_WORKSPACE/../fledge" | |
run: | | |
export FLEDGE_SRC=${{ env.FLEDGE_SRC }} | |
export FLEDGE_INSTALL=/usr/local/fledge | |
export FLEDGE_ROOT=${{ env.FLEDGE_SRC }} | |
export S2OPC_ROOT=$GITHUB_WORKSPACE/../S2OPC | |
export LD_LIBRARY_PATH=/usr/lib:/usr/local/lib:$FLEDGE_SRC/cmake_build/C/lib:/usr/local/fledge/lib/ | |
make clean | |
make build | |
make check | |
make cpplint | |
- name: Run unit tests | |
env: | |
FLEDGE_SRC: "$GITHUB_WORKSPACE/../fledge" | |
run: | | |
export FLEDGE_SRC=${{ env.FLEDGE_SRC }} | |
export FLEDGE_INSTALL=/usr/local/fledge | |
export FLEDGE_ROOT=${{ env.FLEDGE_SRC }} | |
export FLEDGE_DATA=$FLEDGE_ROOT/data | |
export S2OPC_ROOT=$GITHUB_WORKSPACE/../S2OPC | |
export LD_LIBRARY_PATH=/usr/lib:/usr/local/lib:$FLEDGE_SRC/cmake_build/C/lib:/usr/local/fledge/lib/ | |
make unit_tests || (tail -n 2000 /var/log/syslog && false) | |
- name: Archive HTML coverage results | |
if: always() | |
uses: actions/upload-artifact@v3 | |
with: | |
name: html-coverage-report | |
path: | | |
build/tests/RunTests_coverage_html | |
- name: Run build-wrapper | |
env: | |
FLEDGE_SRC: "$GITHUB_WORKSPACE/../fledge" | |
run: | | |
export FLEDGE_SRC=${{ env.FLEDGE_SRC }} | |
export FLEDGE_INSTALL=/usr/local/fledge | |
export FLEDGE_ROOT=${{ env.FLEDGE_SRC }} | |
export S2OPC_ROOT=$GITHUB_WORKSPACE/../S2OPC | |
export LD_LIBRARY_PATH=/usr/lib:/usr/local/lib:$FLEDGE_SRC/cmake_build/C/lib:/usr/local/fledge/lib/ | |
make clean | |
cmake -S . -B build -DCMAKE_BUILD_TYPE=Coverage | |
build-wrapper-linux-x86-64 --out-dir ${{ env.BUILD_WRAPPER_OUT_DIR }} cmake --build build/tests --config Release | |
cd build/tests | |
make | |
make RunTests_coverage_sonar | |
- name: Run sonar-scanner | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} | |
run: | | |
sonar-scanner --define sonar.host.url="${{ env.SONAR_SERVER_URL }}" --define sonar.cfamily.build-wrapper-output="${{ env.BUILD_WRAPPER_OUT_DIR }}" --define sonar.organization="fledge-power" --define sonar.projectKey="fledge-power_fledge-north-s2opcua" --define sonar.inclusions="**/src/plugin.cpp,**/src/opcua_server_*.cpp,**/include/opcua_server*.h" --define sonar.coverageReportPaths="build/tests/RunTests_coverage_sonar-sonarqube.xml" | |
- name: Archive code coverage results | |
if: always() | |
uses: actions/upload-artifact@v3 | |
with: | |
name: code-coverage-report | |
path: | | |
build/tests/RunTests_coverage_sonar-sonarqube.xml | |
build/tests/default_config.inc | |
build/tests/base_addrspace.c | |