Add workflow for creating versioning pr #138
Workflow file for this run
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, test and release | |
on: | |
push: | |
branches: ["main"] | |
tags: ["v*"] | |
pull_request: | |
branches: ["main"] | |
jobs: | |
version: | |
name: Get version | |
runs-on: ubuntu-latest | |
outputs: | |
version: ${{ steps.get_version.outputs.version }} | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 # Get all tags | |
- name: Get release version | |
id: get_release_version | |
uses: paulhatch/[email protected] | |
with: | |
tag_prefix: "v" | |
version_format: "${major}.${minor}.${patch}" | |
- name: Get branch names | |
id: branch_names | |
uses: OctopusDeploy/util-actions/[email protected] | |
- name: Get pre-release version | |
id: get_pre_release_version | |
uses: paulhatch/[email protected] | |
with: | |
tag_prefix: "v" | |
version_format: "${major}.${minor}.${patch}-${{ steps.branch_names.outputs.branch_name }}.${{ github.run_number }}-${{ github.run_attempt }}" | |
- name: Get version | |
id: get_version | |
run: echo "version=${{ github.ref_type == 'tag' && github.event_name == 'push' && steps.get_release_version.outputs.version || steps.get_pre_release_version.outputs.version }}" >> $GITHUB_OUTPUT | |
build: | |
needs: version | |
strategy: | |
matrix: | |
include: | |
- name: Linux | |
os: ubuntu-latest | |
- name: Windows | |
os: windows-latest | |
- name: macOS | |
os: macos-latest | |
name: Build and test on ${{ matrix.name }} | |
runs-on: ${{ matrix.os }} | |
defaults: | |
run: | |
working-directory: src | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup .NET | |
uses: actions/setup-dotnet@v4 | |
with: | |
dotnet-version: 9.0.x | |
- name: Restore dependencies | |
run: dotnet restore | |
- name: Build | |
run: dotnet build --no-restore -c Release | |
- name: Test | |
run: dotnet test --no-build -c Release --verbosity normal --logger "trx;LogFileName=${{ github.workspace }}/tests/test_results.trx" | |
- name: Create test report | |
uses: phoenix-actions/test-reporting@v15 | |
if: success() || failure() # run this step even if previous step failed | |
with: | |
name: Tests | |
path: ${{ github.workspace }}/tests/*.trx | |
path-replace-backslashes: true # Required for Windows paths | |
reporter: dotnet-trx | |
output-to: step-summary | |
publish: | |
needs: [version, build] | |
strategy: | |
matrix: | |
include: | |
- name: Linux amd64 | |
runtime-id: linux-x64 | |
artifact-name: linux_amd64 | |
archive_type: tar | |
- name: Linux arm64 | |
runtime-id: linux-arm64 | |
artifact-name: linux_arm64 | |
archive_type: tar | |
- name: Windows amd64 | |
runtime-id: win-x64 | |
artifact-name: windows_amd64 | |
archive_type: zip | |
- name: Windows arm64 | |
runtime-id: win-arm64 | |
artifact-name: windows_arm64 | |
archive_type: zip | |
- name: macOS amd64 | |
runtime-id: osx-x64 | |
artifact-name: macos_amd64 | |
archive_type: tar | |
- name: macOS arm64 | |
runtime-id: osx-arm64 | |
artifact-name: macos_arm64 | |
archive_type: tar | |
name: Publish ${{ matrix.name }} | |
runs-on: ubuntu-latest | |
defaults: | |
run: | |
working-directory: src | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup .NET | |
uses: actions/setup-dotnet@v4 | |
with: | |
dotnet-version: 9.0.x | |
- name: Publish | |
run: dotnet publish Stack/Stack.csproj -c Release -r ${{ matrix.runtime-id }} -p:Version=${{ needs.version.outputs.version }} -p:DebugType=None -p:DebugSymbols=false -o ${{ github.workspace }}/publish | |
- run: mkdir -p ${{ github.workspace }}/artifacts | |
- name: Create tar.gz arhive | |
run: tar -czf ${{ github.workspace }}/artifacts/stack_${{ needs.version.outputs.version }}_${{ matrix.artifact-name }}.tar.gz * | |
working-directory: ${{ github.workspace }}/publish | |
if: matrix.archive_type == 'tar' | |
- name: Create zip arhive | |
run: zip -r ${{ github.workspace }}/artifacts/stack_${{ needs.version.outputs.version }}_${{ matrix.artifact-name }}.zip * | |
working-directory: ${{ github.workspace }}/publish | |
if: matrix.archive_type == 'zip' | |
- name: Upload artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
overwrite: true | |
name: ${{ matrix.artifact-name }} | |
path: ${{ github.workspace }}/artifacts/* | |
release: | |
name: Release | |
needs: [version, publish] | |
if: github.event_name == 'push' && github.ref_type == 'tag' | |
runs-on: ubuntu-latest | |
permissions: | |
contents: write | |
steps: | |
- name: Download artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
path: ${{ github.workspace }}/artifacts | |
- name: List artifacts | |
run: ls -lR ${{ github.workspace }}/artifacts | |
- name: Create release | |
id: create_release | |
uses: softprops/action-gh-release@v2 | |
with: | |
tag_name: v${{ needs.version.outputs.version }} | |
draft: false | |
prerelease: false | |
files: | | |
${{ github.workspace }}/artifacts/**/*.tar.gz | |
${{ github.workspace }}/artifacts/**/*.zip |