MultiSense Viewer CI #85
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: MultiSense Viewer CI | |
on: | |
push: | |
tags: | |
- 'v*' # Push events to matching v*, i.e. v1.0, v20.15.10 | |
pull_request: | |
types: | |
- closed | |
workflow_dispatch: | |
env: | |
# Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) | |
BUILD_TYPE: Release | |
jobs: | |
VersionJob: | |
name: "Set Version" | |
runs-on: ubuntu-latest | |
outputs: | |
install_path: ${{ steps.install_path_id.outputs.install_path }} | |
install_path_ubuntu: ${{ steps.install_path_id_ubuntu.outputs.install_path_ubuntu }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 # Fetch full history to access tags | |
fetch-tags: true | |
- name: Fetch tags explicitly | |
run: git fetch --tags | |
- name: Extract version from tag | |
id: extract_version | |
run: | | |
# Get the latest tag (e.g., v1.1.5) and remove the 'v' prefix if needed | |
TAG=$(git describe --tags `git rev-list --tags --max-count=1`) | |
VERSION=${TAG#v} | |
# Split VERSION into MAJOR, MINOR, and PATCH | |
MAJOR=$(echo "$VERSION" | cut -d. -f1) | |
MINOR=$(echo "$VERSION" | cut -d. -f2) | |
PATCH=$(echo "$VERSION" | cut -d. -f3) | |
# Export the version numbers as environment variables | |
echo "MAJOR=$MAJOR" >> $GITHUB_ENV | |
echo "MINOR=$MINOR" >> $GITHUB_ENV | |
echo "PATCH=$PATCH" >> $GITHUB_ENV | |
- name: Print version | |
run: echo "The version is ${{ env.MAJOR }}.${{ env.MINOR }}.${{ env.PATCH }}" | |
- name: Set Output | |
id: install_path_id | |
run: echo "install_path=multisense_${{ env.MAJOR }}.${{ env.MINOR }}-${{ env.PATCH }}_amd64" >> $GITHUB_OUTPUT | |
- name: Set Output Ubuntu | |
id: install_path_id_ubuntu | |
run: echo "install_path_ubuntu=multisense_${{ env.MAJOR }}.${{ env.MINOR }}-${{ env.PATCH }}_amd64/opt/multisense" >> $GITHUB_OUTPUT | |
ReleaseJob: | |
name: Create Release | |
needs: VersionJob | |
runs-on: ubuntu-latest | |
outputs: | |
upload_url: ${{ steps.create_release.outputs.upload_url }} | |
steps: | |
- name: Create Release | |
id: create_release | |
uses: actions/create-release@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
tag_name: ${{ github.ref_name }} | |
release_name: ${{ github.ref_name }} | |
body: | | |
# MultiSense Viewer 1.1.1 | |
- Not compatible with remote head systems. Revert to 1.0.0 for that purpose. | |
### New features: | |
- Visualize IMU data with corresponding 3D model (MultiSense: KS-21, S27, S30) | |
- Image enhancements (Normalize disparity, apply colormaps, interpolate) | |
- Zoom controls in 2D view | |
- Colorize Point Cloud if the AUX camera is present | |
- Record point clouds as .ply files | |
- Record IMU data | |
- AUX camera exposure control with LibMultiSense 6.0.0 | |
- Reloadable spirv-shaders (useful for testing various gpu-applied filters) | |
- Various optimizations and more reliable AutoConnect | |
- Opt-in for anonymous usage statistics | |
- Image effects (Edge detection, blurring, embossing, sharpening) | |
### Windows users: | |
1. Install WinPcap_driver.exe to let the viewer configure network settings automatically | |
2. Download and run the Windows installer: MultiSenseSetup.exe | |
### Ubuntu users: | |
1. Make sure you have updated graphics drivers, ffmpeg and policykit installed. Can be installed via apt pacakge manager: | |
$ apt install ffmpeg libvulkan1 policykit-1 | |
2. Download and install the multisense_1.1-0_amd64.deb package using your default package manager or type in terminal: | |
$ dpkg --install ~/Downloads/multisense_1.1-0_amd64.deb | |
3. Launch through start menu or run a start script at | |
$ /opt/multisense/start.sh | |
- Uninstall application: | |
1. Windows: Run 000-uninstall.exe in the installation folder | |
2. Ubuntu: Uninstall with your package manager or run dpkg ($ dpkg --remove com.carnegierobotics.multisense) | |
draft: true | |
prerelease: true | |
BuildWindows: | |
name: Build For Windows | |
needs: [ReleaseJob, VersionJob] | |
# The CMake configure and build commands are platform agnostic and should work equally well on Windows or Mac. | |
# You can convert this to a matrix build if you need cross-platform coverage. | |
# See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix | |
runs-on: windows-2022 | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: 'true' | |
- name: Upload WinPCap Driver | |
id: upload-winpcap-driver | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ needs.ReleaseJob.outputs.upload_url }} # This pulls from the CREATE RELEASE step above, referencing it's ID to get its outputs object, which include a `upload_url`. See this blog post for more info: https://jasonet.co/posts/new-features-of-github-actions/#passing-data-to-future-steps | |
asset_path: ${{github.workspace}}/internal/AutoConnect/WinPcap/WinPcap_driver.exe | |
asset_name: WinPcap_driver.exe | |
asset_content_type: application/zip | |
- name: Prepare Vulkan SDK | |
uses: humbletim/[email protected] | |
with: | |
vulkan-query-version: 1.3.204.0 | |
vulkan-components: Vulkan-Headers, Vulkan-Loader | |
vulkan-use-cache: true | |
- name: Configure CMake | |
# Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make. | |
# See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type | |
run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DGIT_SUBMODULE=OFF -DWARNINGS_AS_ERRORS=FALSE #-D CMAKE_C_COMPILER=gcc-11 -D CMAKE_CXX_COMPILER=g++-11 | |
- name: Build project | |
# Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make. | |
# See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type | |
run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} --target install -- /m:10 | |
- name: zipFiles | |
uses: vimtor/action-zip@v1 | |
with: | |
files: ./build/${{ needs.VersionJob.outputs.install_path }} | |
dest: MultiSense_viewer.zip | |
- name: Upload Release Asset | |
id: upload-release-asset | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ needs.ReleaseJob.outputs.upload_url }} # This pulls from the CREATE RELEASE step above, referencing it's ID to get its outputs object, which include a `upload_url`. See this blog post for more info: https://jasonet.co/posts/new-features-of-github-actions/#passing-data-to-future-steps | |
asset_path: ./MultiSense_viewer.zip | |
asset_name: MultiSense_viewer.zip | |
asset_content_type: application/zip | |
- name: "Create Artifact" | |
uses: actions/upload-artifact@v4 | |
with: | |
name: multisense-zip | |
path: ${{github.workspace}}/MultiSense_viewer.zip | |
BuildUbuntu20: | |
name: Build and package for Ubuntu | |
needs: [ReleaseJob, VersionJob] | |
# The CMake configure and build commands are platform agnostic and should work equally well on Windows or Mac. | |
# You can convert this to a matrix build if you need cross-platform coverage. | |
# See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix | |
runs-on: ubuntu-20.04 | |
steps: | |
- name: print install location | |
run: echo "My output is ${{ needs.VersionJob.outputs.install_path }}" | |
- uses: actions/checkout@v4 | |
with: | |
submodules: 'true' | |
- name: Prepare Vulkan SDK | |
uses: humbletim/[email protected] | |
with: | |
vulkan-query-version: 1.3.204.0 | |
vulkan-components: Vulkan-Headers, Vulkan-Loader | |
vulkan-use-cache: true | |
- name: Install dependencies | |
run: sudo apt-get install -y cmake libx11-dev build-essential xorg-dev libtbb-dev libavformat-dev libavcodec-dev libavutil-dev libswscale-dev libssl-dev libgtk-3-dev libsystemd-dev | |
#- name: update gcc11 | |
#run: sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test && sudo apt update && sudo apt install -y gcc-11 g++-11 | |
- name: Configure CMake | |
# Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make. | |
# See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type | |
run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DGIT_SUBMODULE=OFF -DWARNINGS_AS_ERRORS=FALSE #-D CMAKE_C_COMPILER=gcc-11 -D CMAKE_CXX_COMPILER=g++-11 | |
- name: Build | |
# Build your program with the given configuration | |
run: cmake --build ${{github.workspace}}/build | |
- name: Install | |
working-directory: ${{github.workspace}}/build | |
run: cmake --install . --config ${{env.BUILD_TYPE}} | |
- name: Prepare package step | |
working-directory: ${{github.workspace}}/build | |
run: | | |
mkdir ${{ needs.VersionJob.outputs.install_path }}/DEBIAN && cp ${{github.workspace}}/Assets/Tools/Ubuntu/control ${{ needs.VersionJob.outputs.install_path }}/DEBIAN/ | |
mkdir -p ${{ needs.VersionJob.outputs.install_path }}/usr/share/applications && cp ${{github.workspace}}/Assets/Tools/Ubuntu/multisense.desktop ${{ needs.VersionJob.outputs.install_path }}/usr/share/applications/ | |
cp ${{github.workspace}}/Assets/Tools/Ubuntu/start.sh ${{ needs.VersionJob.outputs.install_path }}/opt/multisense/ | |
rm -rf ${{ needs.VersionJob.outputs.install_path }}/opt/multisense/include | |
rm -rf ${{ needs.VersionJob.outputs.install_path }}/opt/multisense/lib | |
rm -rf ${{ needs.VersionJob.outputs.install_path }}/opt/multisense/share | |
- name: Package | |
working-directory: ${{github.workspace}}/build | |
run: dpkg-deb --build --root-owner-group "${{ needs.VersionJob.outputs.install_path }}" "${{ needs.VersionJob.outputs.install_path }}_ubuntu20_04.deb" | |
- name: Upload Release Asset | |
id: upload-release-asset | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ needs.ReleaseJob.outputs.upload_url }} # This pulls from the CREATE RELEASE step above, referencing it's ID to get its outputs object, which include a `upload_url`. See this blog post for more info: https://jasonet.co/posts/new-features-of-github-actions/#passing-data-to-future-steps | |
asset_path: ./build/${{ needs.VersionJob.outputs.install_path }}_ubuntu20_04.deb | |
asset_name: ${{ needs.VersionJob.outputs.install_path }}_ubuntu20_04.deb | |
asset_content_type: application/zip | |
BuildUbuntu22: | |
name: Build and package for Ubuntu | |
needs: [ReleaseJob, VersionJob] | |
# The CMake configure and build commands are platform agnostic and should work equally well on Windows or Mac. | |
# You can convert this to a matrix build if you need cross-platform coverage. | |
# See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix | |
runs-on: ubuntu-22.04 | |
steps: | |
- name: print install location | |
run: echo "My output is ${{ needs.VersionJob.outputs.install_path }}" | |
- uses: actions/checkout@v4 | |
with: | |
submodules: 'true' | |
- name: Prepare Vulkan SDK | |
uses: humbletim/[email protected] | |
with: | |
vulkan-query-version: 1.3.204.0 | |
vulkan-components: Vulkan-Headers, Vulkan-Loader | |
vulkan-use-cache: true | |
- name: Install dependencies | |
run: sudo apt-get install -y cmake libx11-dev build-essential xorg-dev libtbb-dev libavformat-dev libavcodec-dev libavutil-dev libswscale-dev libssl-dev libgtk-3-dev libsystemd-dev libwebp-dev | |
#- name: update gcc11 | |
#run: sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test && sudo apt update && sudo apt install -y gcc-11 g++-11 | |
- name: Configure CMake | |
# Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make. | |
# See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type | |
run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DGIT_SUBMODULE=OFF -DWARNINGS_AS_ERRORS=FALSE #-D CMAKE_C_COMPILER=gcc-11 -D CMAKE_CXX_COMPILER=g++-11 | |
- name: Build | |
# Build your program with the given configuration | |
run: cmake --build ${{github.workspace}}/build | |
- name: Install | |
working-directory: ${{github.workspace}}/build | |
run: cmake --install . --config ${{env.BUILD_TYPE}} | |
- name: Prepare package step | |
working-directory: ${{github.workspace}}/build | |
run: | | |
mkdir ${{ needs.VersionJob.outputs.install_path }}/DEBIAN && cp ${{github.workspace}}/Assets/Tools/Ubuntu/control ${{ needs.VersionJob.outputs.install_path }}/DEBIAN/ | |
mkdir -p ${{ needs.VersionJob.outputs.install_path }}/usr/share/applications && cp ${{github.workspace}}/Assets/Tools/Ubuntu/multisense.desktop ${{ needs.VersionJob.outputs.install_path }}/usr/share/applications/ | |
cp ${{github.workspace}}/Assets/Tools/Ubuntu/start.sh ${{ needs.VersionJob.outputs.install_path }}/opt/multisense/ | |
rm -rf ${{ needs.VersionJob.outputs.install_path }}/opt/multisense/include | |
rm -rf ${{ needs.VersionJob.outputs.install_path }}/opt/multisense/lib | |
rm -rf ${{ needs.VersionJob.outputs.install_path }}/opt/multisense/share | |
- name: Package | |
working-directory: ${{github.workspace}}/build | |
run: dpkg-deb --build --root-owner-group "${{ needs.VersionJob.outputs.install_path }}" "${{ needs.VersionJob.outputs.install_path }}_ubuntu22_04.deb" | |
- name: Upload Release Asset | |
id: upload-release-asset | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ needs.ReleaseJob.outputs.upload_url }} # This pulls from the CREATE RELEASE step above, referencing it's ID to get its outputs object, which include a `upload_url`. See this blog post for more info: https://jasonet.co/posts/new-features-of-github-actions/#passing-data-to-future-steps | |
asset_path: ./build/${{ needs.VersionJob.outputs.install_path }}_ubuntu22_04.deb | |
asset_name: ${{ needs.VersionJob.outputs.install_path }}_ubuntu22_04.deb | |
asset_content_type: application/zip | |