[pull] main from dosbox-staging:main #396
This file contains 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 MSVC builds | |
on: | |
push: | |
paths-ignore: | |
- '.clang-format' | |
- '.mdl-styles' | |
- '*.md' | |
- 'docs/**' | |
- 'licenses/**' | |
- 'website/**' | |
pull_request: | |
paths-ignore: | |
- '.clang-format' | |
- '.mdl-styles' | |
- '*.md' | |
- 'docs/**' | |
- 'licenses/**' | |
- 'website/**' | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
env: | |
VCPKG_ROOT: C:\vcpkg | |
VCPKG_BINARY_SOURCES: "clear;x-gha,readwrite" | |
jobs: | |
build_windows_vs: | |
name: ${{ matrix.conf.name }} | |
runs-on: windows-2022 | |
if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository | |
strategy: | |
matrix: | |
conf: | |
- name: MS Clang/LLVM (x64) | |
arch: x64 | |
max_warnings: 30 | |
steps: | |
- name: Check out repository | |
uses: actions/checkout@v4 | |
with: | |
submodules: false | |
- name: Checkout vcpkg baseline | |
shell: pwsh | |
run: | | |
$baseline = (Get-Content vcpkg.json | ConvertFrom-Json).'builtin-baseline' | |
cd $env:VCPKG_INSTALLATION_ROOT | |
git fetch | |
rm vcpkg.exe | |
git -c advice.detachedHead=false checkout $baseline | |
bootstrap-vcpkg.bat -disableMetrics | |
- name: Export GitHub Actions cache environment variables | |
uses: actions/github-script@v7 | |
with: | |
script: | | |
core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || ''); | |
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || ''); | |
- name: Setup CMake | |
uses: lukka/[email protected] | |
- name: Add MSBuild to PATH | |
uses: microsoft/setup-msbuild@v2 | |
with: | |
vs-prerelease: true | |
msbuild-architecture: ${{ matrix.conf.arch }} | |
- name: Integrate packages | |
shell: pwsh | |
run: | | |
${{ env.VCPKG_ROOT }}\vcpkg.exe integrate install | |
if (-not $?) { throw "vcpkg failed to integrate packages" } | |
- name: Log environment | |
shell: pwsh | |
run: .\scripts\log-env.ps1 | |
- name: Run tests | |
shell: pwsh | |
run: | | |
cd vs | |
MSBuild -m dosbox.sln -t:tests:Rebuild -p:Configuration=Debug -p:Platform=${{ matrix.conf.arch }} | |
- name: Build | |
shell: pwsh | |
run: | | |
cd vs | |
MSBuild -m dosbox.sln -t:dosbox:Rebuild -p:Configuration=Debug -p:Platform=${{ matrix.conf.arch }} | Tee-Object build.log | |
- name: Print VCPKG error log | |
if: failure() | |
shell: pwsh | |
run: Get-Content -Path vcpkg_installed/${{ matrix.conf.arch }}-windows/vcpkg/issue_body.md | |
- name: Summarize warnings | |
shell: pwsh | |
env: | |
MAX_WARNINGS: ${{ matrix.conf.max_warnings }} | |
run: python scripts\count-warnings.py -f --msclang vs\build.log | |
build_windows_vs_release: | |
name: Release ${{ matrix.debugger && 'w/ debugger' || '' }} (${{ matrix.arch }}) | |
if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository | |
outputs: | |
dosbox_version: ${{ steps.set_vars.outputs.dosbox_version }} | |
runs-on: windows-2022 | |
strategy: | |
matrix: | |
arch: [x64, ARM64] | |
debugger: [false, true] | |
steps: | |
- name: Check out repository | |
uses: actions/checkout@v4 | |
with: | |
submodules: false | |
- name: Checkout vcpkg baseline | |
shell: pwsh | |
run: | | |
$baseline = (Get-Content vcpkg.json | ConvertFrom-Json).'builtin-baseline' | |
cd $env:VCPKG_INSTALLATION_ROOT | |
git fetch | |
rm vcpkg.exe | |
git -c advice.detachedHead=false checkout $baseline | |
bootstrap-vcpkg.bat -disableMetrics | |
- name: Export GitHub Actions cache environment variables | |
uses: actions/github-script@v7 | |
with: | |
script: | | |
core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || ''); | |
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || ''); | |
- name: Setup CMake | |
uses: lukka/[email protected] | |
- name: Add MSBuild to PATH | |
uses: microsoft/setup-msbuild@v2 | |
with: | |
vs-prerelease: true | |
msbuild-architecture: ${{ matrix.arch }} | |
- name: Integrate packages | |
shell: pwsh | |
run: | | |
${{ env.VCPKG_ROOT }}\vcpkg.exe integrate install | |
if (-not $?) { throw "vcpkg failed to integrate packages" } | |
- name: Log environment | |
shell: pwsh | |
run: .\scripts\log-env.ps1 | |
- name: Set variables | |
id: set_vars | |
shell: bash | |
run: | | |
set -x | |
echo "build_dir=vs/${{ matrix.arch }}/Release" >> $GITHUB_OUTPUT | |
VERSION=$(./scripts/get-version.sh version-and-hash) | |
echo "pkg_dir=dosbox-staging-windows-${{ matrix.arch }}-${VERSION}" >> $GITHUB_OUTPUT | |
echo "dosbox_version=${VERSION}" >> $GITHUB_OUTPUT | |
- name: Set the Git hash in config.h | |
shell: bash | |
run: | | |
set -x | |
GIT_HASH=$(./scripts/get-version.sh hash) | |
sed -i "s|BUILD_GIT_HASH \"git\"|BUILD_GIT_HASH \"$GIT_HASH\"|" src/platform/visualc/config.h | |
- name: Enable the debugger in config.h | |
if: ${{ matrix.debugger }} | |
shell: bash | |
run: | | |
set -x | |
sed -i "s|C_DEBUG.*|C_DEBUG 1|" src/platform/visualc/config.h | |
sed -i "s|C_HEAVY_DEBUG.*|C_HEAVY_DEBUG 1|" src/platform/visualc/config.h | |
- name: Build release | |
shell: pwsh | |
run: | | |
cd vs | |
MSBuild -m dosbox.sln -t:dosbox:Rebuild -p:Configuration=Release -p:Platform=${{ matrix.arch }} | |
- name: Print VCPKG error log | |
if: failure() | |
shell: pwsh | |
run: Get-Content -Path vcpkg_installed/${{ matrix.conf.arch }}-windows/vcpkg/issue_body.md | |
- name: Package standard build | |
if: ${{ !matrix.debugger }} | |
shell: bash | |
run: | | |
set -x | |
# Construct VC_REDIST_DIR | |
readonly VC_REDIST_BASE="C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Redist/MSVC" | |
readonly VC_REDIST_CRT_VERSION="Microsoft.VC143.CRT" | |
for ENTRY in "$VC_REDIST_BASE"/* | |
do | |
ENTRY=$ENTRY/${{ matrix.arch }}/$VC_REDIST_CRT_VERSION | |
if [ -d "$ENTRY" ]; then | |
export VC_REDIST_DIR=$ENTRY | |
break | |
fi | |
done | |
if [ ! -d "$VC_REDIST_DIR" ]; then | |
echo "Failed to find MSVC Redistributable" | |
exit 1 | |
fi | |
# Package | |
./scripts/create-package.sh \ | |
-p msvc \ | |
${{ steps.set_vars.outputs.build_dir }} \ | |
${{ steps.set_vars.outputs.pkg_dir }} | |
- name: Upload package | |
if: ${{ !matrix.debugger }} | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ steps.set_vars.outputs.pkg_dir }}-without-debugger | |
path: ${{ steps.set_vars.outputs.pkg_dir }} | |
overwrite: true | |
- name: Package the debugger build | |
if: ${{ matrix.debugger }} | |
shell: bash | |
run: | | |
set -x | |
mkdir -p ${{ steps.set_vars.outputs.pkg_dir }} | |
# Move the debugger build into the release area | |
ls ${{ steps.set_vars.outputs.build_dir }} | |
cp ${{ steps.set_vars.outputs.build_dir }}/dosbox.exe ${{ steps.set_vars.outputs.pkg_dir }}/dosbox_with_debugger.exe | |
- name: Upload debugger artifact | |
if: ${{ matrix.debugger }} | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ steps.set_vars.outputs.pkg_dir }}-with-debugger | |
path: ${{ steps.set_vars.outputs.pkg_dir }}/dosbox_with_debugger.exe | |
overwrite: true | |
merge_artifacts: | |
name: Merge release & debugger artifacts (${{ matrix.arch }} ) | |
needs: build_windows_vs_release | |
outputs: | |
dosbox_version: ${{ needs.build_windows_vs_release.outputs.dosbox_version }} | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
arch: [x64, ARM64] | |
steps: | |
- name: Merge artifacts (${{ matrix.arch }} ) | |
uses: actions/upload-artifact/merge@v4 | |
with: | |
name: dosbox-staging-windows-${{ matrix.arch }}-${{ needs.build_windows_vs_release.outputs.dosbox_version }} | |
pattern: dosbox-staging-windows-${{ matrix.arch }}-* | |
delete-merged: 'true' | |
build_installer: | |
name: Build installer (${{ matrix.arch }} ) | |
needs: merge_artifacts | |
runs-on: windows-2022 | |
strategy: | |
matrix: | |
# We only provide x64 installers as ARM64 support is experimental | |
arch: [x64] | |
steps: | |
- name: Check out repository | |
uses: actions/checkout@v4 | |
with: | |
submodules: false | |
- name: Download artifacts | |
uses: actions/download-artifact@v4 | |
- name: Set variables | |
id: set_vars | |
shell: bash | |
run: | | |
set -x | |
VERSION=${{ needs.merge_artifacts.outputs.dosbox_version }} | |
echo "pkg_dir=dosbox-staging-windows-${{ matrix.arch }}-${VERSION}" >> $GITHUB_OUTPUT | |
- name: Prepare Windows installer | |
shell: bash | |
run: | | |
set -x | |
VERSION=${{ needs.merge_artifacts.outputs.dosbox_version }} | |
PACKAGE_INFO="release ${VERSION}" | |
mkdir -p out/program | |
sed -e "s|%PACKAGE_INFORMATION%|${PACKAGE_INFO}|;s|%GITHUB_REPO%|${{ github.repository }}|" docs/README.template >out/setup_preamble.txt | |
sed -i "s|DOSBOX-STAGING-VERSION|${VERSION}|" contrib/windows_installer/DOSBox-Staging-setup.iss | |
cp contrib/windows_installer/* out | |
cp contrib/icons/windows/dosbox-staging.ico out | |
cp contrib/icons/windows/dosbox-staging.bmp out | |
cp contrib/icons/windows/dosbox-staging-side.bmp out | |
mv ${{ steps.set_vars.outputs.pkg_dir }}/* out/program | |
mv out/program/dosbox*.exe out | |
- name: Build Windows installer | |
shell: pwsh | |
run: | | |
cd out | |
C:\PROGRA~2\INNOSE~1\ISCC.exe DOSBox-Staging-setup.iss | |
dir | |
- name: Upload Windows installer | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ steps.set_vars.outputs.pkg_dir }}-setup | |
path: ${{ github.workspace }}\out\${{ steps.set_vars.outputs.pkg_dir }}-setup.exe | |
overwrite: true |