Skip to content

♻️ CI/CD

♻️ CI/CD #187

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
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
- run: Write-Output "Matrix:${{ steps.set-matrix.outputs.MATRIX }}"
- 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:
needs: init
runs-on: windows-latest # We are using windows instead of ubuntu becaus it provides support for net472 & net48.
timeout-minutes: 15
env:
Version: ${{ needs.init.outputs.Version }}
strategy:
matrix:
package_module: ${{ fromJSON(needs.init.outputs.matrix) }}
steps:
- name: 📥 checkout
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: 🖊️ materialize signing key
id: signing-key
uses: ./.github/actions/materialize-signing-key
with:
signing-key-value: ${{ secrets.SIGNING_KEY }}
- name: 🏗️ build
run: dotnet build ./src/${{ env.Namespace }}.${{ matrix.package_module }}.sln
env:
CI: true
StrongNameKey: ${{ secrets.SIGNING_KEY }}
StrongNameKeyPath: ${{ steps.signing-key.outputs.file-path }}
- name: 🧪 test
uses: ./.github/actions/test-module
with:
module-name: ${{ matrix.package_module }}
module-namespace: ${{ env.Namespace }}
codecov-token: ${{ secrets.CODECOV_TOKEN }}
- name: 📦 pack
if: ${{ startsWith(matrix.package_module, 'Auto' ) }}
run: dotnet pack ./src/${{ env.Namespace }}.${{ matrix.package_module }} --no-restore
env:
CI: true
StrongNameKey: ${{ secrets.SIGNING_KEY }}
StrongNameKeyPath: ${{ steps.signing-key.outputs.file-path }}
- name: 🔼 upload packages
if: ${{ startsWith(matrix.package_module, 'Auto' ) }}
uses: actions/upload-artifact@v3
with:
name: packages
path: |
./src/**/*.nupkg
./src/**/*.snupkg
publish:
runs-on: ubuntu-latest
timeout-minutes: 15
needs: [build]
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' }}
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 }}"