Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
3d94fe6
[BUILD] Import shared build infrastructure from OpenMS@501f790 unchanged
claude Nov 7, 2026
1a1fe77
[BUILD] Standalone build of the GUI layer against an installed OpenMS
claude Nov 7, 2026
ab27a43
[WIP] Tests and documentation of the standalone GUI layer (in progress)
claude Nov 7, 2026
e91ec7f
[DOC] Documentation and repository files of OpenMS-TOPP-GUI
claude Nov 7, 2026
6df079f
[BUILD] GUI-only installers on top of the OpenMS installation
claude Nov 7, 2026
132f58d
[BUILD] CI of OpenMS-TOPP-GUI
claude Nov 7, 2026
40c1554
[FIX] Windows Qt deployment, silent installs, macOS smoke test, README
claude Nov 7, 2026
e365c52
[FIX] CI: short vcpkg build tree root for the core build on Windows
claude Nov 7, 2026
e85400a
[FIX] Review findings: signing errors, version rule, test environment
claude Nov 7, 2026
13e1273
[FIX] CI: install libomp for the clang build
claude Nov 7, 2026
ae4809b
[FIX] Installed-consumer test: forward OpenMP_ROOT to the consumer
claude Nov 7, 2026
dbbae6a
[FIX] CI: build the core from the companion OpenMS branch until it is…
claude Nov 7, 2026
b5eed96
[BUILD] Port the GUI parts of OpenMS/OpenMS#10842 (batched unity build)
claude Nov 7, 2026
bb0374a
[INTERNAL] Unique names for the compile checks of the annotation items
claude Nov 9, 2026
30679f3
[BUILD] CI: build the core from OpenMS develop again
claude Nov 9, 2026
6f78eb2
[FIX] CI: drop the cached cores from before the split (cache key v2)
claude Nov 9, 2026
dd2998d
[FIX] GUI style sheet compiled in; allow reconfiguring against a pref…
claude Nov 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
80 changes: 80 additions & 0 deletions .clang-format
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
---
BasedOnStyle: LLVM
AccessModifierOffset: '-2'
AlignAfterOpenBracket: Align
AlignConsecutiveAssignments: 'false'
AlignConsecutiveDeclarations: 'false'
AlignEscapedNewlines: Left
AlignOperands: 'true'
AlignTrailingComments: 'true'
AllowAllArgumentsOnNextLine: 'true'
AllowAllConstructorInitializersOnNextLine: 'false'
AllowAllParametersOfDeclarationOnNextLine: 'false'
AllowShortBlocksOnASingleLine: 'true'
AllowShortCaseLabelsOnASingleLine: 'false'
AllowShortFunctionsOnASingleLine: None
AllowShortIfStatementsOnASingleLine: Always
AllowShortLambdasOnASingleLine: All
AllowShortLoopsOnASingleLine: 'false'
AlwaysBreakAfterReturnType: None
AlwaysBreakBeforeMultilineStrings: 'false'
AlwaysBreakTemplateDeclarations: 'Yes'
BinPackArguments: 'true'
BinPackParameters: 'false'
BreakBeforeBinaryOperators: All
BraceWrapping:
AfterClass: true
AfterControlStatement: true
AfterEnum: true
AfterFunction: true
AfterNamespace: true
AfterObjCDeclaration: true
AfterStruct: true
AfterUnion: true
BeforeCatch: true
BeforeElse: true
IndentBraces: false
BreakBeforeBraces: Custom
BreakBeforeTernaryOperators: 'true'
BreakConstructorInitializers: AfterColon
BreakInheritanceList: AfterColon
BreakStringLiterals: 'true'
ColumnLimit: '150'
CompactNamespaces: 'false'
ConstructorInitializerAllOnOneLineOrOnePerLine: 'true'
ContinuationIndentWidth: '2'
DerivePointerAlignment: 'false'
DisableFormat: 'false'
FixNamespaceComments: 'true'
IncludeBlocks: Regroup
IndentCaseLabels: 'true'
IndentPPDirectives: BeforeHash
IndentWidth: '2'
IndentWrappedFunctionNames: 'false'
KeepEmptyLinesAtTheStartOfBlocks: 'true'
Language: Cpp
MaxEmptyLinesToKeep: '2'
NamespaceIndentation: Inner
PointerAlignment: Left
SortIncludes: 'true'
SortUsingDeclarations: 'true'
SpaceAfterLogicalNot: 'true'
SpaceAfterTemplateKeyword: 'false'
SpaceBeforeAssignmentOperators: 'true'
SpaceBeforeCpp11BracedList: 'true'
SpaceBeforeCtorInitializerColon: 'false'
SpaceBeforeInheritanceColon: 'true'
SpaceBeforeParens: ControlStatements
SpaceBeforeRangeBasedForLoopColon: 'true'
SpaceInEmptyParentheses: 'false'
SpacesBeforeTrailingComments: '1'
SpacesInAngles: 'false'
SpacesInCStyleCastParentheses: 'false'
SpacesInContainerLiterals: 'false'
SpacesInParentheses: 'false'
SpacesInSquareBrackets: 'false'
Standard: Cpp11
TabWidth: '2'
UseTab: Never

