From b7f2c2e84aa1dacc4e8ccdbbd4dac1a07329b4d0 Mon Sep 17 00:00:00 2001 From: nitec <35529761+cdozdil@users.noreply.github.com> Date: Tue, 30 Dec 2025 23:57:50 +0300 Subject: [PATCH] Add ReleaseDebug workflow for building and signing This workflow builds the project, extracts version information, and uploads the resulting artifacts. --- .github/workflows/ReleaseDebug.yml | 143 +++++++++++++++++++++++++++++ 1 file changed, 143 insertions(+) create mode 100644 .github/workflows/ReleaseDebug.yml diff --git a/.github/workflows/ReleaseDebug.yml b/.github/workflows/ReleaseDebug.yml new file mode 100644 index 00000000..ed0e0e69 --- /dev/null +++ b/.github/workflows/ReleaseDebug.yml @@ -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