Skip to content

enable some more stuff #657

enable some more stuff

enable some more stuff #657

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 && /usr/bin/time -v python integration_test.py 2>&1 | tee latest_sdk_test.log
- name: Print results
run: |
LATEST_TIME=$(grep "Elapsed (wall clock) time" test_suites/latest_sdk_test.log | awk '{print $8}')
LATEST_TOTAL_SECONDS=$(echo $LATEST_TIME | awk -F: '{ print ($1 * 60) + $2 }')
echo "Latest SDK execution time in seconds: ${LATEST_TOTAL_SECONDS}"
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 -r * ../../../../test_suites/
- 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 -type f ! -name 'integration_test.py' ! -name 'latest_sdk_test.log' ! -name 'second_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 .
echo "First debug"
ls -al ../../../../
echo "This will fail"
cp -r * ../../../../test_suites/
- 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}')
LATEST_TOTAL_SECONDS=$(echo $LATEST_TIME | awk -F: '{ print ($1 * 60) + $2 }')
SECOND_LATEST_TOTAL_SECONDS=$(echo $SECOND_LATEST_TIME | awk -F: '{ print ($1 * 60) + $2 }')
echo "Latest SDK execution time in seconds: ${LATEST_TOTAL_SECONDS}"
echo "Second Latest SDK execution time in seconds: ${SECOND_LATEST_TOTAL_SECONDS}"
# Compare the total seconds
if (( $(echo "$LATEST_TOTAL_SECONDS < $SECOND_LATEST_TOTAL_SECONDS" | bc -l) )); then
echo "New release is better"
else
echo "New release is worse"
fi
integration-tests-latest-commit:
runs-on: ubuntu-20.04
needs: [ assemble-sdk ]
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: Download lib3mf_sdk artifact
uses: actions/download-artifact@v2
with:
name: lib3mf_sdk.zip
path: lib3mf_sdk.zip
- name: Unpack the SDK
run: |
ls -al && unzip lib3mf_sdk.zip/lib3mf_sdk.zip
- 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: 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 && /usr/bin/time -v python integration_test.py 2>&1 | tee latest_sdk_test.log
- name: Print results
run: |
LATEST_TIME=$(grep "Elapsed (wall clock) time" test_suites/latest_sdk_test.log | awk '{print $8}')
LATEST_TOTAL_SECONDS=$(echo $LATEST_TIME | awk -F: '{ print ($1 * 60) + $2 }')
echo "Latest SDK execution time in seconds: ${LATEST_TOTAL_SECONDS}"