...
3 changes: 3 additions & 0 deletions .git_archival.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
node: $Format:%H$
node-date: $Format:%cI$
describe-name: $Format:%(describe:tags=true,abbrev=40,match=v[0-9]*,exclude=v*[!0-9.]*)$
24 changes: 24 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Set the default behavior, in case people don't have core.autocrlf set.
# Force UNIX line endings, so you can use the same repo e.g., on Win and WSL
* text=auto eol=lf
# batch files specifically need to have CRLF (win endings)
*.{cmd,[cC][mM][dD]} text eol=crlf
*.{bat,[bB][aA][tT]} text eol=crlf

# Denote all files that are truly binary and should not be modified.
# Images
*.png binary
*.jpg binary
# XML files with potential byte-counting indices that will lose function
# if the windows CR byte is added
*.mzML binary
*.mzXML binary
# reference images of the ImageCreator tests, application icons, the UTF-16 registry file in tools/
*.bmp binary
*.ico binary
*.icns binary
*.reg binary

# git archive fills in the commit and its release tag, so that a build from an archive (the
# Release workflow's source tarball, GitHub's source archives) knows its version (CMakeLists.txt).
.git_archival.txt export-subst
270 changes: 270 additions & 0 deletions .github/actions/build/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,270 @@
name: "Build OpenMS-TOPP-GUI"
description: >-
Configures, builds and tests the GUI layer with the CI preset of the runner
against an OpenMS core (see the openms-core action), with ccache.
inputs:
compiler:
description: "The name of the compiler to use (cl.exe, xcode, g++, clang++)"
required: true
prefix_path:
description: "CMAKE_PREFIX_PATH: the OpenMS core and Qt (';'-separated)"
required: true
topp_bin_dir:
description: "OPENMS_TOPP_BIN_DIR: the TOPP tools of the core (FuzzyDiff, ...)"
required: false
default: ""
examples_dir:
description: "OPENMS_EXAMPLES_DIR: the example data of the core (TOPPAS workflows)"
required: false
default: ""
core_version_fullstring:
description: "OPENMS_CORE_VERSION_FULLSTRING: the full version string of the core"
required: false
default: ""
preset:
description: >-
The CMake preset to configure, build and test with. By default the CI preset
of the runner (linux-x64-ci, macos-arm64-ci, windows-x64-ci, ...).
required: false
default: ""
run_tests:
description: "Whether to run the test suite after the build (ctest --preset)"
required: false
default: "true"
cmake_args:
description: "Further arguments for the configure step (one per line)"
required: false
default: ""
macosx_deployment_target:
description: >-
The oldest macOS the binaries run on (-mmacosx-version-min). Keep it at the
runner's macOS, as for OpenMS: the Homebrew Qt the package bundles is built
for that version.
default: "15.0"
outputs:
version:
description: "The discovered compiler version number"
value: ${{ steps.compiler.outputs.ver }}
preset:
description: "The resolved CMake preset name"
value: ${{ steps.preset.outputs.name }}
runs:
using: "composite"
steps:

