Skip to content

.NET Release Workflow (cross-platform compatibility) #6

.NET Release Workflow (cross-platform compatibility)

.NET Release Workflow (cross-platform compatibility) #6

Workflow file for this run

name: .NET Release Workflow
on:
push:
tags:
- 'v*'
jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [windows-latest, ubuntu-latest] # if I add MacOS builds even though I can't test them :skull: -> macos-latest
steps:
# Step 1
- name: Checkout repository
uses: actions/checkout@v2
# Step 2
- name: Setup .NET
uses: actions/setup-dotnet@v2
with:
dotnet-version: '8.0'
# Step 3
- name: Restore dependencies
run: dotnet restore
# Step 4
- name: Build the project
run: dotnet build --configuration Release --runtime win-x64 --framework net8.0 -p:Optimize=true
# Step 5
- name: Run tests
run: dotnet test
# Step 6
- name: Publish the project
run: dotnet publish --configuration Release --runtime win-x64 --framework net8.0 -p:Optimize=true --output ./publish
# Step 7
- name: Get version from tag
id: get_version
run: echo "VERSION=$(echo ${GITHUB_REF} | sed 's/refs\/tags\///')" >> $GITHUB_ENV
# Step 8
- name: Create ZIP archives
run: |
if [[ $RUNNER_OS == 'Windows' ]]; then
cd ./publish
powershell Compress-Archive -Path (Get-ChildItem -Path . -Recurse | Select-Object -ExpandProperty FullName) -DestinationPath "../WriterSharp_${{ env.VERSION }}_win64.zip"
elif [[ $RUNNER_OS == 'Linux' ]]; then
cd ./publish
zip -r "../WriterSharp_${{ env.VERSION }}_linux64.zip" *
# MacOS down here
#elif [ $RUNNER_OS == 'macOS' ]; then
#cd ./publish
#zip -r "../WriterSharp_${{ env.VERSION }}.zip" *
fi
shell: bash
# Step 9
- name: Create TAR.GZ archives
run: |
if [[ $RUNNER_OS == 'Windows' ]]; then
cd ./publish
tar -czvf "../WriterSharp_${{ env.VERSION }}_win64.tar.gz" *
elif [[ $RUNNER_OS == 'Linux' ]]; then
cd ./publish
tar -czvf "../WriterSharp_${{ env.VERSION }}_linux64.tar.gz" *
# MacOS down here
#elif [ $RUNNER_OS == 'macOS' ]; then
#cd ./publish
#tar -czvf "../WriterSharp_${{ env.VERSION }}.tar.gz" *
fi # can we talk about how YAML thinks reversing if sounds like ending an if :skull:
shell: bash
- name: Append Release Warning
run:
echo "> [!WARNING]" >> LatestReleaseNotes.md
echo "> The following binaries were not compiled manually. Use them at your own risk." >> LatestReleaseNotes.md"
# Step 10
- name: Create Release
uses: softprops/action-gh-release@v1
with:
body_path: LatestReleaseNotes.md
generate_release_notes: true
files: |
./*.zip
./*.tar.gz
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}