Skip to content

♻️ CI/CD

♻️ CI/CD #203

Workflow file for this run

name: CI/CD
on:
pull_request:
paths:
- 'src/**'
- 'GitVersion.yml'
- '.github/workflows/cicd.yml'
- '.github/actions/materialize-signing-key/**'
types: [opened, synchronize, reopened]
push:
branches:
- 'master'
paths:
- 'src/**'
- 'GitVersion.yml'
- '.github/workflows/cicd.yml'
- '.github/actions/materialize-signing-key/**'
workflow_dispatch:
inputs:
buildAutoMoq:
description: 'Build AutoMoq'
required: true
type: boolean
default: true
buildAutoNSubstitute:
description: 'Build AutoNSubstitute'
required: true
type: boolean
default: true
buildAutoFakeItEasy:
description: 'Build AutoFakeItEasy'
required: true
type: boolean
default: true
environment:
description: 'Environment'
type: environment
required: true
default: prod
env:
DOTNET_NOLOGO: true
DOTNET_CLI_TELEMETRY_OPTOUT: true
NUGET_PACKAGES: ${{ github.workspace }}/.nuget/packages
Configuration: Release
Namespace: Objectivity.AutoFixture.XUnit2
defaults:
run:
shell: pwsh
jobs:
init:
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.set-matrix.outputs.MATRIX }}
Version: ${{ steps.gitversion.outputs.MajorMinorPatch }}
steps:
- name: 🎰 prepare strategy matrix
id: set-matrix
run: |
$allModules = @{
AutoMoq=if ('${{inputs.buildAutoMoq}}') { $${{inputs.buildAutoMoq}} } else { $true };
AutoNSubstitute=if ('${{inputs.buildAutoNSubstitute}}') { $${{inputs.buildAutoNSubstitute}} } else { $true };
AutoFakeItEasy=if ('${{inputs.buildAutoFakeItEasy}}') { $${{inputs.buildAutoFakeItEasy}} } else { $true }
}
$matrix = @(Foreach ($module in ($allModules.GetEnumerator() | Where-Object { $_.Value })) {$module.Name})
if ($matrix.count -gt 0) { $matrix = @("Core") + $matrix }
"MATRIX=$($matrix | ConvertTo-JSON -Compress)" >> $env:GITHUB_OUTPUT
- name: 📥 checkout
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: 🗜️ install GitVersion
uses: gittools/actions/gitversion/setup@v0
with:
versionSpec: '5.x'
- name: 🎱 determine version
id: gitversion
uses: gittools/actions/gitversion/execute@v0
with:
useConfigFile: true
build-and-test:
needs: init
strategy:
matrix:
package-module: ${{ fromJSON(needs.init.outputs.matrix) }}
target-framework: [net472, net48, net7.0]
include:
- target-framework: net7.0
collect-code-coverage: true
skip-target-framework-on-build: true
if: ${{ needs.init.outputs.matrix != '' }}
uses: ./.github/workflows/build-and-test.yml
with:
version: ${{ needs.init.outputs.Version }}
package-module: ${{ matrix.package-module }}
namespace: Objectivity.AutoFixture.XUnit2
target-framework: ${{ matrix.target-framework }}
skip-target-framework-on-build: ${{ matrix.skip-target-framework-on-build == true }}
collect-code-coverage: ${{ matrix.collect-code-coverage == true }}
secrets:
signing-key-value: ${{ secrets.SIGNING_KEY }}
pack:
needs: [init, build-and-test]
strategy:
matrix:
package-module: ${{ fromJSON(needs.init.outputs.matrix) }}
if: ${{ needs.init.outputs.matrix != '' }}
uses: ./.github/workflows/pack.yml
with:
version: ${{ needs.init.outputs.Version }}
package-module: ${{ matrix.package-module }}
namespace: Objectivity.AutoFixture.XUnit2
secrets:
signing-key-value: ${{ secrets.SIGNING_KEY }}
publish:
runs-on: ubuntu-latest
continue-on-error: true
timeout-minutes: 15
needs: [pack]
environment: ${{ inputs.environment }}
if: ${{ inputs.environment != null }}
steps:
- name: 🔽 download packages
uses: actions/download-artifact@v3
with:
name: packages
- name: 📤 push
run: dotnet nuget push **/*.nupkg --api-key ${{ secrets.NUGET_API_KEY }} --source "nuget.org" --skip-duplicate
add-tags:
runs-on: ubuntu-latest
timeout-minutes: 15
needs: [publish, init]
# Allow tagging only on the master branch
if: ${{ github.ref_name == 'master' && needs.publish.result == 'success' }}
steps:
- name: 📥 checkout
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: 🏷️ tag version
run: |
git tag "${{ needs.init.outputs.Version }}"
git push origin "${{ needs.init.outputs.Version }}"