mirror of
https://github.com/optiscaler/OptiScaler.git
synced 2026-05-03 08:11:09 +00:00
Add ReleaseDebug workflow for building and signing
This workflow builds the project, extracts version information, and uploads the resulting artifacts.
This commit is contained in:
@@ -0,0 +1,143 @@
|
||||
# This workflow uses actions that are not certified by GitHub.
|
||||
# They are provided by a third-party and are governed by
|
||||
# separate terms of service, privacy policy, and support
|
||||
# documentation.
|
||||
|
||||
name: Build
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
# push:
|
||||
# branches: [ "master" ]
|
||||
# pull_request:
|
||||
# branches: [ "master" ]
|
||||
|
||||
env:
|
||||
# Path to the solution file relative to the root of the project.
|
||||
SOLUTION_FILE_PATH: .
|
||||
|
||||
# Configuration type to build.
|
||||
# You can convert this to a build matrix if you need coverage of multiple configuration types.
|
||||
# https://docs.github.com/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix
|
||||
BUILD_CONFIGURATION: ReleaseDebug
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: windows-latest
|
||||
environment: Build
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: 'true'
|
||||
|
||||
- name: Extract Version
|
||||
id: get_version
|
||||
working-directory: ${{ github.workspace }}
|
||||
shell: powershell
|
||||
run: |
|
||||
# Ensure the file exists before proceeding
|
||||
$resourceFile = ".\OptiScaler\resource.h"
|
||||
if (-Not (Test-Path $resourceFile)) {
|
||||
Write-Error "File not found: $resourceFile"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Helper function to extract the first matching line for a version component
|
||||
function Get-Version-Component {
|
||||
param (
|
||||
[string]$pattern,
|
||||
[string]$replacement
|
||||
)
|
||||
# Use Select-String and take only the first match
|
||||
$line = Get-Content $resourceFile | Select-String -Pattern $pattern | Select-Object -First 1
|
||||
if ($line) {
|
||||
return ($line.Line -replace $replacement).Trim()
|
||||
} else {
|
||||
Write-Error "Pattern not found: $pattern"
|
||||
exit 1
|
||||
}
|
||||
}
|
||||
|
||||
# Extract version components (only the first match for each pattern)
|
||||
$majorVersion = Get-Version-Component 'VER_MAJOR_VERSION' '#define VER_MAJOR_VERSION\s+'
|
||||
$minorVersion = Get-Version-Component 'VER_MINOR_VERSION' '#define VER_MINOR_VERSION\s+'
|
||||
$hotfixVersion = Get-Version-Component 'VER_HOTFIX_VERSION' '#define VER_HOTFIX_VERSION\s+'
|
||||
$buildVersion = Get-Version-Component 'VER_BUILD_NUMBER' '#define VER_BUILD_NUMBER\s+'
|
||||
|
||||
# Merge into a single version string
|
||||
$version = "v$majorVersion.$minorVersion.$hotfixVersion-pre$buildVersion"
|
||||
|
||||
# Get the current date in a specific format (e.g., YYYYMMDD)
|
||||
$date = Get-Date -Format "yyyyMMdd"
|
||||
|
||||
# Construct the output filename with version and date
|
||||
$outputFileName = "OptiScaler_${version}_${date}"
|
||||
|
||||
# Output the generated filename
|
||||
Write-Output "Generated Filename: $outputFileName"
|
||||
|
||||
# Write outputs to GITHUB_OUTPUT
|
||||
"version=$version" | Out-File -FilePath $env:GITHUB_OUTPUT -Append
|
||||
"filename=$outputFileName" | Out-File -FilePath $env:GITHUB_OUTPUT -Append
|
||||
|
||||
continue-on-error: false
|
||||
|
||||
- name: Debug Outputs
|
||||
run: |
|
||||
echo "Version: ${{ steps.get_version.outputs.version }}"
|
||||
echo "Filename: ${{ steps.get_version.outputs.filename }}"
|
||||
|
||||
- name: Add MSBuild to PATH
|
||||
uses: microsoft/setup-msbuild@v2
|
||||
|
||||
- name: Build
|
||||
working-directory: ${{env.GITHUB_WORKSPACE}}
|
||||
# Add additional options to the MSBuild command line here (like platform or verbosity level).
|
||||
# See https://docs.microsoft.com/visualstudio/msbuild/msbuild-command-line-reference
|
||||
run: msbuild /m /p:Configuration=${{env.BUILD_CONFIGURATION}} ${{env.SOLUTION_FILE_PATH}} /verbosity:minimal
|
||||
|
||||
- name: upload-unsigned-artifact
|
||||
id: upload-unsigned-artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: '${{ steps.get_version.outputs.filename }}_unsigned_dll'
|
||||
path: '${{ github.workspace }}\x64\ReleaseDebug\OptiScaler.dll'
|
||||
compression-level: 9
|
||||
if-no-files-found: error
|
||||
|
||||
- id: optional_step_id
|
||||
uses: signpath/github-action-submit-signing-request@v1.1
|
||||
with:
|
||||
api-token: '${{ secrets.SIGNPATH_API_TOKEN }}'
|
||||
organization-id: 'cea1f484-9039-4fe9-bb48-e7e5b0b09526'
|
||||
project-slug: 'OptiScaler'
|
||||
signing-policy-slug: 'release-signing'
|
||||
github-artifact-id: '${{ steps.upload-unsigned-artifact.outputs.artifact-id }}'
|
||||
wait-for-completion: true
|
||||
output-artifact-directory: 'signed'
|
||||
|
||||
- name: Copy Back Signed Library
|
||||
id: copy_back
|
||||
working-directory: ${{ github.workspace }}
|
||||
shell: powershell
|
||||
run: |
|
||||
cd .\signed
|
||||
copy .\OptiScaler.dll '${{ github.workspace }}\x64\ReleaseDebug\OptiScaler.dll' -Force
|
||||
|
||||
- name: Compress the artifact
|
||||
run: |
|
||||
$zipName = "${{ steps.get_version.outputs.filename }}.7z"
|
||||
7z a -r ${{ github.workspace }}\$zipName ${{ github.workspace }}\x64\ReleaseDebug\*.*
|
||||
|
||||
continue-on-error: false
|
||||
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: '${{ steps.get_version.outputs.filename }}'
|
||||
path: '${{ github.workspace }}\${{ steps.get_version.outputs.filename }}.7z'
|
||||
compression-level: 0
|
||||
if-no-files-found: error
|
||||
Reference in New Issue
Block a user