Skip to content

Release

Release #35

Workflow file for this run

name: Release
on:
workflow_dispatch:
inputs:
new_package_version:
description: 'New package version'
required: true
should_push_nuget:
description: 'Push to NuGet'
default: 'true'
required: false
should_push_github:
description: 'Push to GitHub package registry'
default: 'true'
required: false
should_commit_new_version:
description: 'Commit and push version increment'
default: 'true'
required: false
should_tag_new_version:
description: 'Tag version release'
default: 'true'
required: false
should_create_github_release:
description: 'Create GitHub Release'
default: 'true'
required: false
jobs:
release:
if: github.actor == 'eduherminio'
runs-on: ubuntu-latest
env:
DOTNET_CLI_TELEMETRY_OPTOUT: 1
ARTIFACT_DIR: ./artifacts
PROJECT_NAME: AoCHelper
steps:
- name: Install hub tool
if: github.event.inputs.should_create_github_release == 'true'
run: |
sudo apt-get update && sudo apt-get install -y hub
- uses: actions/checkout@v4
- name: Configure git user
run: |
git config --global user.name 'GitHub Actions'
git config --global user.email '41898282+github-actions[bot]@users.noreply.github.com'
- name: Inject slug/short variables
uses: rlespinasse/[email protected]
- name: Setup .NET
uses: actions/setup-dotnet@v3
with:
dotnet-version: 8.0.x
- name: Set version to ${{ github.event.inputs.new_package_version }}
shell: pwsh
run: |
$input_path = "src/${{ env.PROJECT_NAME }}/${{ env.PROJECT_NAME }}.csproj"
$regex = "(?<=<Version>).*(?=</Version>)"
(Get-Content $input_path) -Replace $regex, '${{ github.event.inputs.new_package_version }}' | Out-File $input_path
- name: Build
run: dotnet build -c Release /p:DeterministicBuild=true
- name: Run tests
run: dotnet test -c Release --no-build --collect:"XPlat Code Coverage"
- name: 'Generate test coverage report'
continue-on-error: true
uses: danielpalme/ReportGenerator-GitHub-Action@5
with:
reports: 'tests/**/*.cobertura.xml'
targetdir: 'coveragereport'
reporttypes: 'HtmlInline_AzurePipelines_Dark'
assemblyfilters: '+*'
classfilters: '+*;-*Exception'
filefilters: '+*'
verbosity: 'Info'
title: '${{ env.PROJECT_NAME }} #${{ github.run_number }} (${{ env.GITHUB_REF_SLUG }})'
tag: '${{ github.run_number }}_${{ github.run_id }}'
customSettings: 'numberOfReportsParsedInParallel=3;numberOfReportsMergedInParallel=3'
- name: 'Upload test coverage report'
continue-on-error: true
uses: actions/upload-artifact@v3
with:
name: ${{ env.PROJECT_NAME }}.${{ github.event.inputs.new_package_version }}-coverage-${{ env.GITHUB_REF_SLUG }}-${{ github.run_number }}
path: coveragereport/
if-no-files-found: error
- name: Pack
run: |
dotnet pack -c Release --no-build src/${{ env.PROJECT_NAME }}/${{ env.PROJECT_NAME }}.csproj --include-symbols -o ${{ env.ARTIFACT_DIR }}
- name: Upload Artifact
uses: actions/upload-artifact@v3
with:
name: ${{ env.PROJECT_NAME }}.${{ github.event.inputs.new_package_version }}-${{ env.GITHUB_REF_SLUG }}-${{ github.run_number }}
path: |
${{ env.ARTIFACT_DIR }}/*.nupkg
${{ env.ARTIFACT_DIR }}/*.snupkg
if-no-files-found: error
- name: Push to NuGet
if: github.event.inputs.should_push_nuget == 'true'
run: |
nuget push '${{ env.ARTIFACT_DIR }}/*.nupkg' -ApiKey ${{ secrets.NuGetKey }} -Source https://api.nuget.org/v3/index.json -SkipDuplicate -Verbosity detailed
- name: Push to GitHub packages registry
if: github.event.inputs.should_push_github == 'true'
run: |
nuget push '${{ env.ARTIFACT_DIR }}/*.nupkg' -ApiKey ${{ secrets.GitHubToken }} -Source https://nuget.pkg.github.com/eduherminio/index.json -SkipDuplicate -Verbosity detailed
- name: Commit and push version increment
if: github.event.inputs.should_commit_new_version == 'true'
continue-on-error: true
run: |
git switch ${{ env.GITHUB_REF_SLUG }}
git status
git commit -am "🚀 Release v${{ github.event.inputs.new_package_version }}"
git push
- name: Create git tag
if: github.event.inputs.should_tag_new_version == 'true'
run: |
git switch ${{ env.GITHUB_REF_SLUG }}
git status
git tag -a v${{ github.event.inputs.new_package_version }} -m "v${{ github.event.inputs.new_package_version }}"
git push --tags
- name: Create GitHub release and upload assets
if: github.event.inputs.should_create_github_release == 'true' && github.event.inputs.should_tag_new_version == 'true'
env:
GITHUB_TOKEN: ${{ secrets.GitHubToken }}
run: |
set -x
assets=()
for asset in ${{ env.ARTIFACT_DIR }}/*; do
assets+=("-a" "$asset")
done
tag_name="v${{ github.event.inputs.new_package_version }}"
hub release create "${assets[@]}" --message "$tag_name" "$tag_name"