Skip to content

update workflow

update workflow #1

name: Draft Release on Merge to Release Branch
on:
push:
branches:
- release
env:
BRANCH_SUFFIX: stable
VERSION_SUFFIX: alpha
jobs:
create-new-release:
runs-on: windows-latest
name: Build a new release and open a draft GitHub release with changelog
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set execution policy
run: Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process
shell: pwsh
- name: Extract branch name
id: extract_branch
run: |
git fetch --all
$commitSHA = git rev-parse HEAD
$branch = git branch -r --contains $commitSHA | Select-String -Pattern 'origin/' | Select-Object -First 1 | ForEach-Object { $_.Line -replace '.*origin/', '' } | ForEach-Object { $_.Trim() }
echo "branch=$branch" >> $env:GITHUB_OUTPUT
Write-Host "The current branch is: $branch"
shell: pwsh
- name: Get the newest tag
id: get_latest_tag
run: |
git fetch --tags
$tags = git tag --sort=-creatordate
$branchSuffix = "${{ env.BRANCH_SUFFIX }}"
$potentialTags = @()
foreach ($tag in $tags) {
if ($tag -match ".*-$branchSuffix$") {
$potentialTags += $tag
}
}
if ($potentialTags.Count -gt 0) {
$newestStableTag = $potentialTags[0]
echo "from_tag=$newestStableTag" >> $env:GITHUB_OUTPUT
Write-Host "Latest found tag is $newestStableTag"
} else {
Write-Host "No matching tags found, fetching the latest tag."
$latestTag = $tags | Select-Object -First 1
if ($latestTag) {
echo "from_tag=$latestTag" >> $env:GITHUB_OUTPUT
Write-Host "Latest found tag is $latestTag"
} else {
Write-Host "No tags found at all."
exit 1
}
}
shell: pwsh
- name: Generate Version Number
working-directory: src
id: generate_version_number
run: |
$branch = '${{ steps.extract_branch.outputs.branch }}'
$version = .\BuildVersionNumber.ps1 -suffix $VERSION_SUFFIX -branch $branch -githubRunNumber ${{ github.run_number }}
echo "version=$version" >> $env:GITHUB_OUTPUT
Write-Host "The version name to build is: $version"
shell: pwsh
- name: Update version numbers in project
working-directory: src
run: |
$version = '${{ steps.generate_version_number.outputs.version }}'
Write-Host "Updating project versions to: $version"
.\UpdateProjectVersions.ps1 -version $version
shell: pwsh
- name: Setup .NET Core
uses: actions/setup-dotnet@v4
with:
dotnet-version: '6.0.x'
- name: Build release
working-directory: src
run: .\BuildForRelease.ps1
shell: pwsh
- name: Package release
working-directory: src
run: |
$version = 'v${{ steps.generate_version_number.outputs.version }}'
mkdir -p artefacts/release/$version
Write-Host "Packaging for the release version: $version"
.\PackageRelease.ps1 -version $version
shell: pwsh
- name: Rename the release assets
working-directory: .
run: |
$version = 'v${{ steps.generate_version_number.outputs.version }}'
$releaseDir = Join-Path $(Get-Location) "artefacts/release/$version"
Write-Host "Release directory: $releaseDir"
if (!(Test-Path $releaseDir)) {
throw "The release directory does not exist: $releaseDir"
}
$archives = Get-ChildItem $releaseDir -Filter *.zip
foreach($archive in $archives) {
$path = $archive.FullName
Write-Host "The path to the archive is: $path"
$nameWoExt = [io.path]::GetFileNameWithoutExtension($path)
Write-Host "The name without extension is: $nameWoExt"
$target = Join-Path $releaseDir ($nameWoExt + "." + $version + ".zip")
Write-Host "Moving: $path -> $target"
Move-Item -Path $path -Destination $target
}
shell: pwsh
- name: Create Git tag
run: |
git config --global user.name "github-actions[bot]"
git config --global user.email "github-actions[bot]@users.noreply.github.com"
git tag v${{ steps.generate_version_number.outputs.version }}
git push origin v${{ steps.generate_version_number.outputs.version }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Generate release notes
id: generate_release_notes
uses: mikepenz/release-changelog-builder-action@v4
with:
configuration: ".github/changelog_configuration.json"
token: ${{ secrets.GITHUB_TOKEN }}
fromTag: "${{ steps.get_latest_tag.outputs.from_tag }}"
toTag: "v${{ steps.generate_version_number.outputs.version }}"
fetchViaCommits: "true"
ignorePreReleases: "false"
fetchReleaseInformation: "true"
failOnError: "true"
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Create GitHub release
id: create_release
uses: softprops/action-gh-release@v2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: "v${{ steps.generate_version_number.outputs.version }}"
name: "v${{ steps.generate_version_number.outputs.version }}"
draft: true
prerelease: false
body: ${{ steps.generate_release_notes.outputs.changelog }}
token: ${{ secrets.GITHUB_TOKEN }}
- name: Upload the release assets
uses: AButler/[email protected]
with:
files: "artefacts/release/v${{ steps.generate_version_number.outputs.version }}/*.zip"
repo-token: ${{ secrets.GITHUB_TOKEN }}
release-tag: "v${{ steps.generate_version_number.outputs.version }}"