mirror of
https://github.com/optiscaler/OptiScaler.git
synced 2026-05-03 08:11:09 +00:00
145 lines
5.2 KiB
YAML
145 lines
5.2 KiB
YAML
# 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: Release
|
|
|
|
permissions:
|
|
contents: write
|
|
|
|
jobs:
|
|
build:
|
|
runs-on: windows-latest
|
|
environment: Build
|
|
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
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@v7.0.0
|
|
with:
|
|
name: '${{ steps.get_version.outputs.filename }}_unsigned_dll'
|
|
path: '${{ github.workspace }}\x64\Release\a\OptiScaler.dll'
|
|
compression-level: 9
|
|
if-no-files-found: error
|
|
|
|
- id: optional_step_id
|
|
uses: signpath/github-action-submit-signing-request@v2
|
|
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\Release\a\OptiScaler.dll' -Force
|
|
|
|
- name: Compress the artifact
|
|
run: |
|
|
$zipName = "${{ steps.get_version.outputs.filename }}.7z"
|
|
7z a -r ${{ github.workspace }}\$zipName ${{ github.workspace }}\x64\Release\a\*.*
|
|
|
|
continue-on-error: false
|
|
|
|
- uses: actions/upload-artifact@v7.0.0
|
|
with:
|
|
name: '${{ steps.get_version.outputs.filename }}'
|
|
path: '${{ github.workspace }}\${{ steps.get_version.outputs.filename }}.7z'
|
|
compression-level: 0
|
|
archive: false
|
|
if-no-files-found: error
|