116 lines
4.1 KiB
YAML
116 lines
4.1 KiB
YAML
# Called by ci.yml to build & test project files
|
|
# See: https://docs.github.com/en/actions/using-workflows/reusing-workflows#creating-a-reusable-workflow
|
|
name: Build Component
|
|
|
|
on:
|
|
workflow_call:
|
|
inputs:
|
|
project-name:
|
|
required: true
|
|
type: string
|
|
project-build-commands:
|
|
default: ''
|
|
required: false
|
|
type: string
|
|
code-cov-name:
|
|
required: true
|
|
type: string
|
|
code-cov-prefix:
|
|
default: 'unittests'
|
|
required: false
|
|
type: string
|
|
os-list:
|
|
default: '[ "windows-latest", "ubuntu-22.04", "ubuntu-22.04-arm" ]'
|
|
required: false
|
|
type: string
|
|
tfm-list:
|
|
default: '[ "net462", "net8.0", "net9.0" ]'
|
|
required: false
|
|
type: string
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
jobs:
|
|
build-test:
|
|
|
|
strategy:
|
|
fail-fast: false # ensures the entire test matrix is run, even if one permutation fails
|
|
matrix:
|
|
os: ${{ fromJSON(inputs.os-list) }}
|
|
version: ${{ fromJSON(inputs.tfm-list) }}
|
|
exclude:
|
|
- os: ubuntu-22.04
|
|
version: net462
|
|
- os: ubuntu-22.04-arm
|
|
version: net462
|
|
- os: ubuntu-22.04-arm
|
|
version: net8.0
|
|
|
|
runs-on: ${{ matrix.os }}
|
|
steps:
|
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
|
with:
|
|
# Note: By default GitHub only fetches 1 commit. MinVer needs to find
|
|
# the version tag which is typically NOT on the first commit so we
|
|
# retrieve them all.
|
|
fetch-depth: 0
|
|
|
|
- name: Setup previous .NET runtimes
|
|
uses: actions/setup-dotnet@67a3573c9a986a3f9c594539f4ab511d57bb3ce9 # v4.3.1
|
|
with:
|
|
dotnet-version: |
|
|
8.0.x
|
|
|
|
- name: Setup .NET
|
|
uses: actions/setup-dotnet@67a3573c9a986a3f9c594539f4ab511d57bb3ce9 # v4.3.1
|
|
|
|
- name: dotnet restore ${{ inputs.project-name }}
|
|
run: dotnet restore ${{ inputs.project-name }} ${{ inputs.project-build-commands }}
|
|
|
|
- name: dotnet build ${{ inputs.project-name }}
|
|
run: dotnet build ${{ inputs.project-name }} --configuration Release --no-restore ${{ inputs.project-build-commands }}
|
|
|
|
- name: dotnet test ${{ inputs.project-name }}
|
|
run: >
|
|
dotnet test ${{ inputs.project-name }}
|
|
--collect:"Code Coverage"
|
|
--results-directory:TestResults
|
|
--framework ${{ matrix.version }}
|
|
--configuration Release
|
|
--no-restore
|
|
--no-build
|
|
--logger:"console;verbosity=detailed"
|
|
--logger:"GitHubActions;report-warnings=false"
|
|
--logger:"junit;LogFilePath=TestResults/junit.xml"
|
|
-- RunConfiguration.DisableAppDomain=true
|
|
|
|
- name: Install coverage tool
|
|
run: dotnet tool install -g dotnet-coverage
|
|
|
|
- name: Merging test results
|
|
run: dotnet-coverage merge -f cobertura -o ./TestResults/Cobertura.xml ./TestResults/**/*.coverage
|
|
|
|
- name: Upload code coverage ${{ inputs.code-cov-prefix }}-${{ inputs.code-cov-name }}
|
|
uses: codecov/codecov-action@fdcc8476540edceab3de004e990f80d881c6cc00 # v5.5.0
|
|
continue-on-error: true # Note: Don't fail for upload failures
|
|
env:
|
|
OS: ${{ matrix.os }}
|
|
TFM: ${{ matrix.version }}
|
|
with:
|
|
files: TestResults/Cobertura.xml
|
|
env_vars: OS,TFM
|
|
flags: ${{ inputs.code-cov-prefix }}-${{ inputs.code-cov-name }}
|
|
name: Code Coverage for ${{ inputs.code-cov-prefix }}-${{ inputs.code-cov-name }} on [${{ matrix.os }}.${{ matrix.version }}]
|
|
codecov_yml_path: .github/codecov.yml
|
|
token: ${{ secrets.CODECOV_TOKEN }}
|
|
|
|
- name: Upload test results ${{ inputs.code-cov-prefix }}-${{ inputs.code-cov-name }}
|
|
if: ${{ !cancelled() && hashFiles('./**/TestResults/junit.xml') != '' }}
|
|
uses: codecov/test-results-action@47f89e9acb64b76debcd5ea40642d25a4adced9f # v1.1.1
|
|
with:
|
|
env_vars: OS,TFM
|
|
flags: ${{ inputs.code-cov-prefix }}-${{ inputs.code-cov-name }}
|
|
name: Test results for ${{ inputs.code-cov-prefix }}-${{ inputs.code-cov-name }} on [${{ matrix.os }}.${{ matrix.version }}]
|
|
token: ${{ secrets.CODECOV_TOKEN }}
|