Skip to content

.github/workflows/build_dependencies.yml #5

.github/workflows/build_dependencies.yml

.github/workflows/build_dependencies.yml #5

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:
BuildHomestoreDeps:
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/Homestore
ref: ${{ inputs.branch }}
if: ${{ inputs.testing == 'False' }}
- name: Load Homestore Cache
id: restore-cache
uses: eBay/sisl/.github/actions/load_conan@stable/v8.x
with:
testing: ${{ inputs.testing }}
key_prefix: HomestoreDeps-${{ inputs.platform }}-${{ inputs.build-type }}-${{ inputs.malloc-impl }}-${{ inputs.prerelease }}
- name: Load Sisl Cache
uses: eBay/sisl/.github/actions/load_conan@stable/v8.x
with:
load_any: 'True'
key_prefix: SislDeps-${{ inputs.platform }}-${{ inputs.build-type }}-${{ inputs.malloc-impl }}-${{ inputs.prerelease }}
if: ${{ inputs.testing == 'True' || steps.restore-cache.outputs.cache-hit != 'true' }}
- name: Retrieve Dependencies
uses: actions/checkout@v3
with:
repository: eBay/iomanager
path: import/iomgr
ref: master
if: ${{ inputs.testing == 'True' || steps.restore-cache.outputs.cache-hit != 'true' }}
- name: Retrieve Dependencies
uses: actions/checkout@v3
with:
repository: eBay/nuraft_mesg
path: import/nuraft_mesg
ref: main
if: ${{ inputs.testing == 'True' || steps.restore-cache.outputs.cache-hit != 'true' }}
- name: Load IOMgr Cache
uses: eBay/sisl/.github/actions/load_conan@stable/v8.x
with:
testing: 'False'
path: import/iomgr
key_prefix: IOMgrDeps-${{ 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: Load NuraftMesg Cache
uses: eBay/sisl/.github/actions/load_conan@stable/v8.x
with:
testing: 'False'
path: import/nuraft_mesg
key_prefix: NuMesgDeps-${{ 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: |
sudo apt-get install -y python3-pyelftools libaio-dev
python -m pip install pyelftools
conan export import/iomgr oss/master
conan export import/nuraft_mesg oss/main
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: |
pre=$([[ "${{ inputs.build-type }}" != "Debug" ]] && echo "-o sisl:prerelease=${{ inputs.prerelease }}" || echo "")
conan install \
-c tools.build:skip_test=True \
${pre} \
-o sisl:malloc_impl=${{ inputs.malloc-impl }} \
-o iomgr:testing=off \
-o testing=off \
-s build_type=${{ inputs.build-type }} \
--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: HomestoreDeps-${{ 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:
load_any: 'True'
key_prefix: SislDeps-${{ inputs.platform }}-${{ inputs.build-type }}-${{ inputs.malloc-impl }}-${{ inputs.prerelease }}
if: ${{ inputs.testing == 'True' && github.event_name != 'pull_request' && steps.restore-cache.outputs.cache-hit != 'true' }}
- name: Reload IOMgr Cache
uses: eBay/sisl/.github/actions/load_conan@stable/v8.x
with:
testing: 'False'
path: import/iomgr
key_prefix: IOMgrDeps-${{ 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: Reload NuraftMesg Cache
uses: eBay/sisl/.github/actions/load_conan@stable/v8.x
with:
testing: 'False'
path: import/nuraft_mesg
key_prefix: NuMesgDeps-${{ 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")
pre=$([[ "${{ inputs.build-type }}" != "Debug" ]] && echo "-o sisl:prerelease=${{ inputs.prerelease }}" || echo "")
conan create \
${pre} \
-o sisl:malloc_impl=${{ inputs.malloc-impl }} \
-o iomgr:testing=off \
-o homestore:sanitize=${sanitize} \
-s build_type=${{ inputs.build-type }} \
--build missing \
.
if: ${{ inputs.testing == 'True' && inputs.tooling != 'Coverage' }}
- name: Code Coverage Run
run: |
pre=$([[ "${{ inputs.build-type }}" != "Debug" ]] && echo "-o sisl:prerelease=${{ inputs.prerelease }}" || echo "")
conan install \
${pre} \
-o sisl:malloc_impl=${{ inputs.malloc-impl }} \
-o iomgr:testing=off \
-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' }}