Skip to content

ci: Windows build fix #445

ci: Windows build fix

ci: Windows build fix #445

Workflow file for this run

# Copyright (c) 2023, DyssolTEC. All rights reserved. This file is part of Dyssol. See LICENSE file for license information.
# A workflow for testing on Windows
name: Windows
on: [push]
env:
# Path to the solution/project files relative to the root of the project.
SOLUTION_FILE_PATH: .
SOLUTION_FILE_NAME: Dyssol.sln
TESTS_PROJECT_PATH: ./DyssolInstallers/Tests/
DOCS_PROJECT_PATH: ./DyssolInstallers/Documentation/
# Configuration type to build.
BUILD_CONFIGURATION: Release
BUILD_PLATFORM: x64
# Versions.
QT_VERSION: 5.15.2
QT_VS_VERSION: msvc2019_64
QT_VS_ADDIN_VERSION: 2.7.2
ZLIB_VERSION: 1.2.13
SUNDIALS_VERSION: 6.4.1
HDF5_VERSION: 1.12.2
GRAPHVIZ_VERSION: 7.0.4
MIKTEX_VERSION: 23.5
jobs:
build:
runs-on: windows-2019
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Add MSBuild to PATH
uses: microsoft/setup-msbuild@v1
- name: Cache Qt
id: cache-qt
uses: actions/cache@v3
with:
path: ${{github.workspace}}/ExternalLibraries/qt
key: ${{runner.os}}-QtCache-${{env.QT_VERSION}}
- name: Install Qt
uses: jurplel/install-qt-action@v3
with:
# If cached, only install essential build tools and set environmental variables.
cache: ${{steps.cache-qt.outputs.cache-hit}}
# Version of Qt to install.
version: ${{env.QT_VERSION}}
# Architecture.
arch: win64_${{env.QT_VS_VERSION}}
# Directory to install.
dir: ${{github.workspace}}/ExternalLibraries/qt
# Whether or not to automatically run setup-python to find a valid python version.
setup-python: 'false'
- name: Cache QtMsBuild tools
id: cache-qt-ms-build-tools
uses: actions/cache@v3
with:
path: ${{github.workspace}}/ExternalLibraries/qtvsaddin
key: ${{runner.os}}-QtMsBuildCache-${{env.QT_VS_ADDIN_VERSION}}
- name: Get QtMsBuild tools
if: steps.cache-qt-ms-build-tools.outputs.cache-hit != 'true'
working-directory: ${{github.workspace}}
# Get additional project files to build Qt solution with MSBuild. This work is usually done in Visual Studio with Qt VS Tools extension.
# Also, it installs them to %LOCALAPPDATA%\QtMsBuild, so they can not be used by other Windows users.
# Download the extension and extract requited files to the project directory.
run: |
Invoke-WebRequest -Uri https://ftp.fau.de/qtproject/archive/vsaddin/${{env.QT_VS_ADDIN_VERSION}}/qt-vsaddin-msvc2019-${{env.QT_VS_ADDIN_VERSION}}.vsix -MaximumRetryCount 10 -RetryIntervalSec 30 -OutFile vspackage.vsix
Expand-Archive vspackage.vsix -DestinationPath ${{github.workspace}}/ExternalLibraries/qtvsaddin
- name: Cache ZLib
id: cache-zlib
uses: actions/cache@v3
with:
path: ${{github.workspace}}/ExternalLibraries/zlib
key: ${{runner.os}}-ZLibCache-${{env.ZLIB_VERSION}}
- name: Build ZLib
if: steps.cache-zlib.outputs.cache-hit != 'true'
working-directory: ${{github.workspace}}/ExternalLibraries
shell: pwsh
# Run the script to build zlib.
run: .\CompileZLib.ps1
- name: Cache SUNDIALS
id: cache-sundials
uses: actions/cache@v3
with:
path: ${{github.workspace}}/ExternalLibraries/sundials
key: ${{runner.os}}-SundialsCache-${{env.SUNDIALS_VERSION}}
- name: Build SUNDIALS
if: steps.cache-sundials.outputs.cache-hit != 'true'
working-directory: ${{github.workspace}}/ExternalLibraries
shell: pwsh
# Run the script to build sundials.
run: .\CompileSundials.ps1
- name: Cache HDF5
id: cache-hdf5
uses: actions/cache@v3
with:
path: ${{github.workspace}}/ExternalLibraries/hdf5
key: ${{runner.os}}-Hdf5Cache-${{env.HDF5_VERSION}}
- name: Build HDF5
if: steps.cache-hdf5.outputs.cache-hit != 'true'
working-directory: ${{github.workspace}}/ExternalLibraries
shell: pwsh
# Run the script to build hdf5.
run: .\CompileHDF5.ps1
- name: Cache Graphviz
id: cache-graphviz
uses: actions/cache@v3
with:
path: ${{github.workspace}}/ExternalLibraries/graphviz
key: ${{runner.os}}-GraphvizCache-${{env.GRAPHVIZ_VERSION}}
- name: Build Graphviz
if: steps.cache-graphviz.outputs.cache-hit != 'true'
working-directory: ${{github.workspace}}/ExternalLibraries
shell: pwsh
# Run the script to build graphviz.
run: .\CompileGraphviz.ps1
- name: Build
working-directory: ${{github.workspace}}
env:
QtToolsPath: ${{env.Qt5_DIR}}/bin
QtMsBuild: ${{github.workspace}}/ExternalLibraries/qtvsaddin/QtMsBuild
# Add additional options to the MSBuild command line here: see https://docs.microsoft.com/visualstudio/msbuild/msbuild-command-line-reference.
run: msbuild -maxCpuCount -verbosity:minimal -property:Configuration=${{env.BUILD_CONFIGURATION}} -property:Platform=${{env.BUILD_PLATFORM}} ${{env.SOLUTION_FILE_PATH}}/${{env.SOLUTION_FILE_NAME}}
- name: Upload Build Artifact
uses: actions/upload-artifact@v3
with:
name: build-artifact
path: |
${{github.workspace}}/${{env.BUILD_PLATFORM}}/${{env.BUILD_CONFIGURATION}}/*.exe
${{github.workspace}}/${{env.BUILD_PLATFORM}}/${{env.BUILD_CONFIGURATION}}/*.dll
tests:
runs-on: windows-2019
needs: build
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Add MSBuild to PATH
uses: microsoft/setup-msbuild@v1
- name: Download Build Artifact
uses: actions/download-artifact@v3
with:
name: build-artifact
path: ${{github.workspace}}/${{env.BUILD_PLATFORM}}/${{env.BUILD_CONFIGURATION}}
- name: Run Tests
working-directory: ${{github.workspace}}
# Add additional options to the MSBuild command line here: see https://docs.microsoft.com/visualstudio/msbuild/msbuild-command-line-reference.
run: msbuild -maxCpuCount -verbosity:minimal -property:Configuration=${{env.BUILD_CONFIGURATION}} -property:Platform=${{env.BUILD_PLATFORM}} -property:SolutionDir=${{github.workspace}}/ -property:SolutionPath=${{github.workspace}}/${{env.SOLUTION_FILE_NAME}} -property:TestsPreBuild=false ${{env.TESTS_PROJECT_PATH}}
docs:
runs-on: windows-2019
needs: build
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Add MSBuild to PATH
uses: microsoft/setup-msbuild@v1
- name: Install Graphviz
run: choco install graphviz
- name: Install Doxygen
run: choco install doxygen.install
- name: Install Sphinx
run: pip install -U sphinx sphinx-rtd-theme breathe
- name: Cache MiKTeX
id: cache-miktex
uses: actions/cache@v3
with:
path: C:/Program Files/MiKTeX
key: ${{runner.os}}-MiKTeXCache-${{env.MIKTEX_VERSION}}
- name: Install MiKTeX
if: steps.cache-miktex.outputs.cache-hit != 'true'
shell: pwsh
run: |
choco install miktex.install --version ${{env.MIKTEX_VERSION}} -y
& 'C:\Program Files\MiKTeX\miktex\bin\x64\latex' --version
latex --version
echo "C:\Program Files\MiKTeX\miktex\bin\x64" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
latex --version
Add-Content $env:GITHUB_PATH "C:\Program Files\MiKTeX\miktex\bin\x64"
latex --version
initexmf --admin --verbose --set-config-value=[MPM]AutoInstall=1
miktex --admin --verbose packages update-package-database
miktex --admin --verbose packages update
miktex --admin --verbose packages install amscls, anyfontsize, preview, zhmetrics
miktex --admin --verbose fndb refresh
initexmf --admin --verbose --update-fndb
initexmf --admin --verbose --mklinks --force
updmap --admin
- name: Add MiKTeX to PATH
shell: pwsh
run: Add-Content $env:GITHUB_PATH "C:\Program Files\MiKTeX\miktex\bin\x64"
- name: Build Docs
working-directory: ${{github.workspace}}
# Add additional options to the MSBuild command line here: see https://docs.microsoft.com/visualstudio/msbuild/msbuild-command-line-reference.
run: msbuild -maxCpuCount -verbosity:minimal -property:Configuration=${{env.BUILD_CONFIGURATION}} -property:Platform=${{env.BUILD_PLATFORM}} -property:SolutionDir=${{github.workspace}}/ ${{env.DOCS_PROJECT_PATH}}
cleanup:
runs-on: windows-2019
needs: [build, tests]
if: ${{always()}}
steps:
- name: Delete Build Artifact
uses: geekyeggo/delete-artifact@v2
with:
name: build-artifact
failOnError: false