############################################################################
# NOTE: x64 is hardcoded. No support for 32bit.
# Skipped when the openms-core action has set up the environment already
# (VCINSTALLDIR): vcvars run twice can make PATH too long for cmd.
- name: Emulate a Visual Studio shell (Windows)
if: ${{ runner.os == 'Windows' && env.VCINSTALLDIR == '' }}
uses: egor-tensin/vs-shell@v2
with: { arch: x64 }

############################################################################
- name: Compute the Compiler Version
id: compiler
env:
compiler: ${{ inputs.compiler }}
shell: bash
run: |
case ${compiler:-gcc} in
clang*)
ver=$(clang -dumpversion)
name=$(type -p clang++)
cc_name=$(type -p clang)
;;

cl*)
ver=$(cl.exe 2>&1 |
grep -E 'Version [0-9.]+' |
sed -E 's/^.* Version ([0-9.]+) .*$/\1/')
name=$compiler
cc_name=$compiler
;;

gcc | g++)
ver=$(gcc -dumpversion)
name=$(type -p g++)
cc_name=$(type -p gcc)
;;

xcode)
ver=$(clang -dumpversion)
name=$(xcrun -f clang++)
cc_name=$(xcrun -f clang)
;;

*)
ver="0.0"
name=$compiler
cc_name=$compiler
;;
esac

major=$(cut -d. -f1 <<<"$ver")

{
echo "ver=$ver"
echo "major=$major"
echo "name=$name"
} >>"$GITHUB_OUTPUT"

{
# All remaining steps should use this compiler.
echo "CXX=$name"
echo "CC=$cc_name"
} >>"$GITHUB_ENV"

############################################################################
# The tests and the documentation run the GUI applications, which then need
# no display (src/tests sets it per test as well).
- name: Set CI-specific Environment Variables
shell: bash
run: echo "QT_QPA_PLATFORM=offscreen" >>"$GITHUB_ENV"

############################################################################
# This is only really needed so we can set cache keys.
- name: Extract the PR Number or Branch Name
id: pr
shell: bash
run: echo "name=${{ github.event.pull_request && github.event.number || github.ref_name }}" >>"$GITHUB_OUTPUT"

############################################################################
# Restore and save are separate steps so that every run saves a fresh cache
# (under a key unique to the run) while the restore-keys ladder finds the
# newest one: of the branch or pull request, else of develop (the default
# branch, whose caches every pull request can read), else any in scope.
- name: Try to Fetch Existing Build Cache
id: ccache-restore
uses: actions/cache/restore@v5
with:
path: .ccache
key: ${{ runner.os }}-${{ runner.arch }}-${{ inputs.compiler }}-${{ steps.compiler.outputs.major }}-ccache-${{ steps.pr.outputs.name }}-${{ github.run_id }}-${{ github.run_attempt }}
restore-keys: |
${{ runner.os }}-${{ runner.arch }}-${{ inputs.compiler }}-${{ steps.compiler.outputs.major }}-ccache-${{ steps.pr.outputs.name }}-
${{ runner.os }}-${{ runner.arch }}-${{ inputs.compiler }}-${{ steps.compiler.outputs.major }}-ccache-develop-
${{ runner.os }}-${{ runner.arch }}-${{ inputs.compiler }}-${{ steps.compiler.outputs.major }}-ccache-

############################################################################
- name: Configure Build Caching
id: ccache-configure
shell: bash
env:
# MSVC objects are considerably larger than the gcc/clang ones
maxsize: ${{ runner.os == 'Windows' && '1G' || '500M' }}
run: |
mkdir -p "$GITHUB_WORKSPACE/.ccache"

{
echo "CCACHE_COMPRESS=true"
echo "CCACHE_COMPRESSLEVEL=6"
echo "CCACHE_DIR=$GITHUB_WORKSPACE/.ccache"
echo "CCACHE_MAXSIZE=$maxsize"
echo "CMAKE_C_COMPILER_LAUNCHER=ccache"
echo "CMAKE_CXX_COMPILER_LAUNCHER=ccache"
} >>"$GITHUB_ENV"

