Replace Moq with NSubstitute (#256) #434
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Build | |
on: | |
push: | |
branches: [ main ] | |
pull_request: | |
release: | |
types: [ published ] | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
env: | |
# Disable the .NET logo in the console output. | |
DOTNET_NOLOGO: true | |
# Disable the .NET first time experience to skip caching NuGet packages and speed up the build. | |
DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true | |
# Disable sending .NET CLI telemetry to Microsoft. | |
DOTNET_CLI_TELEMETRY_OPTOUT: true | |
BUILD_ARTIFACT_PATH: ${{github.workspace}}/build-artifacts | |
jobs: | |
build: | |
name: Build ${{matrix.os}} | |
runs-on: ${{matrix.os}} | |
strategy: | |
matrix: | |
os: [ubuntu-latest, windows-latest, macOS-latest] | |
mongodb: ['6.0'] | |
include: | |
- os: ubuntu-latest | |
ubuntu: 'jammy' | |
steps: | |
# Configure Redis | |
- name: Configure Redis (Ubuntu) | |
if: matrix.os == 'ubuntu-latest' | |
run: sudo apt-get install redis-server | |
- name: Configure Redis (Windows) | |
if: matrix.os == 'windows-latest' | |
run: choco install Memurai-Developer | |
- name: Configure Redis (MacOS) | |
if: matrix.os == 'macOS-latest' | |
run: brew install redis && brew services start redis | |
# Configure MongoDB | |
- name: Configure MongoDB (Ubuntu) | |
if: matrix.os == 'ubuntu-latest' | |
run: | | |
wget -qO - https://www.mongodb.org/static/pgp/server-${{matrix.mongodb}}.asc | gpg --dearmor | sudo tee /usr/share/keyrings/mongodb.gpg > /dev/null | |
echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb.gpg ] https://repo.mongodb.org/apt/ubuntu ${{matrix.ubuntu}}/mongodb-org/${{matrix.mongodb}} multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-${{matrix.mongodb}}.list | |
sudo apt update | |
sudo apt install mongodb-org | |
sudo systemctl start mongod | |
- name: Configure MongoDB (Windows) | |
if: matrix.os == 'windows-latest' | |
shell: powershell | |
run: | | |
choco uninstall mongodb mongodb.install | |
$latestPackageVersion = Get-LatestChocoPackageVersion -TargetVersion ${{matrix.mongodb}} -PackageName "mongodb.install" | |
choco install mongodb.portable --version=$latestPackageVersion | |
- name: Configure MongoDB (MacOS) | |
if: matrix.os == 'macOS-latest' | |
run: | | |
brew tap mongodb/brew | |
brew update | |
brew uninstall [email protected] | |
brew install mongodb-community@${{matrix.mongodb}} | |
brew services start mongodb-community@${{matrix.mongodb}} | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Setup dotnet SDK | |
uses: actions/setup-dotnet@v3 | |
with: | |
dotnet-version: | | |
6.0.x | |
7.0.306 | |
- name: Install dependencies | |
run: dotnet restore | |
- name: Build | |
run: dotnet build --no-restore -c Release | |
- name: Test with Coverage | |
run: dotnet test --no-restore --logger trx --results-directory ${{env.BUILD_ARTIFACT_PATH}}/coverage --collect "XPlat Code Coverage" --settings CodeCoverage.runsettings /p:SkipBuildVersioning=true | |
- name: Pack | |
run: dotnet pack --no-build -c Release /p:PackageOutputPath=${{env.BUILD_ARTIFACT_PATH}} | |
- name: Publish artifacts | |
uses: actions/upload-artifact@v3 | |
with: | |
name: ${{matrix.os}} | |
path: ${{env.BUILD_ARTIFACT_PATH}} | |
coverage: | |
name: Process code coverage | |
runs-on: ubuntu-latest | |
needs: build | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Download coverage reports | |
uses: actions/download-artifact@v3 | |
- name: Install ReportGenerator tool | |
run: dotnet tool install -g dotnet-reportgenerator-globaltool | |
- name: Prepare coverage reports | |
run: reportgenerator -reports:*/coverage/*/coverage.cobertura.xml -targetdir:./ -reporttypes:Cobertura | |
- name: Upload coverage report | |
uses: codecov/[email protected] | |
with: | |
file: Cobertura.xml | |
fail_ci_if_error: false | |
- name: Save combined coverage report as artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: coverage-report | |
path: Cobertura.xml | |
push-to-github-packages: | |
name: 'Push GitHub Packages' | |
needs: build | |
if: github.ref == 'refs/heads/main' || github.event_name == 'release' | |
environment: | |
name: 'GitHub Packages' | |
url: https://github.com/TurnerSoftware/CacheTower/packages | |
permissions: | |
packages: write | |
runs-on: ubuntu-latest | |
steps: | |
- name: 'Download build' | |
uses: actions/download-artifact@v3 | |
with: | |
name: 'ubuntu-latest' | |
- name: 'Add NuGet source' | |
run: dotnet nuget add source https://nuget.pkg.github.com/TurnerSoftware/index.json --name GitHub --username Turnerj --password ${{secrets.GITHUB_TOKEN}} --store-password-in-clear-text | |
- name: 'Upload NuGet package' | |
run: dotnet nuget push *.nupkg --api-key ${{secrets.GH_PACKAGE_REGISTRY_API_KEY}} --source GitHub --skip-duplicate | |
push-to-nuget: | |
name: 'Push NuGet Packages' | |
needs: build | |
if: github.event_name == 'release' | |
environment: | |
name: 'NuGet' | |
url: https://www.nuget.org/packages/CacheTower | |
runs-on: ubuntu-latest | |
steps: | |
- name: 'Download build' | |
uses: actions/download-artifact@v3 | |
with: | |
name: 'ubuntu-latest' | |
- name: 'Upload NuGet package' | |
run: dotnet nuget push *.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key ${{secrets.NUGET_API_KEY}} |