Skip to content

Use nuget caching

Use nuget caching #68

---
# 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
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}}
env:
NUGET_PACKAGES: ${{ github.workspace }}/.nuget/packages
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
- name: Cache nugets
uses: actions/cache@v3
with:
path: ${{ github.workspace }}/.nuget/packages
key: ${{ runner.os }}-czishrink-nuget-${{ hashFiles('czishrink/**/packages.lock.json') }}
restore-keys: |
${{ runner.os }}-czishrink-nuget-
- name: Restore dependencies
run: dotnet restore # --locked-mode ## does not work
- 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