Skip to content

Conan Build

Conan Build #3

name: Conan Build
on:
workflow_call:
inputs:
platform:
required: false
default: 'ubuntu-22.04'
type: string
branch:
required: true
type: string
build-type:
required: true
type: string
malloc-impl:
required: true
type: string
prerelease:
required: true
type: string
tooling:
required: false
type: string
default: 'None'
testing:
required: false
type: string
default: 'False'
workflow_dispatch:
inputs:
platform:
required: true
type: choice
options:
- ubuntu-22.04
- ubuntu-20.04
- macos-13
- macos-12
default: 'ubuntu-22.04'
branch:
required: true
type: string
build-type:
required: true
type: choice
options:
- Debug
- Release
- RelWithDebInfo
malloc-impl:
description: 'Allocation Library'
required: true
type: choice
options:
- libc
- tcmalloc
- jemalloc
prerelease:
description: 'Fault Instrumentation'
required: false
type: choice
options:
- 'True'
- 'False'
default: 'False'
tooling:
required: false
type: choice
- 'Sanitize'
- 'Coverage'
- 'None'
default: 'None'
testing:
description: 'Build and Run'
required: true
type: choice
options:
- 'True'
- 'False'
default: 'True'
jobs:
BuildNuraftMesgDeps:
runs-on: ${{ inputs.platform }}
steps:
- name: Retrieve Code
uses: actions/checkout@v3
with:
ref: ${{ inputs.branch }}
if: ${{ inputs.testing == 'True' }}
- name: Retrieve Recipe
uses: actions/checkout@v3
with:
repository: eBay/nuraft_mesg
ref: ${{ inputs.branch }}
if: ${{ inputs.testing == 'False' }}
- name: Load NuRaftMsg Cache
id: restore-cache
uses: eBay/sisl/.github/actions/load_conan@stable/v8.x
with:
testing: ${{ inputs.testing }}
key_prefix: NuMesgDeps-${{ inputs.platform }}-${{ inputs.build-type }}-${{ inputs.malloc-impl }}-${{ inputs.prerelease }}
- name: Retrieve Dependencies
uses: actions/checkout@v3
with:
repository: eBay/sisl
path: import/sisl
ref: master
if: ${{ inputs.testing == 'True' || steps.restore-cache.outputs.cache-hit != 'true' }}
- name: Load Sisl Cache
uses: eBay/sisl/.github/actions/load_conan@stable/v8.x
with:
testing: 'False'
path: import/sisl
key_prefix: SislDeps-${{ inputs.platform }}-${{ inputs.build-type }}-${{ inputs.malloc-impl }}-${{ inputs.prerelease }}
fail_on_cache_miss: true
if: ${{ inputs.testing == 'True' || steps.restore-cache.outputs.cache-hit != 'true' }}
- name: Setup Conan
uses: eBay/sisl/.github/actions/setup_conan@stable/v8.x
with:
platform: ${{ inputs.platform }}
if: ${{ inputs.testing == 'True' || steps.restore-cache.outputs.cache-hit != 'true' }}
- name: Export Recipes
run: |
conan export import/sisl oss/master
conan export 3rd_party/nuraft
cached_pkgs=$(ls -1d ~/.conan/data/*/*/*/*/package | sed 's,.*data/,,' | cut -d'/' -f1,2 | paste -sd',' - -)
echo "::info:: Pre-cached: ${cached_pkgs}"
if: ${{ inputs.testing == 'True' || steps.restore-cache.outputs.cache-hit != 'true' }}
- name: Build Cache
run: |
conan install \
-o sisl:prerelease=${{ inputs.prerelease }} \
-o sisl:malloc_impl=${{ inputs.malloc-impl }} \
-s build_type=${{ inputs.build-type }} \
-c tools.build:skip_test=True \
--build missing \
.
if: ${{ steps.restore-cache.outputs.cache-hit != 'true' }}
- name: Save Conan Cache
uses: eBay/sisl/.github/actions/store_conan@stable/v8.x
with:
key_prefix: NuMesgDeps-${{ inputs.platform }}-${{ inputs.build-type }}-${{ inputs.malloc-impl }}-${{ inputs.prerelease }}
if: ${{ github.event_name != 'pull_request' && steps.restore-cache.outputs.cache-hit != 'true' }}
- name: Reload Sisl Cache
uses: eBay/sisl/.github/actions/load_conan@stable/v8.x
with:
testing: 'False'
path: import/sisl
key_prefix: SislDeps-${{ inputs.platform }}-${{ inputs.build-type }}-${{ inputs.malloc-impl }}-${{ inputs.prerelease }}
fail_on_cache_miss: true
if: ${{ inputs.testing == 'True' && github.event_name != 'pull_request' && steps.restore-cache.outputs.cache-hit != 'true' }}
- name: Create and Test Package
run: |
sanitize=$([[ "${{ inputs.tooling }}" == "Sanitize" ]] && echo "True" || echo "False")
conan create \
-o sisl:prerelease=${{ inputs.prerelease }} \
-o sisl:malloc_impl=${{ inputs.malloc-impl }} \
-o nuraft_mesg:sanitize=${sanitize} \
-s build_type=${{ inputs.build-type }} \
--build missing \
.
if: ${{ inputs.testing == 'True' && inputs.tooling != 'Coverage' }}
- name: Code Coverage Run
run: |
conan install \
-o sisl:prerelease=${{ inputs.prerelease }} \
-o sisl:malloc_impl=${{ inputs.malloc-impl }} \
-o coverage=True \
-s build_type=${{ inputs.build-type }} \
--build missing \
.
conan build .
if: ${{ inputs.testing == 'True' && inputs.tooling == 'Coverage' }}
- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@v3
with:
token: ${{ secrets.CODECOV_TOKEN }}
gcov: true
if: ${{ inputs.testing == 'True' && inputs.tooling == 'Coverage' }}