Skip to content

Require a unique ID in the simple_polaris_client examples. #220

Require a unique ID in the simple_polaris_client examples.

Require a unique ID in the simple_polaris_client examples. #220

Workflow file for this run

# Build Polaris examples and generate releases.
name: Polaris Build
on:
push:
# Build on a push to any branch.
branches:
- '*'
# Build on a push of any tag named v* (v1.0, etc.) and generate a release.
tags:
- 'v*'
jobs:
# Build the C++ example applications.
build_cpp:
name: Build C++ Applications
runs-on: ${{ matrix.os }}
strategy:
matrix:
arch: [x64]
os: [ubuntu-latest]
tool: [cmake, bazel]
compiler: [g++]
include:
- arch: armv7hf
os: ubuntu-latest
tool: bazel
compiler: g++
- arch: aarch64
os: ubuntu-latest
tool: bazel
compiler: g++
# Windows not currently supported by C++ library.
#- arch: x64
# os: windows-latest
# tool: cmake
# compiler: msvc
defaults:
run:
shell: bash
steps:
- uses: actions/checkout@v2
# Environment setup.
- name: Setup Environment (Windows)
if: matrix.os == 'windows-latest'
run: |
echo "EXT=.exe" >> $GITHUB_ENV
- name: Setup Environment (Linux)
if: matrix.os == 'ubuntu-latest'
run: |
echo "CXX=/usr/bin/${{ matrix.compiler }}" >> $GITHUB_ENV
echo "EXT=" >> $GITHUB_ENV
- name: Install msbuild (Windows)
if: matrix.os == 'windows-latest'
uses: microsoft/[email protected]
# CMake build support.
- name: Install CMake 3.16.x
if: matrix.tool == 'cmake'
uses: jwlawson/[email protected]
with:
cmake-version: '3.16.x'
# Note: OpenSSL is installed in the system image and works out of the box.
# Boost used to be maintained by Github, but was removed from the images in
# March 2021 (https://github.com/actions/virtual-environments/issues/2667).
# To get around this, we install it with the apt package for Linux. For
# Windows, we would need to download and install the pre-built binaries from
# https://sourceforge.net/projects/boost/files/boost-binaries.
- name: Install Boost (Linux)
if: matrix.tool == 'cmake' && matrix.os == 'ubuntu-latest'
run: |
sudo apt install -y libboost-all-dev
- name: Install GFlags
if: matrix.tool == 'cmake'
run: |
curl -L https://github.com/gflags/gflags/archive/refs/tags/v2.2.2.tar.gz --output gflags.tar.gz
tar xvzf gflags.tar.gz
cd gflags-2.2.2
cmake -B build -DBUILD_SHARED_LIBS=ON .
cd build
make -j
sudo make install
- name: Install GLog
if: matrix.tool == 'cmake'
run: |
curl -L https://github.com/google/glog/archive/0a2e5931bd5ff22fd3bf8999eb8ce776f159cda6.tar.gz --output glog.tar.gz
tar xvzf glog.tar.gz
cd glog-0a2e5931bd5ff22fd3bf8999eb8ce776f159cda6
cmake -B build -DBUILD_SHARED_LIBS=ON .
cd build
make -j
sudo make install
- name: Setup Build (CMake)
if: matrix.tool == 'cmake'
run: |
mkdir cmake_build
cd cmake_build
cmake -DCMAKE_INSTALL_PREFIX=install ..
- name: Build Library And Examples (CMake, Linux)
if: matrix.tool == 'cmake' && matrix.os == 'ubuntu-latest'
run: |
cd cmake_build
make
make install
- name: Build Library And Examples (CMake, Windows)
if: matrix.tool == 'cmake' && matrix.os == 'windows-latest'
run: |
cd cmake_build
MSBuild.exe p1_polaris_client.sln
- name: Build External Project Example (CMake, Linux)
if: matrix.tool == 'cmake' && matrix.os == 'ubuntu-latest'
run: |
mkdir examples/external_cmake_project/build
cd examples/external_cmake_project/build
cmake ..
make
# Bazel build support.
- name: Use Bazel 4.2.2
if: matrix.tool == 'bazel'
uses: abhinavsingh/setup-bazel@v3
with:
version: 4.2.2
- name: Build Library And Examples (Bazel, Native x64)
if: matrix.tool == 'bazel' && matrix.arch == 'x64'
run: |
bazel build -c opt //:polaris_client
bazel build -c opt //examples:*
- name: Build Library And Examples (Bazel, Cross-Compile)
if: matrix.tool == 'bazel' && matrix.arch != 'x64'
run: |
bazel build -c opt --config=${{ matrix.arch }} //:polaris_client
bazel build -c opt --config=${{ matrix.arch }} //examples:*
# Run unit tests.
- name: Run Unit Tests
if: matrix.arch == 'x64'
env:
POLARIS_API_KEY: ${{ secrets.POLARIS_API_KEY }}
run: |
./test/run_unit_tests.sh --tool=${{ matrix.tool }} --unique-id-prefix=${{ matrix.tool }}_cpp
- name: Run Unit Tests With Installed Libraries (CMake, Linux)
if: matrix.arch == 'x64' && matrix.tool == 'cmake' && matrix.os == 'ubuntu-latest'
env:
POLARIS_API_KEY: ${{ secrets.POLARIS_API_KEY }}
run: |
mv cmake_build/libpolaris_cpp_client.so cmake_build/libpolaris_cpp_client.so.bak
mv cmake_build/c/libpolaris_client.so cmake_build/c/libpolaris_client.so.bak
./test/run_unit_tests.sh --tool=${{ matrix.tool }} --unique-id-prefix=${{ matrix.tool }}_cpp --install-prefix=cmake_build/install
mv cmake_build/libpolaris_cpp_client.so.bak cmake_build/libpolaris_cpp_client.so
mv cmake_build/c/libpolaris_client.so.bak cmake_build/c/libpolaris_client.so
# Package artifacts (Bazel only -- no need to do this for multiple build
# tools).
- name: Create artifact
if: matrix.tool == 'bazel'
run: |
bazel query 'kind("cc_binary", //examples:*)' 2>/dev/null |
sed -e 's|//examples:|bazel-bin/examples/|' |
xargs tar czf polaris_examples.tar.gz --transform 's|^bazel-bin|polaris|'
- name: Upload artifact
if: matrix.tool == 'bazel'
uses: actions/upload-artifact@v1
with:
path: polaris_examples.tar.gz
name: polaris_examples.cpp.${{ matrix.arch }}
# Build the C example applications.
build_c:
name: Build C Applications
runs-on: ${{ matrix.os }}
strategy:
matrix:
arch: [x64]
os: [ubuntu-latest]
tool: [make, cmake, bazel]
compiler: [g++]
#include:
# Windows not currently supported by C library.
# - arch: x64
# os: windows-latest
# tool: cmake
# compiler: msvc
defaults:
run:
shell: bash
working-directory: c
steps:
- uses: actions/checkout@v2
# Environment setup.
- name: Setup Environment (Windows)
if: matrix.os == 'windows-latest'
run: |
echo "EXT=.exe" >> $GITHUB_ENV
- name: Setup Environment (Linux)
if: matrix.os == 'ubuntu-latest'
run: |
echo "CXX=/usr/bin/${{ matrix.compiler }}" >> $GITHUB_ENV
echo "EXT=" >> $GITHUB_ENV
- name: Install msbuild (Windows)
if: matrix.os == 'windows-latest'
uses: microsoft/[email protected]
# GNU Make build support.
- name: Build Library And Examples (GNU Make)
if: matrix.tool == 'make'
run: |
make -j
# CMake build support.
- name: Install CMake 3.18.x
if: matrix.tool == 'cmake'
uses: jwlawson/[email protected]
with:
cmake-version: '3.18.x'
- name: Setup Build (CMake)
if: matrix.tool == 'cmake'
run: |
mkdir cmake_build
cd cmake_build
cmake -DCMAKE_INSTALL_PREFIX=install ..
- name: Build Library And Examples (CMake, Linux)
if: matrix.tool == 'cmake' && matrix.os == 'ubuntu-latest'
run: |
cd cmake_build
make -j
make install
- name: Build Library And Examples (CMake, Windows)
if: matrix.tool == 'cmake' && matrix.os == 'windows-latest'
run: |
cd cmake_build
MSBuild.exe p1_polaris_c_client.sln
- name: Build External Project Example (CMake, Linux)
if: matrix.tool == 'cmake' && matrix.os == 'ubuntu-latest'
run: |
mkdir examples/external_cmake_project/build
cd examples/external_cmake_project/build
cmake ..
make
# Bazel build support.
- name: Use Bazel 4.2.2
if: matrix.tool == 'bazel'
uses: abhinavsingh/setup-bazel@v3
with:
version: 4.2.2
- name: Build Library And Examples (Bazel, Native x64)
if: matrix.tool == 'bazel' && matrix.arch == 'x64'
run: |
bazel build -c opt //:polaris_client
bazel build -c opt //examples:*
- name: Build Library And Examples (Bazel, Cross-Compile)
if: matrix.tool == 'bazel' && matrix.arch != 'x64'
run: |
bazel build -c opt --config=${{ matrix.arch }} //:polaris_client
bazel build -c opt --config=${{ matrix.arch }} //examples:*
# Run unit tests.
- name: Run Unit Tests
if: matrix.arch == 'x64'
env:
POLARIS_API_KEY: ${{ secrets.POLARIS_API_KEY }}
run: |
./test/run_unit_tests.sh --tool=${{ matrix.tool }} --unique-id-prefix=${{ matrix.tool }}_c_
- name: Run Unit Tests With Installed Libraries (CMake, Linux)
if: matrix.arch == 'x64' && matrix.tool == 'cmake' && matrix.os == 'ubuntu-latest'
env:
POLARIS_API_KEY: ${{ secrets.POLARIS_API_KEY }}
run: |
mv cmake_build/libpolaris_client.so cmake_build/libpolaris_client.so.bak
./test/run_unit_tests.sh --tool=${{ matrix.tool }} --unique-id-prefix=${{ matrix.tool }}_c_ --install-prefix=cmake_build/install
mv cmake_build/libpolaris_client.so.bak cmake_build/libpolaris_client.so
# Package artifacts (Bazel only -- no need to do this for multiple build
# tools).
- name: Create artifact
if: matrix.tool == 'bazel'
run: |
bazel query 'kind("cc_binary", //examples:*)' 2>/dev/null |
sed -e 's|//examples:|bazel-bin/examples/|' |
xargs tar czf polaris_examples.tar.gz --transform 's|^bazel-bin|polaris/c|'
- name: Upload artifact
if: matrix.tool == 'bazel'
uses: actions/upload-artifact@v1
with:
path: c/polaris_examples.tar.gz
name: polaris_examples.c.${{ matrix.arch }}
# Create a release only on a tag (not on a branch push).
release:
name: Create Release
if: startsWith(github.ref, 'refs/tags/')
needs: [build_cpp, build_c]
runs-on: ubuntu-latest
outputs:
upload_url: ${{ steps.create_release.outputs.upload_url }}
steps:
- name: Create release
id: create_release
uses: actions/create-release@latest
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ github.ref }}
release_name: Release ${{ github.ref }}
draft: false
prerelease: false
upload:
name: Upload Release Assets
needs: [release]
runs-on: ubuntu-latest
strategy:
matrix:
lang: [cpp, c]
arch: [x64, armv7hf, aarch64]
exclude:
- {lang: c, arch: armv7hf}
- {lang: c, arch: aarch64}
steps:
- name: Download artifact
uses: actions/download-artifact@v1
with:
name: polaris_examples.${{ matrix.lang }}.${{ matrix.arch }}
- name: Set asset filename
id: release_info
env:
TAG_REF_NAME: ${{ github.ref }}
run: |
# polaris_examples-v1.0.0.cpp.aarch64.tar.gz
echo ::set-output name=file_name::polaris_examples-${TAG_REF_NAME##*/v}.${{ matrix.lang }}.${{ matrix.arch }}.tar.gz
- name: Upload release asset
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ needs.release.outputs.upload_url }}
asset_path: polaris_examples.${{ matrix.lang }}.${{ matrix.arch }}/polaris_examples.tar.gz
asset_name: ${{ steps.release_info.outputs.file_name }}
asset_content_type: application/tar+gzip