MINGW: convert resource file to ANSI. #96
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: windows-build | |
| on: | |
| push: | |
| pull_request: | |
| permissions: | |
| contents: read | |
| jobs: | |
| build: | |
| runs-on: windows-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - arch: x64 | |
| cmake_platform: x64 | |
| configuration: Release | |
| cmake_extra_args: "" | |
| vcpkg_triplet: x64-windows | |
| - arch: x86 | |
| cmake_platform: Win32 | |
| configuration: Release | |
| cmake_extra_args: -DWITH_ASM=OFF | |
| vcpkg_triplet: x86-windows | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| persist-credentials: false | |
| - name: Select Visual Studio generator | |
| id: vs_generator | |
| shell: pwsh | |
| run: | | |
| $ErrorActionPreference = "Stop" | |
| $vswhere = Join-Path ${env:ProgramFiles(x86)} "Microsoft Visual Studio\Installer\vswhere.exe" | |
| $vsInstances = & $vswhere -latest -products * -format json | ConvertFrom-Json | |
| $vsInstance = @($vsInstances)[0] | |
| if ($null -eq $vsInstance) { | |
| Write-Error "No Visual Studio installation was found." | |
| exit 1 | |
| } | |
| $vsVersion = [string]$vsInstance.installationVersion | |
| if ([string]::IsNullOrWhiteSpace($vsVersion)) { | |
| Write-Error "Visual Studio installation did not report a version." | |
| exit 1 | |
| } | |
| $vcToolsVersionFile = Join-Path $vsInstance.installationPath "VC\Auxiliary\Build\Microsoft.VCToolsVersion.default.txt" | |
| if (-not (Test-Path $vcToolsVersionFile)) { | |
| Write-Error "Visual Studio was found, but C++ tools were not found at $vcToolsVersionFile." | |
| exit 1 | |
| } | |
| $major = [int]($vsVersion.Split(".")[0]) | |
| if ($major -ge 18) { | |
| $generator = "Visual Studio 18 2026" | |
| } elseif ($major -eq 17) { | |
| $generator = "Visual Studio 17 2022" | |
| } else { | |
| Write-Error "Unsupported Visual Studio version: $vsVersion" | |
| exit 1 | |
| } | |
| $cmake = Get-Command cmake -ErrorAction SilentlyContinue | |
| if ($null -eq $cmake) { | |
| Write-Error "CMake was not found on PATH." | |
| exit 1 | |
| } | |
| $cmakeHelp = & $cmake.Source --help | Out-String | |
| if (-not $cmakeHelp.Contains($generator)) { | |
| Write-Error "The installed CMake does not support the '$generator' generator." | |
| exit 1 | |
| } | |
| "cmake_generator=$generator" | Out-File -FilePath $env:GITHUB_OUTPUT -Append | |
| "vs_major=$major" | Out-File -FilePath $env:GITHUB_OUTPUT -Append | |
| Write-Host "Using CMake generator: $generator" | |
| - name: Cache vcpkg | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| C:\vcpkg\downloads | |
| C:\vcpkg\archives | |
| C:\vcpkg\buildtrees | |
| C:\vcpkg\packages | |
| C:\vcpkg\binarycache | |
| key: ${{ runner.os }}-${{ matrix.arch }}-vs${{ steps.vs_generator.outputs.vs_major }}-vcpkg-${{ hashFiles('vcpkg.json', 'vcpkg-configuration.json') }} | |
| - name: Install FFmpeg (vcpkg) | |
| shell: pwsh | |
| run: | | |
| $vcpkgRoot = "C:\vcpkg" | |
| if (-not (Test-Path $vcpkgRoot)) { | |
| git clone https://github.com/microsoft/vcpkg $vcpkgRoot | |
| } | |
| & "$vcpkgRoot\bootstrap-vcpkg.bat" | |
| $env:VCPKG_BINARY_SOURCES = "clear;files,C:\vcpkg\binarycache,readwrite" | |
| Push-Location $env:GITHUB_WORKSPACE | |
| & "$vcpkgRoot\vcpkg.exe" install --triplet ${{ matrix.vcpkg_triplet }} | |
| Pop-Location | |
| - name: Cache CMake deps | |
| uses: actions/cache@v4 | |
| with: | |
| path: Projects/VS/_deps | |
| key: ${{ runner.os }}-${{ matrix.arch }}-vs${{ steps.vs_generator.outputs.vs_major }}-cmake-deps-${{ hashFiles('CMakeLists.txt') }} | |
| - name: Configure | |
| run: cmake -S . -B Projects/VS -G "${{ steps.vs_generator.outputs.cmake_generator }}" -A ${{ matrix.cmake_platform }} ${{ matrix.cmake_extra_args }} -DOPENFODDER_ENABLE_FFMPEG=ON -DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake -DVCPKG_TARGET_TRIPLET=${{ matrix.vcpkg_triplet }} | |
| - name: Build | |
| run: cmake --build Projects/VS --config ${{ matrix.configuration }} | |
| - name: Test | |
| shell: pwsh | |
| run: | | |
| $runDir = "$env:GITHUB_WORKSPACE\Run" | |
| $stashDir = "$env:RUNNER_TEMP\openfodder-runtime" | |
| $ffmpegBin = "$env:GITHUB_WORKSPACE\vcpkg_installed\${{ matrix.vcpkg_triplet }}\bin" | |
| if (-not (Test-Path $ffmpegBin)) { | |
| $ffmpegBin = "C:\vcpkg\installed\${{ matrix.vcpkg_triplet }}\bin" | |
| } | |
| New-Item -ItemType Directory -Path $stashDir -Force | Out-Null | |
| Copy-Item "$runDir\openfodder.exe" -Destination $stashDir -Force -ErrorAction SilentlyContinue | |
| Copy-Item "$runDir\SDL3.dll" -Destination $stashDir -Force -ErrorAction SilentlyContinue | |
| Copy-Item "$runDir\SDL3_mixer.dll" -Destination $stashDir -Force -ErrorAction SilentlyContinue | |
| $dataRepoDir = "$env:RUNNER_TEMP\openfodder-data" | |
| if (Test-Path $dataRepoDir) { Remove-Item $dataRepoDir -Recurse -Force } | |
| git clone --single-branch https://github.com/OpenFodder/data.git $dataRepoDir | |
| if (Test-Path $runDir) { Remove-Item $runDir -Recurse -Force } | |
| New-Item -ItemType Directory -Path $runDir -Force | Out-Null | |
| Copy-Item "$dataRepoDir\*" $runDir -Recurse -Force | |
| Copy-Item "$stashDir\openfodder.exe" -Destination $runDir -Force -ErrorAction SilentlyContinue | |
| Copy-Item "$stashDir\SDL3.dll" -Destination $runDir -Force -ErrorAction SilentlyContinue | |
| Copy-Item "$stashDir\SDL3_mixer.dll" -Destination $runDir -Force -ErrorAction SilentlyContinue | |
| if (Test-Path "$runDir/Tests") { Remove-Item "$runDir/Tests" -Recurse -Force } | |
| git clone https://github.com/OpenFodder/tests.git $runDir/Tests | |
| Copy-Item "$ffmpegBin\avcodec*.dll" -Destination $runDir -Force | |
| Copy-Item "$ffmpegBin\avformat*.dll" -Destination $runDir -Force | |
| Copy-Item "$ffmpegBin\avutil*.dll" -Destination $runDir -Force | |
| Copy-Item "$ffmpegBin\swscale*.dll" -Destination $runDir -Force | |
| Copy-Item "$ffmpegBin\swresample*.dll" -Destination $runDir -Force | |
| Push-Location $runDir | |
| .\openfodder.exe --appveyor --unit-test-headless | |
| if ($LASTEXITCODE -ne 0) { | |
| exit $LASTEXITCODE | |
| } | |
| Pop-Location | |
| - name: Package | |
| shell: pwsh | |
| run: | | |
| $archive = "OpenFodder-${{ matrix.arch }}-${{ matrix.configuration }}-latest.zip" | |
| $ffmpegBin = "$env:GITHUB_WORKSPACE\vcpkg_installed\${{ matrix.vcpkg_triplet }}\bin" | |
| if (-not (Test-Path $ffmpegBin)) { | |
| $ffmpegBin = "C:\vcpkg\installed\${{ matrix.vcpkg_triplet }}\bin" | |
| } | |
| if (-not (Test-Path $ffmpegBin)) { | |
| Write-Error "FFmpeg binaries not found in vcpkg_installed or C:\vcpkg\installed for ${{ matrix.vcpkg_triplet }}." | |
| exit 1 | |
| } | |
| $ffmpegDlls = Get-ChildItem $ffmpegBin -Filter *.dll | Where-Object { | |
| $_.Name -match "^(avcodec|avformat|avutil|swscale|swresample)" | |
| } | Select-Object -ExpandProperty FullName | |
| $items = @( | |
| "$env:GITHUB_WORKSPACE\Run\openfodder.exe", | |
| "$env:GITHUB_WORKSPACE\Run\SDL3.dll", | |
| "$env:GITHUB_WORKSPACE\Run\SDL3_mixer.dll", | |
| "$env:GITHUB_WORKSPACE\README.md", | |
| "$env:GITHUB_WORKSPACE\COPYING", | |
| "$env:GITHUB_WORKSPACE\openfodder.ini.example" | |
| ) + $ffmpegDlls | |
| if (Test-Path $archive) { Remove-Item $archive -Force } | |
| Compress-Archive -Path $items -DestinationPath $archive | |
| - name: Upload artifact | |
| uses: actions/upload-artifact@v4 | |
| id: upload_artifact | |
| with: | |
| name: OpenFodder-${{ matrix.arch }}-${{ matrix.configuration }}-latest | |
| path: OpenFodder-${{ matrix.arch }}-${{ matrix.configuration }}-latest.zip | |
| - name: Configure AWS credentials | |
| if: github.event_name == 'push' && github.ref == 'refs/heads/master' | |
| uses: aws-actions/configure-aws-credentials@v4 | |
| with: | |
| aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} | |
| aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
| aws-region: ${{ secrets.AWS_REGION || 'us-east-1' }} | |
| - name: Upload build zip to S3 | |
| if: github.event_name == 'push' && github.ref == 'refs/heads/master' | |
| shell: pwsh | |
| run: | | |
| $zipName = "OpenFodder-${{ matrix.arch }}-${{ matrix.configuration }}-latest.zip" | |
| aws s3 cp "$zipName" "s3://openfodder-builds/$zipName" --acl public-read | |
| - name: Discord notification | |
| if: always() && github.event_name == 'push' && github.ref == 'refs/heads/master' | |
| shell: pwsh | |
| env: | |
| DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }} | |
| run: | | |
| if ([string]::IsNullOrWhiteSpace($env:DISCORD_WEBHOOK_URL)) { exit 0 } | |
| $status = if ("${{ job.status }}" -eq "success") { "Success" } else { "Failure" } | |
| $color = if ("${{ job.status }}" -eq "success") { 3066993 } else { 15158332 } | |
| $title = "OpenFodder Windows build $status (${{ matrix.arch }})" | |
| $runUrl = "${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" | |
| $artifactUrl = "https://s3.amazonaws.com/openfodder-builds/OpenFodder-${{ matrix.arch }}-${{ matrix.configuration }}-latest.zip" | |
| $event = Get-Content $env:GITHUB_EVENT_PATH -Raw | ConvertFrom-Json | |
| $commitMessage = $event.head_commit.message | |
| if (-not $commitMessage) { $commitMessage = $event.pull_request.title } | |
| if (-not $commitMessage) { $commitMessage = "N/A" } | |
| $payload = @{ | |
| username = "GitHub Actions" | |
| embeds = @( | |
| @{ | |
| title = $title | |
| url = $runUrl | |
| color = $color | |
| fields = @( | |
| @{ name = "Commit"; value = "${{ github.sha }}"; inline = $true } | |
| @{ name = "Branch"; value = "${{ github.ref_name }}"; inline = $true } | |
| @{ name = "Config"; value = "${{ matrix.configuration }}"; inline = $true } | |
| @{ name = "Commit Message"; value = $commitMessage; inline = $false } | |
| @{ name = "Download"; value = $artifactUrl; inline = $false } | |
| ) | |
| } | |
| ) | |
| } | ConvertTo-Json -Depth 5 | |
| Invoke-RestMethod -Method Post -Uri $env:DISCORD_WEBHOOK_URL -ContentType "application/json" -Body $payload |