Skip to content

Integration test (last 2 releases) #646

Integration test (last 2 releases)

Integration test (last 2 releases) #646

Workflow file for this run

on: [ push, pull_request, workflow_dispatch ]
name: Build
jobs:
build-linux-memtest:
runs-on: ubuntu-20.04
steps:
- run: sudo apt update
- run: sudo apt install -y valgrind uuid-dev
- uses: actions/checkout@v2
with:
submodules: true
- run: sh cmake/GenerateMake.sh
- run: cmake --build . --target lib3mf_memcheck
working-directory: ./build
build-linux-ubi8-gcc12:
runs-on: ubuntu-20.04
steps:
- run: sudo apt update
- run: sudo apt install -y uuid-dev
- uses: actions/checkout@v2
with:
submodules: true
- run: mkdir -p build
- run: zip -r build/bindings.zip Autogenerated/Bindings
- name: Archive bindings
uses: actions/upload-artifact@v2
with:
name: bindings.zip
path: build/bindings.zip
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Docker Build
uses: docker/build-push-action@v5
with:
context: .
file: ./CI/Dockerfile
platforms: linux/amd64
tags: lib3mf_ubi8:latest
load: true
- name: Docker Extract
uses: shrink/[email protected]
id: extract
with:
image: lib3mf_ubi8:latest
path: out.zip
destination: dist
- run: unzip out.zip
working-directory: ./dist
- name: Upload Artifact
uses: actions/upload-artifact@v2
with:
name: lib3mf.so
path: dist/lib3mf.so.2
build-macos:
runs-on: macos-latest
steps:
- uses: actions/checkout@v2
with:
submodules: true
- run: sh cmake/GenerateMake.sh "-DCMAKE_OSX_ARCHITECTURES=arm64;x86_64"
- run: cmake --build .
working-directory: ./build
- run: ctest -V
working-directory: ./build
- name: Archive Mac binary
uses: actions/upload-artifact@v2
with:
name: lib3mf.dylib
path: build/lib3mf.dylib
build-macos-debug:
runs-on: macos-latest
steps:
- uses: actions/checkout@v2
with:
submodules: true
- run: sh cmake/GenerateMake.sh "-DCMAKE_OSX_ARCHITECTURES=arm64;x86_64 -DCMAKE_BUILD_TYPE=Debug"
- run: cmake --build .
working-directory: ./build
- run: ctest -V
working-directory: ./build
- name: Archive Mac binary
uses: actions/upload-artifact@v2
with:
name: lib3mf.debug.dylib
path: build/lib3mf.dylib
codecoverage-macos:
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Install Prerequisites
run: |
brew install lcov
brew install gcovr
- run: sh cmake/GenerateMake.sh -DBUILD_FOR_CODECOVERAGE=ON
- run: cmake --build .
working-directory: ./build
- run: ./Tests/codecoverage/run_codecoverage.sh
- name: Archive Code Coverage Results
uses: actions/upload-artifact@v2
with:
name: codecoverage.zip
path: build/codecoverage.zip
- name: Upload code coverage to codecov
uses: codecov/codecov-action@v3
with:
token: ${{ secrets.CODECOV_TOKEN }}
files: ./build/Test_CPP_Bindings_filtered.info
fail_ci_if_error: true # optional (default = false)
verbose: true # optional (default = false)
build-windows-release:
runs-on: windows-2019
steps:
- uses: actions/checkout@v2
with:
submodules: true
- run: ./cmake/GenerateVS2019.bat
- run: cmake --build . --config Release
working-directory: ./build
- run: ctest -V
working-directory: ./build
- name: Archive Windows Release binary
uses: actions/upload-artifact@v2
with:
name: lib3mf.dll
path: build/Release/lib3mf.dll
- name: Archive Windows Release lib
uses: actions/upload-artifact@v2
with:
name: lib3mf.lib
path: build/Release/lib3mf.lib
build-windows-debug:
runs-on: windows-2019
steps:
- uses: actions/checkout@v2
with:
submodules: true
- run: ./cmake/GenerateVS2019.bat
- run: cmake --build . --config Debug
working-directory: ./build
- run: ctest -V
working-directory: ./build
- name: Archive Windows Debug binary
uses: actions/upload-artifact@v2
with:
name: lib3mf.debug.dll
path: build/Debug/lib3mf.dll
- uses: actions/upload-artifact@v2
with:
name: lib3mf.pdb
path: build/Debug/lib3mf.pdb
- uses: actions/upload-artifact@v2
with:
name: lib3mf.debug.lib
path: build/Debug/lib3mf.lib
build-windows-32bit:
runs-on: windows-2019
steps:
- uses: actions/checkout@v2
with:
submodules: true
- run: ./cmake/GenerateVS2019_32bit.bat
- run: cmake --build . --config Release
working-directory: ./build_32bit
- run: ctest -V
working-directory: ./build_32bit
- name: Archive Windows 32 bit Release binary
uses: actions/upload-artifact@v2
with:
name: lib3mf_32bit.dll
path: build_32bit/Release/lib3mf.dll
- name: Archive Windows 32 bit Release lib
uses: actions/upload-artifact@v2
with:
name: lib3mf_32bit.lib
path: build_32bit/Release/lib3mf.lib
build-mingw-w64:
runs-on: windows-2019
steps:
- run: choco install mingw -y
- uses: actions/checkout@v2
with:
submodules: true
- run: ./cmake/GenerateMinGW.bat
- run: cmake --build .
working-directory: ./build
- run: ctest -V
working-directory: ./build
assemble-sdk:
runs-on: ubuntu-20.04
needs: [ build-windows-release, build-macos, build-linux-ubi8-gcc12 ]
steps:
- run: sudo apt install -y zip unzip
- run: mkdir build
- uses: actions/checkout@v2
with:
submodules: false
- name: Download all workflow run artifacts
uses: actions/download-artifact@v2
with:
path: ./build
- run: ls -Rl ./build
- run: unzip bindings.zip/bindings.zip
working-directory: ./build
- run: bash SDK/GenerateSDK_github.sh
- name: Archive SDK artifact
uses: actions/upload-artifact@v2
with:
name: lib3mf_sdk.zip
path: build/lib3mf_sdk.zip
deploy-linux:
runs-on: ubuntu-20.04
needs: [ assemble-sdk ]
steps:
- run: sudo apt install -y zip unzip
- run: pwd
- run: ls -Rl .
- name: Download lib3mf_sdk artifact
uses: actions/download-artifact@v2
with:
name: lib3mf_sdk.zip
path: lib3mf_sdk.zip
- run: ls -Rl .
- name: Unpack the SDK
run: |
unzip lib3mf_sdk.zip/lib3mf_sdk.zip
- name: Build CppDynamic
run: |
sh Examples/CppDynamic/GenerateMake.sh
cd Examples/CppDynamic/build
cmake --build .
./Example_ExtractInfo ../../Files/Helix.3mf
- name: Build Cpp
run: |
sh Examples/Cpp/GenerateMake.sh
cd Examples/Cpp/build
cmake --build .
./Example_ExtractInfo ../../Files/Helix.3mf
deploy-windows:
runs-on: windows-2019
needs: [ assemble-sdk ]
steps:
- name: Download lib3mf_sdk artifact
uses: actions/download-artifact@v2
with:
name: lib3mf_sdk.zip
path: lib3mf_sdk.zip
- name: Unpack the SDK
run: |
unzip lib3mf_sdk.zip/lib3mf_sdk.zip
- name: Build CppDynamic
run: |
./Examples/CppDynamic/GenerateVS2019.bat
cd Examples/CppDynamic/build
cmake --build . --config Release
./Release/Example_ExtractInfo.exe ../../Files/Helix.3mf
- name: Build Cpp
run: |
./Examples/Cpp/GenerateVS2019.bat
cd Examples/Cpp/build
cmake --build . --config Release
./Release/Example_ExtractInfo.exe ../../Files/Helix.3mf
deploy-macos:
runs-on: macos-latest
needs: [ assemble-sdk ]
steps:
- name: Download lib3mf_sdk artifact
uses: actions/download-artifact@v2
with:
name: lib3mf_sdk.zip
path: lib3mf_sdk.zip
- name: Unpack the SDK
run: |
unzip lib3mf_sdk.zip/lib3mf_sdk.zip
- name: Build CppDynamic
run: |
sh Examples/CppDynamic/GenerateMake.sh
cd Examples/CppDynamic/build
cmake --build .
./Example_ExtractInfo ../../Files/Helix.3mf
- name: Build Cpp
run: |
sh Examples/Cpp/GenerateMake.sh
cd Examples/Cpp/build
cmake --build .
./Example_ExtractInfo ../../Files/Helix.3mf
integration_tests-latest-release:
runs-on: ubuntu-20.04
steps:
- name: Checkout code
uses: actions/checkout@v2
with:
submodules: true
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: '3.8'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
- name: Get latest lib3mf SDK release info from GitHub API
id: get_lib3mf_release
run: |
LATEST_LIB3MF_URL=$(curl -s https://api.github.com/repos/3MFConsortium/lib3mf/releases/latest | grep "browser_download_url.*zip" | cut -d '"' -f 4)
echo "LATEST_LIB3MF_URL=${LATEST_LIB3MF_URL}" >> $GITHUB_ENV
- name: Download latest lib3mf SDK zip
run: |
wget ${{ env.LATEST_LIB3MF_URL }} -O latest_lib3mf_sdk.zip
- name: Unpack the SDK
run: |
unzip latest_lib3mf_sdk.zip -d lib3mf_sdk
- name: Build CppDynamic
run: |
sh lib3mf_sdk/Examples/CppDynamic/GenerateMake.sh
cd lib3mf_sdk/Examples/CppDynamic/build
cmake --build .
./Example_ExtractInfo ../../Files/Helix.3mf
- name: Download and unzip test suite
run: |
wget https://github.com/3MFConsortium/test_suites/releases/download/v2.0.0/3MF_Conformance_Test_Suites_v2.0.0.zip
unzip 3MF_Conformance_Test_Suites_v2.0.0.zip -d test_suites
- name: List files
run: |
ls -al
- name: Copy integration test script
run: |
cp CI/integration_test.py test_suites/ && cp -r lib3mf_sdk/Examples/CppDynamic/build/* test_suites/
- name: Run integration tests
run: |
cd test_suites && python integration_test.py
integration_tests-last-two-releases:
runs-on: ubuntu-20.04
steps:
- name: Checkout code
uses: actions/checkout@v2
with:
submodules: true
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: '3.8'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
- name: Get latest lib3mf SDK release info from GitHub API
id: get_latest_release
run: |
LATEST_LIB3MF_URL=$(curl -s https://api.github.com/repos/3MFConsortium/lib3mf/releases/latest | grep "browser_download_url.*zip" | cut -d '"' -f 4)
echo "LATEST_LIB3MF_URL=${LATEST_LIB3MF_URL}" >> $GITHUB_ENV
- name: Get second latest lib3mf SDK release info from GitHub API
id: get_second_latest_release
run: |
SECOND_LATEST_LIB3MF_URL=$(curl -s https://api.github.com/repos/3MFConsortium/lib3mf/releases | grep "browser_download_url.*zip" | cut -d '"' -f 4 | sed -n '2p')
echo "SECOND_LATEST_LIB3MF_URL=${SECOND_LATEST_LIB3MF_URL}" >> $GITHUB_ENV
- name: Download latest lib3mf SDK zip
run: |
wget ${{ env.LATEST_LIB3MF_URL }} -O latest_lib3mf_sdk.zip
- name: Download second latest lib3mf SDK zip
run: |
wget ${{ env.SECOND_LATEST_LIB3MF_URL }} -O second_latest_lib3mf_sdk.zip
- name: Unpack the latest SDK
run: |
unzip latest_lib3mf_sdk.zip -d latest_lib3mf_sdk
- name: Unpack the second latest SDK
run: |
unzip second_latest_lib3mf_sdk.zip -d second_latest_lib3mf_sdk
- name: Download and unzip test suite
run: |
wget https://github.com/3MFConsortium/test_suites/releases/download/v2.0.0/3MF_Conformance_Test_Suites_v2.0.0.zip
unzip 3MF_Conformance_Test_Suites_v2.0.0.zip -d test_suites
- name: Copy integration test script
run: |
cp CI/integration_test.py test_suites/
- name: Build and run CppDynamic with latest SDK
run: |
sh latest_lib3mf_sdk/Examples/CppDynamic/GenerateMake.sh
cd latest_lib3mf_sdk/Examples/CppDynamic/build
cmake --build .
cp * ../../../test_suites/
cp *.so ../../../test_suites/ || true
- name: Run integration tests with latest SDK
run: |
cd test_suites
/usr/bin/time -v python integration_test.py 2>&1 | tee latest_sdk_test.log
- name: Clean up latest SDK binaries
run: |
find test_suites -maxdepth 1 ! -name 'integration_test.py' ! -name '3MF_Conformance_Test_Suites_v2.0.0' ! -name 'latest_sdk_test.log' -exec rm -rf {} +
- name: Build and run CppDynamic with second latest SDK
run: |
sh second_latest_lib3mf_sdk/Examples/CppDynamic/GenerateMake.sh
cd second_latest_lib3mf_sdk/Examples/CppDynamic/build
cmake --build .
cp * ../../../test_suites/
cp *.so ../../../test_suites/ || true
- name: Run integration tests with second latest SDK
run: |
cd test_suites
/usr/bin/time -v python integration_test.py 2>&1 | tee second_latest_sdk_test.log
- name: Compare results
run: |
LATEST_TIME=$(grep "Elapsed (wall clock) time" test_suites/latest_sdk_test.log | awk '{print $8}')
SECOND_LATEST_TIME=$(grep "Elapsed (wall clock) time" test_suites/second_latest_sdk_test.log | awk '{print $8}')
echo "Latest SDK execution time: ${LATEST_TIME}"
echo "Second Latest SDK execution time: ${SECOND_LATEST_TIME}"
if [ $(echo "$LATEST_TIME < $SECOND_LATEST_TIME" | bc) -eq 1 ]; then
echo "New release is better"
else
echo "New release is worse"
fi