# 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 ReleaseDebug 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@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\ReleaseDebug\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\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@v7.0.0 with: name: '${{ steps.get_version.outputs.filename }}' path: '${{ github.workspace }}\${{ steps.get_version.outputs.filename }}.7z' archive: false compression-level: 0 if-no-files-found: error