Skip to content

.NET Build (CziShrink) #97

.NET Build (CziShrink)

.NET Build (CziShrink) #97

---
# This workflow will build a .NET project
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-net
permissions:
pull-requests: write
contents: read
packages: read
name: .NET Build (CziShrink)
on:
push:
branches: ["main"]
pull_request:
branches: ["main"]
workflow_dispatch: {}
jobs:
build:
defaults:
run:
working-directory: czishrink
name: ${{matrix.config.os}}-${{matrix.build}}
runs-on: ${{matrix.config.os}}
strategy:
fail-fast: false
matrix:
build: [Release, Debug]
config:
- {
os: windows-latest,
osfamily: win,
}
- {
os: ubuntu-latest,
osfamily: linux,
}
exclude:
# From https://github.com/actions/runner/issues/1512
- build: Debug
config: {os: windows-latest, osfamily: win}
steps:
- uses: actions/checkout@v4
with:
lfs: true
- name: Setup .NET
uses: actions/setup-dotnet@v3
with:
dotnet-version: 7.0.x
- name: Get Version from Directory.Build.props
id: getversion
run: |
$xml = [xml](Get-Content -Path "Directory.Build.props")
$version = $xml.SelectSingleNode('//VersionPrefix').'#text'
"version=$version" | Out-File -FilePath $env:GITHUB_OUTPUT -Append
shell: pwsh
- name: Add build ID to version in Directory.Build.props
run: |
Write-Output "Add build ID ${{ github.run_id }} to VersionPrefix in Directory.Build.props"
$file = Get-Item "Directory.Build.props"
$xml = [xml](Get-Content -Path $file.FullName)
$versionElement = $xml.SelectSingleNode('//VersionPrefix')
$versionElement.'#text' += '+${{ github.run_id }}'
$xml.Save($file.FullName)
shell: pwsh
# To support package source mapping with mixed package feeds (see NuGet.config for details)
# See https://github.com/dotnet/sdk/issues/31461
# See
- name: Update GitHub package registry credentials in NuGet.config
run: dotnet nuget update source github_zeiss -p "$GH_TOKEN" -u ZEISS -s https://nuget.pkg.github.com/ZEISS/index.json --store-password-in-clear-text
# Run on bash explicitely to have cross-platform environment variable referencing
# See https://docs.github.com/en/actions/security-guides/using-secrets-in-github-actions#using-secrets-in-a-workflow
shell: bash
env:
GH_TOKEN: ${{secrets.GITHUB_TOKEN}}
- name: Restore dependencies
run: dotnet restore
- name: Build
run: dotnet build --no-restore -c ${{ matrix.build }}
- name: Test
run: >
dotnet test
-c ${{ matrix.build }}
--no-build
--verbosity normal
--logger trx
--results-directory "TestResults"
-p:CollectCoverage=true
-p:CoverletOutputFormat=cobertura
-p:CoverletOutput=${{ github.workspace }}/TestResults/coverage.cobertura.xml
-p:ExcludeByAttribute=GeneratedCodeAttribute%2cObsoleteAttribute
-p:ExcludeByFile=**/*.axaml%2c**/*.g.cs
-p:Exclude='[netczicompress]netczicompress.Views.*'
- name: Upload coverage reports for czishrink to Codecov
if: ${{ (matrix.config.os == 'ubuntu-latest') && (matrix.build == 'Debug') }}
uses: codecov/codecov-action@v3
with:
fail_ci_if_error: true
directory: ${{ github.workspace }}/TestResults
files: coverage.cobertura.xml
verbose: true
- name: Upload dotnet test results
uses: actions/upload-artifact@v3
with:
name: dotnet-results-${{ matrix.config.os }}
path: TestResults
# Use always() to also publish test results when there are test failures
if: ${{ always() }}
- name: Publish
if: ${{ (github.event_name == 'push') && (matrix.build == 'Release') }}
run: >
dotnet publish netczicompress.Desktop/netczicompress.Desktop.csproj
-c ${{ matrix.build }}
-a x64
--self-contained
-p:PublishSingleFile=true
-p:PublishReadyToRun=true
-p:PublishReadyToRunShowWarnings=true
-o ${{ github.workspace }}/publish
- name: Upload published binaries
uses: actions/upload-artifact@v3
if: ${{ (github.event_name == 'push') && (matrix.build == 'Release') }}
with:
name: CziShrink_${{ steps.getversion.outputs.version }}_${{ matrix.config.osfamily}}-x64
path: publish