Skip to content

Revert "ci: Fix Qt settings" #595

Revert "ci: Fix Qt settings"

Revert "ci: Fix Qt settings" #595

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/
INSTALLER_PROJECT_PATH: ./DyssolInstallers/Installer/
# 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: 3.3.1
ZLIB_VERSION: 1.3
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@v4
- name: Add MSBuild to PATH
uses: microsoft/setup-msbuild@v2
- name: Install Qt
uses: jurplel/install-qt-action@v4
with:
# Whether to cache Qt automatically.
cache: 'true'
# If cached, only install essential build tools and set environmental variables.
cache-key-prefix: 'cache-qt'
# 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@v4
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-x86-${{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@v4
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@v4
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@v4
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@v4
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.QT_ROOT_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@v4
with:
name: build-artifact
if-no-files-found: error
retention-days: 1
compression-level: 1
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@v4
- name: Add MSBuild to PATH
uses: microsoft/setup-msbuild@v2
- name: Download Build Artifact
uses: actions/download-artifact@v4
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
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Add MSBuild to PATH
uses: microsoft/setup-msbuild@v2
- 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@v4
with:
path: C:/Program Files/MiKTeX
key: ${{runner.os}}-MiKTeXCache-${{env.MIKTEX_VERSION}}
- name: Install MiKTeX
if: steps.cache-miktex.outputs.cache-hit != 'true'
run: choco install miktex.install --version ${{env.MIKTEX_VERSION}} -y
- name: Add MiKTeX to PATH
run: Add-Content $env:GITHUB_PATH "C:\Program Files\MiKTeX\miktex\bin\x64"
- name: Configure MiKTeX
run: |
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: 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}}
- name: Upload Docs Artifact
uses: actions/upload-artifact@v4
with:
name: docs-artifact
if-no-files-found: error
retention-days: 1
compression-level: 2
path: ${{github.workspace}}/install/windows
installer:
runs-on: windows-2019
needs: [build, docs]
if: github.ref == 'refs/heads/master'
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Get LocalAppData Directory
run: echo ("LOCALAPPDATA_DIR=" + $env:LOCALAPPDATA) >> $env:GITHUB_ENV
- name: Add MSBuild to PATH
uses: microsoft/setup-msbuild@v2
- name: Install Qt
uses: jurplel/install-qt-action@v4
with:
# Whether to cache Qt automatically.
cache: 'true'
# If cached, only install essential build tools and set environmental variables.
cache-key-prefix: 'cache-qt'
# 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@v4
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-x86-${{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@v4
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@v4
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@v4
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@v4
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: Download Docs Artifact
uses: actions/download-artifact@v4
with:
name: docs-artifact
path: ${{github.workspace}}/install/windows
- name: Build
working-directory: ${{github.workspace}}
env:
QtToolsPath: ${{env.QT_ROOT_DIR}}/../${{env.QT_VS_VERSION}}/bin
QtMsBuild: ${{github.workspace}}/ExternalLibraries/qtvsaddin/QtMsBuild
run: |
msbuild -maxCpuCount -verbosity:minimal -property:Configuration=Debug -property:Platform=${{env.BUILD_PLATFORM}} ${{env.SOLUTION_FILE_PATH}}/${{env.SOLUTION_FILE_NAME}}
msbuild -maxCpuCount -verbosity:minimal -property:Configuration=Release -property:Platform=${{env.BUILD_PLATFORM}} ${{env.SOLUTION_FILE_PATH}}/${{env.SOLUTION_FILE_NAME}}
- name: Build Installer
working-directory: ${{github.workspace}}
env:
QtToolsPath: ${{env.QT_ROOT_DIR}}/bin
QtMsBuild: ${{github.workspace}}/ExternalLibraries/qtvsaddin/QtMsBuild
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:QtInstallDir=${{github.workspace}}/ExternalLibraries/qt/Qt/${{env.QT_VERSION}}/${{env.QT_VS_VERSION}}/ -property:InstallerDocumentation=true -property:InstallerSDK=true -property:InstallerSDKLibs=Sources -property:InstallerPreBuild=false -property:InstallerPreDocs=false ${{env.INSTALLER_PROJECT_PATH}}
- name: Run Installer
shell: pwsh
run: |
$InstallerFile = Resolve-Path "${{github.workspace}}\DyssolInstallers\Installers\Dyssol*.exe"
Start-Process -FilePath $InstallerFile -ArgumentList "/SP- /SILENT /SUPPRESSMSGBOXES /CURRENTUSER" -Wait
- name: Upload Installer Artifact
uses: actions/upload-artifact@v4
with:
name: installer-artifact
if-no-files-found: error
retention-days: 7
compression-level: 0
path: ${{github.workspace}}/DyssolInstallers/Installers/*.exe
- name: Upload Portable Installer Artifact
uses: actions/upload-artifact@v4
with:
name: portable-installer-artifact
if-no-files-found: error
retention-days: 7
compression-level: 9
path: ${{ env.LOCALAPPDATA_DIR }}/Programs/Dyssol
- name: Uninstall Dyssol
shell: pwsh
run: |
$UnInstallerFile = Resolve-Path "${{ env.LOCALAPPDATA_DIR }}/Programs/Dyssol/unins000.exe"
Start-Process -FilePath $UnInstallerFile -ArgumentList "/VERYSILENT /SUPPRESSMSGBOXES /NORESTART /skipaskconfig=yes" -Wait
release:
runs-on: windows-2019
needs: [tests, installer]
if: startsWith(github.ref, 'refs/tags/v')
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Download Installer Artifact
uses: actions/download-artifact@v4
with:
name: installer-artifact
path: ${{github.workspace}}/DyssolInstallers/Installers/
- name: Download Portable Installer Artifact
uses: actions/download-artifact@v4
with:
name: portable-installer-artifact
path: C:/Program Files/Dyssol
- name: Get Version
id: get-version
shell: pwsh
run: |
$TAG='${{github.ref_name}}'
$VERSION=$TAG.TrimStart('v')
echo "VERSION=$VERSION" >> $env:GITHUB_OUTPUT
- name: Rename Installer
working-directory: ${{github.workspace}}/DyssolInstallers/Installers/
shell: pwsh
run: |
Get-ChildItem -Path "." | Rename-Item -NewName "Dyssol.${{steps.get-version.outputs.VERSION}}.open.setup.exe"
Move-Item -Path "Dyssol.${{steps.get-version.outputs.VERSION}}.open.setup.exe" -Destination "${{github.workspace}}/Dyssol.${{steps.get-version.outputs.VERSION}}.open.setup.exe"
- name: Zip Portable Installer
shell: pwsh
run: |
Compress-Archive -Path 'C:/Program Files/Dyssol' -DestinationPath ${{github.workspace}}/Dyssol.${{steps.get-version.outputs.VERSION}}.open.portable.zip
- name: Release
uses: softprops/action-gh-release@v2
with:
name: 'Dyssol ${{github.ref_name}}'
draft: 'true'
body_path: CHANGELOG
files: |
Dyssol.${{steps.get-version.outputs.VERSION}}.open.setup.exe
Dyssol.${{steps.get-version.outputs.VERSION}}.open.portable.zip
cleanup:
runs-on: windows-2019
needs: [tests, installer, release]
if: ${{always()}}
steps:
- name: Delete Build Artifact
uses: geekyeggo/delete-artifact@v4
with:
name: build-artifact
failOnError: false
- name: Delete Docs Artifact
uses: geekyeggo/delete-artifact@v4
with:
name: docs-artifact
failOnError: false