Skip to content

Add workflow for creating versioning pr #138

Add workflow for creating versioning pr

Add workflow for creating versioning pr #138

Workflow file for this run

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