############################################################################
# Reset the hit/miss counters (not the cached objects) so the statistics
# printed after the build describe this run only.
- name: Reset ccache Statistics
id: ccache-reset
shell: bash
run: |
ccache --version
ccache --zero-stats

############################################################################
# The preset input, or else the CI preset of the runner.
- name: Resolve CMake presets
id: preset
shell: bash
env:
preset: ${{ inputs.preset }}
run: |
if [[ -n "$preset" ]]; then
echo "name=$preset" >> "$GITHUB_OUTPUT"
exit 0
fi
case "$RUNNER_OS-$RUNNER_ARCH" in
Linux-X64) preset=linux-x64-ci ;;
Linux-ARM64) preset=linux-arm64-ci ;;
macOS-ARM64) preset=macos-arm64-ci ;;
Windows-X64) preset=windows-x64-ci ;;
*)
echo >&2 "ERROR: no CI preset mapped for $RUNNER_OS-$RUNNER_ARCH"
exit 1
;;
esac
echo "name=$preset" >> "$GITHUB_OUTPUT"

############################################################################
- name: Build
id: build
shell: bash
env:
PRESET: ${{ steps.preset.outputs.name }}
PREFIX_PATH: ${{ inputs.prefix_path }}
TOPP_BIN_DIR: ${{ inputs.topp_bin_dir }}
EXAMPLES_DIR: ${{ inputs.examples_dir }}
CORE_VERSION_FULLSTRING: ${{ inputs.core_version_fullstring }}
CMAKE_ARGS: ${{ inputs.cmake_args }}
# Also sets LSMinimumSystemVersion of the GUI apps and the installer's minimum macOS.
MACOSX_DEPLOYMENT_TARGET: "${{ inputs.macosx_deployment_target }}"
run: |
set -euxo pipefail

options=(
"-DCMAKE_PREFIX_PATH=$PREFIX_PATH"
"-DCMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/install"
)
if [[ -n "$TOPP_BIN_DIR" ]]; then
options+=("-DOPENMS_TOPP_BIN_DIR=$TOPP_BIN_DIR")
fi
if [[ -n "$EXAMPLES_DIR" ]]; then
options+=("-DOPENMS_EXAMPLES_DIR=$EXAMPLES_DIR")
fi
if [[ -n "$CORE_VERSION_FULLSTRING" ]]; then
options+=("-DOPENMS_CORE_VERSION_FULLSTRING=$CORE_VERSION_FULLSTRING")
fi
while IFS= read -r arg; do
if [[ -n "$arg" ]]; then
options+=("$arg")
fi
done <<<"$CMAKE_ARGS"

cmake --preset "$PRESET" "${options[@]}"
cmake --build --preset "$PRESET"

- name: Verify public headers
if: ${{ runner.os == 'Linux' && runner.arch == 'X64' && inputs.preset == '' }}
shell: bash
run: cmake --build --preset "${{ steps.preset.outputs.name }}" --target all_verify_interface_header_sets

############################################################################
# Hit rate and cache size for this run. A diagnostic that must never decide
# the fate of the job (an older ccache without --verbose would otherwise skip
# the tests).
- name: Report ccache Statistics
if: ${{ !cancelled() && steps.ccache-configure.outcome == 'success' && steps.ccache-reset.outcome == 'success' }}
continue-on-error: true
shell: bash
run: ccache --show-stats --verbose

############################################################################
- name: Test
if: ${{ inputs.run_tests == 'true' }}
shell: bash
run: ctest --preset "${{ steps.preset.outputs.name }}"

############################################################################
# Saved only when the build succeeded (a failed build would pin a partial
# cache as the newest of the branch); test failures still save.
- name: Save Build Cache
if: ${{ !cancelled() && steps.build.outcome == 'success' }}
uses: actions/cache/save@v5
with:
path: .ccache
# Reuse the restore step's primary key so the two can never drift apart.
key: ${{ steps.ccache-restore.outputs.cache-primary-key }}
Loading
Loading