Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
87 commits
Select commit Hold shift + click to select a range
d5c2cec
3.5.16
oliviermattelaer Jul 3, 2026
fca8704
Fix histogram uncertainty and CLI handling
rikkert-frederix Aug 23, 2026
96cebaf
Add Matplotlib histogram output mode
rikkert-frederix Aug 23, 2026
e3e930b
Declare virtgranny_red as external
rikkert-frederix Aug 23, 2026
29a199d
Keep Matplotlib histogram y-axis logarithmic
rikkert-frederix Aug 23, 2026
2c66015
Scale histogram aggregation and plotting
rikkert-frederix Aug 23, 2026
a531ae0
Harden histogram streaming and output
rikkert-frederix Aug 23, 2026
23fda81
Add Matplotlib fallback for HwU plots
rikkert-frederix Aug 28, 2026
c76a8e9
Add standalone HTML output for HwU plots
rikkert-frederix Aug 28, 2026
fb9cbb5
MG5: refuse the propagator-only braces {G},{H},{Q},{W},{S} on an exte…
oliviermattelaer Aug 31, 2026
2cd7691
Merge pull request #393 from mg5amcnlo/claude/mg5-propagator-pol-veto…
oliviermattelaer Aug 31, 2026
a097231
Merge pull request #385 from mg5amcnlo/feature/matplotlib-histograms-…
oliviermattelaer Sep 1, 2026
730a48e
ready for release
oliviermattelaer Sep 1, 2026
5a92a25
MadSpin: fork every worker the max-weight scan can name as a channel …
oliviermattelaer Sep 1, 2026
5314432
Update madgraph_interface.py
ammelsayed Sep 2, 2026
153d5e8
Enhance diagram output with merge functionality
ammelsayed Sep 2, 2026
1847dfd
Fix example log messages for diagram display
ammelsayed Sep 2, 2026
552201b
added try except blog for txt file writing
ammelsayed Sep 2, 2026
514b258
Use absolute paths for EPS and output files
ammelsayed Sep 2, 2026
7e7d248
quoted shell command to open the merged PDF
ammelsayed Sep 2, 2026
a635248
Update file opening method for compatibility
ammelsayed Sep 2, 2026
026d5f8
Replace self.exec_cmd with subprocess.check_call
ammelsayed Sep 2, 2026
3fbb0cd
Implement output directory creation in madgraph_interface
ammelsayed Sep 2, 2026
fd606be
Merge branch '3.x' into 3.8.0
oliviermattelaer Sep 3, 2026
7bc4919
Merge remote-tracking branch 'origin/3.x' into 3.8.0
oliviermattelaer Sep 3, 2026
9bdc42a
Merge branch '3.8.0' into madspin_density
oliviermattelaer Sep 3, 2026
22d5542
MG5: give an offshell leg its trailing space in ProcessDefinition.nic…
oliviermattelaer Sep 3, 2026
64cf1df
Merge pull request #399 from mg5amcnlo/claude/ms-nicestring-offshell-…
oliviermattelaer Sep 3, 2026
08dc751
MadSpin: document the accepted pool-count mismatch and make it observ…
oliviermattelaer Sep 3, 2026
9389e8b
Fix option parsing and NLO handling of display diagrams[_text]
oliviermattelaer Sep 3, 2026
ecbfea2
Merge pull request #396 from mg5amcnlo/claude/ms-scan-phantom-owner
oliviermattelaer Sep 4, 2026
7fa4a06
CI: catch cache builds that fail silently, and split boost out of eMELA
oliviermattelaer Sep 4, 2026
9d45e04
CI: make the warm_cache reset_* dispatch inputs actually work
oliviermattelaer Sep 4, 2026
00db595
Merge pull request #400 from mg5amcnlo/claude/cache-creation-false-po…
oliviermattelaer Sep 4, 2026
1fbeb13
Merge pull request #288 from mg5amcnlo/madspin_density
oliviermattelaer Sep 4, 2026
6be5ab6
Merge pull request #398 from ammelsayed/3.x
oliviermattelaer Sep 5, 2026
4e3e05c
Merge branch 'mg5amcnlo:3.x' into 3.x
ammelsayed Sep 5, 2026
08cc600
Implement recovery for Delphes on Pythia8 splits
ammelsayed Sep 5, 2026
e655474
Implement recovery for Pythia8 split HEPMC files
ammelsayed Sep 5, 2026
8c9a48c
Do not inject vector.inc in NLO custom functions (bug #2147417)
oliviermattelaer Sep 7, 2026
97e5e6e
UpdateNotes: 3.8.0 entry for the NLO custom_fcts fix
oliviermattelaer Sep 7, 2026
c3c9159
UpdateNotes: keep the 3.8.0 date as a placeholder, pin the regression…
oliviermattelaer Sep 7, 2026
821f56d
Do not truncate long run_card lines in the LHE banner (#2046152)
oliviermattelaer Sep 7, 2026
31e42e6
Merge branch '3.5.17' into claude/launchpad-2046152-fix-3.5.x
oliviermattelaer Sep 8, 2026
f4141bf
Keep the banner buffers at 250 characters
oliviermattelaer Sep 8, 2026
e659719
Merge pull request #403 from mg5amcnlo/claude/nlo-vector-inc-injection
oliviermattelaer Sep 8, 2026
eb1eecb
Merge pull request #405 from mg5amcnlo/claude/launchpad-2046152-fix-3…
oliviermattelaer Sep 8, 2026
2da0cc7
Merge remote-tracking branch 'origin/3.5.17' into 3.8.0
oliviermattelaer Sep 8, 2026
67e30c7
Delphes split recovery: never run on stale output, never drop a good …
oliviermattelaer Sep 8, 2026
903d0b0
Do not apply the beam polarization twice (bug #2148181)
oliviermattelaer Sep 8, 2026
bf0184d
Merge pull request #406 from mg5amcnlo/claude/polbeam-double-apply-3.…
oliviermattelaer Sep 8, 2026
21322ff
MadSpin: evaluate the density denominator in the me_frame
oliviermattelaer Sep 8, 2026
7d696d0
MadSpin: cover the me_frame denominator, and let the stubs reach it
oliviermattelaer Sep 8, 2026
10170ed
Merge pull request #407 from mg5amcnlo/claude/madspin-frame-denominator
oliviermattelaer Sep 8, 2026
26fd08b
Merge pull request #402 from ammelsayed/delphes_resume
oliviermattelaer Sep 9, 2026
5b39fbb
MadSpin: key the joint decay symmetry factor on the channel, not the …
oliviermattelaer Sep 9, 2026
69bc475
MadSpin: extract _decay_symmetry_factor and pin it in the unit tests
oliviermattelaer Sep 9, 2026
2b55b5f
MadSpin: carry the channel tags into the sequential_debug weight iden…
oliviermattelaer Sep 9, 2026
9cdab0c
Merge pull request #408 from mg5amcnlo/claude/madspin-joint-flavour
oliviermattelaer Sep 9, 2026
901080d
Merge remote-tracking branch 'origin/3.5.17' into 3.8.0
oliviermattelaer Sep 9, 2026
e2bf389
Merge remote-tracking branch 'mg5/3.8.0' into merge_380
oliviermattelaer Sep 9, 2026
9959eef
MadSpin tests: adapt two upstream stubs to the mg7 signatures
oliviermattelaer Sep 9, 2026
b12a8a4
MadSpin: undo MG5's decay-chain identical-particle factor in onshell_v1
oliviermattelaer Sep 9, 2026
03e0602
tests: assert the four-lepton flavour composition, not just per-PDG c…
oliviermattelaer Sep 9, 2026
87fb983
tests: record what the onshell efficiency rule actually measures
oliviermattelaer Sep 9, 2026
652ca17
aMC@NLO: fall back to fjcore when fastjet-config does not run
oliviermattelaer Sep 9, 2026
52f06a2
CI: do not point MG5 at a fastjet that the cache did not restore
oliviermattelaer Sep 9, 2026
3513ae7
CI: generation-suffixed cache keys with prefix fallback
oliviermattelaer Sep 9, 2026
8956c02
Merge pull request #410 from mg5amcnlo/claude/ci-versioned-cache-keys
oliviermattelaer Sep 9, 2026
ff9a230
Merge pull request #409 from mg5amcnlo/claude/madspin-onshell-flavour
oliviermattelaer Sep 9, 2026
a2dd404
Merge remote-tracking branch 'mg5/3.8.0' into merge_380
oliviermattelaer Sep 9, 2026
2387e8d
Make every Source/make_opts write atomic, and refuse a body-less one
oliviermattelaer Sep 10, 2026
80babcd
Review: catch a body-less make_opts, and stop the race tests passing …
oliviermattelaer Sep 10, 2026
8d2898a
CI: stop failed warm_cache runs leaking the repo past its cache quota
oliviermattelaer Sep 10, 2026
7743626
Merge pull request #412 from mg5amcnlo/claude/ci-bound-warm-cache-leak
oliviermattelaer Sep 10, 2026
6b48b93
Merge pull request #411 from mg5amcnlo/claude/atomic-make-opts-write
oliviermattelaer Sep 10, 2026
7f91610
CI: warm the caches automatically only on 3.x and test_ci
oliviermattelaer Sep 10, 2026
1ce45e2
Merge pull request #413 from mg5amcnlo/claude/ci-warm-cache-branch-fi…
oliviermattelaer Sep 10, 2026
4b3e7fa
Fix mother-substitution sweep matching wavefunctions by number
oliviermattelaer Sep 10, 2026
6f095ba
Match the pdg code when reusing a loop wavefunction
oliviermattelaer Sep 10, 2026
2d0097e
Drop the six dependency from the loop_MSSM test fixture
oliviermattelaer Sep 10, 2026
49bca36
Merge pull request #415 from mg5amcnlo/remove-six-from-loop-mssm-fixture
oliviermattelaer Sep 10, 2026
c9dbe41
Merge pull request #414 from mg5amcnlo/fix-loop-wf-mother-number-coll…
oliviermattelaer Sep 10, 2026
d5677e9
Merge remote-tracking branch 'mg5/3.8.0' into merge_380
oliviermattelaer Sep 10, 2026
c91a5fd
Merge branch 'main' into merge_380
oliviermattelaer Sep 10, 2026
46ebabb
Merge branch 'main' into merge_380
oliviermattelaer Sep 10, 2026
b976ad4
Histograms: label the plots MadGraph7
oliviermattelaer Sep 10, 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
42 changes: 42 additions & 0 deletions .github/actions/check_heptools/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
name: Check HEPTools cache content
description: >
Verify that the requested tools are really present in the HEPTools install
prefix. mg5_aMC exits 0 even when "install <tool>" fails (truncated
download, broken build, ...), so without this check a cache-building job
finishes green while saving a cache with a tool missing.

inputs:
tools:
description: >
Space separated list of components to check, among:
lhapdf boost pythia8 emela contur looptools
required: true
prefix:
description: 'HEPTools install prefix to inspect (default ~/.cache/HEPtools)'
required: false
default: ''
mode:
description: >
"fatal" (default) makes the step fail on the first incomplete component,
"report" only emits warnings and sets the "valid" output.
required: false
default: 'fatal'

outputs:
valid:
description: 'true when every requested component is complete'
value: ${{ steps.check.outputs.valid }}

runs:
using: composite
steps:
- name: Check HEPTools content
id: check
shell: bash
env:
HEPTOOLS_PREFIX: ${{ inputs.prefix }}
CHECK_MODE: ${{ inputs.mode }}
CHECK_TOOLS: ${{ inputs.tools }}
# invoked through "bash" so the check does not depend on the executable
# bit surviving the checkout
run: bash "${{ github.action_path }}/check_heptools.sh" $CHECK_TOOLS
133 changes: 133 additions & 0 deletions .github/actions/check_heptools/check_heptools.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
#!/usr/bin/env bash
#
# Content check for the HEPTools cache tree.
#
# "./bin/madgraph cmd" exits 0 even when the "install <tool>" it contains
# failed (e.g. the boost tarball came down truncated, so bootstrap.sh/b2
# never ran and eMELA aborted). A warm_cache job therefore ends green and
# actions/cache happily saves a cache with the tool missing, which only shows
# up much later as a broken acceptance test.
#
# Every path asserted below mirrors what HEPToolInstaller.py installs
# ('install_path' = <prefix>/<tool>, libraries looked up in lib/ or lib64/)
# and what the .github/actions/restore_heptools_* actions then hand to MG5
# through input/mg7_configuration.txt.
#
# Usage: check_heptools.sh <component> [<component> ...]
# HEPTOOLS_PREFIX install prefix to inspect (default ~/.cache/HEPtools)
# CHECK_MODE fatal (default) | report

set -o pipefail

HEP="${HEPTOOLS_PREFIX:-}"
[ -n "$HEP" ] || HEP="$HOME/.cache/HEPtools"
MODE="${CHECK_MODE:-fatal}"

missing=()

need_file() { [ -f "$1" ] || missing+=("missing file: $1"); }
need_exec() { [ -x "$1" ] || missing+=("missing executable: $1"); }
need_dir() { [ -d "$1" ] || missing+=("missing directory: $1"); }

# need_glob <description> <pattern> [<pattern> ...]
# Satisfied as soon as one pattern matches something (used for the lib/lib64
# ambiguity and for library extensions that differ between builds).
need_glob() {
local desc="$1"; shift
local pattern
for pattern in "$@"; do
if compgen -G "$pattern" > /dev/null 2>&1; then
return 0
fi
done
missing+=("missing $desc (no match for: $*)")
}

check_lhapdf() {
need_exec "$HEP/lhapdf6_py3/bin/lhapdf-config"
need_exec "$HEP/bin/lhapdf-config"
need_glob "libLHAPDF" "$HEP/lhapdf6_py3/lib/libLHAPDF.*" "$HEP/lhapdf6_py3/lib64/libLHAPDF.*"
# the two PDF sets the NLO acceptance tests need are unpacked by the
# warm_cache lhapdf job itself, not by the installer
need_dir "$HEP/lhapdf6_py3/share/LHAPDF/cteq6l1"
need_dir "$HEP/lhapdf6_py3/share/LHAPDF/NNPDF23_nlo_as_0118_qed"
}

check_boost() {
# exactly what HEPToolInstaller.find_dependency('boost') looks for: without
# it eMELA re-downloads and rebuilds boost from scratch
need_glob "libboost_system" \
"$HEP/boost/lib/libboost_system.*" "$HEP/boost/lib/libboost_system-mt.*" \
"$HEP/boost/lib64/libboost_system.*" "$HEP/boost/lib64/libboost_system-mt.*"
need_file "$HEP/boost/include/boost/version.hpp"
}

check_pythia8() {
# a network-failed pythia8 install leaves an incomplete pythia8/ dir; MG5
# then nullifies pythia8_path at startup, leaving the parton shower
# unavailable and breaking the rivet/contur acceptance tests
need_file "$HEP/pythia8/include/Pythia8/Pythia.h"
need_exec "$HEP/pythia8/bin/pythia8-config"
need_glob "libpythia8" "$HEP/pythia8/lib/libpythia8.*" "$HEP/pythia8/lib64/libpythia8.*"
need_dir "$HEP/hepmc"
need_file "$HEP/MG5aMC_PY8_interface/MG5aMC_PY8_interface"
}

check_emela() {
# bin/eMELA-config is the symlink finalize_installation() creates and the
# path restore_heptools_emela writes into mg7_configuration.txt
need_exec "$HEP/bin/eMELA-config"
need_glob "eMELA grids" "$HEP/EMELA/share/eMELA/*"
}

check_contur() {
# a missing fastjet-config means NLO subprocesses cannot compile
# (fastjet/ClusterSequence.hh)
need_exec "$HEP/fastjet/bin/fastjet-config"
need_glob "libfastjet" "$HEP/fastjet/lib/libfastjet.*" "$HEP/fastjet/lib64/libfastjet.*"
need_glob "libRivet" "$HEP/rivet/lib/libRivet.*" "$HEP/rivet/lib64/libRivet.*"
need_glob "libYODA" "$HEP/yoda/lib/libYODA.*" "$HEP/yoda/lib64/libYODA.*"
need_dir "$HEP/contur"
need_dir "$HEP/hepmc3"
}

check_looptools() {
need_file "$HEP/CutTools/lib/libcts.a"
need_file "$HEP/CutTools/lib/mpmodule.mod"
need_file "$HEP/IREGI/src/libiregi.a"
need_glob "libcollier" "$HEP/collier/libcollier.*" \
"$HEP/collier/lib/libcollier.*" "$HEP/collier/lib64/libcollier.*"
need_glob "libninja" "$HEP/ninja/lib/libninja.*" "$HEP/ninja/lib64/libninja.*"
}

if [ "$#" -eq 0 ]; then
echo "::error::check_heptools: no component requested"
exit 1
fi

echo "Checking HEPTools content under $HEP for: $*"
for component in "$@"; do
case "$component" in
lhapdf|boost|pythia8|emela|contur|looptools) "check_$component" ;;
*) echo "::error::check_heptools: unknown component '$component'"; exit 1 ;;
esac
done

if [ "${#missing[@]}" -eq 0 ]; then
echo "All requested components are complete."
[ -n "${GITHUB_OUTPUT:-}" ] && echo "valid=true" >> "$GITHUB_OUTPUT"
exit 0
fi

level=error
[ "$MODE" = "fatal" ] || level=warning
for entry in "${missing[@]}"; do
echo "::${level}::HEPTools cache incomplete ($*): ${entry}"
done
[ -n "${GITHUB_OUTPUT:-}" ] && echo "valid=false" >> "$GITHUB_OUTPUT"

if [ "$MODE" = "fatal" ]; then
echo "Refusing to treat this build as successful: the cache would be saved incomplete."
exit 1
fi
exit 0
6 changes: 5 additions & 1 deletion .github/actions/restore-pip-cache/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,14 @@ runs:
run: echo "CACHE_KEY=pip-numpy-$ImageOS" >> $GITHUB_ENV
shell: bash

# Generation-suffixed keys: see the comment in restore_heptools.
- uses: actions/cache/restore@v5
with:
path: ~/.cache/pip-packages
key: ${{ env.CACHE_KEY }}
key: ${{ env.CACHE_KEY }}-${{ github.run_id }}
restore-keys: |
${{ env.CACHE_KEY }}-
${{ env.CACHE_KEY }}

- run: |
sudo apt install meson ninja-build
Expand Down
6 changes: 5 additions & 1 deletion .github/actions/restore_delphes/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,15 @@ runs:
run: echo "CACHE_KEY=delphes-$ImageOS" >> $GITHUB_ENV
shell: bash

# Generation-suffixed keys: see the comment in restore_heptools.
- uses: actions/cache/restore@v5
if: ${{ inputs.setup_only != 'true' }}
with:
path: ~/.cache/Delphes
key: ${{ env.CACHE_KEY }}
key: ${{ env.CACHE_KEY }}-${{ github.run_id }}
restore-keys: |
${{ env.CACHE_KEY }}-
${{ env.CACHE_KEY }}

- run: |
cd $GITHUB_WORKSPACE
Expand Down
93 changes: 43 additions & 50 deletions .github/actions/restore_heptools/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,71 +4,64 @@ description: Restores heptools from cache and sets MG5 accordingly
runs:
using: composite
steps:
- name: get os
- name: get os
run: echo "CACHE_KEY=heptools-$ImageOS" >> $GITHUB_ENV
shell: bash

# warm_cache.yml saves the combined cache under a generation-suffixed key,
# "heptools-<ImageOS>-<run_id>", so that a refresh adds a new entry instead
# of having to delete the current one first (GitHub caches are immutable,
# and the delete-then-save it used to need left a ~30 min window in which
# every consumer missed). Nothing outside that run can know the generation,
# so the exact key below is deliberately unmatchable here and restore-keys
# does the work: GitHub serves the newest entry with the given prefix, i.e.
# the previous generation while a new one is being built.
# The bare prefix on the last line is transitional, for the unversioned
# entries that predate this change; it can be dropped once warm_cache has
# run one full cycle.
- name: restore full cache
id: heptools-cache
uses: actions/cache/restore@v5
with:
path: ~/.cache/HEPtools
key: ${{ env.CACHE_KEY }}
# Crash loudly (naming the missing key) instead of silently continuing
# with an empty HEPtools dir: a missing combined cache otherwise leaves
# the tool paths configured but the binaries absent, so downstream tests
# self-skip and (because test_manager.py treats a skip as a failure)
# fail for an opaque reason. This makes it obvious that the
# heptools-<os> cache itself needs to be rebuilt (run 'warm cache').
# Safe: warm_cache.yml builds the caches without this action, and jobs
# that currently pass already have the cache present.
fail-on-cache-miss: true
key: ${{ env.CACHE_KEY }}-${{ github.run_id }}
restore-keys: |
${{ env.CACHE_KEY }}-
${{ env.CACHE_KEY }}

# NB: cache-hit is true only on an *exact* key match, which now essentially
# never happens here; cache-matched-key is non-empty whenever something was
# actually restored (exact match or restore-keys). That is the condition
# that means "we have a combined cache to look at".

# Same content check the warm_cache jobs run before saving, in "report"
# mode: here an incomplete combined cache is not fatal, we just fall back
# to the (still present) sub-caches below.
- name: validate cache content
id: validate-cache
if: steps.heptools-cache.outputs.cache-hit == 'true'
run: |
# Check that all expected HEPtool binaries/directories are present
VALID=true
test -d $HOME/.cache/HEPtools/lhapdf6_py3 || VALID=false
# check the header/binary, not just the dir: a network-failed pythia8
# install can leave an incomplete pythia8/ dir that MG5 then rejects
# (pythia8_path nullified -> no shower -> rivet/contur tests fail).
test -f $HOME/.cache/HEPtools/pythia8/include/Pythia8/Pythia.h || VALID=false
test -x $HOME/.cache/HEPtools/pythia8/bin/pythia8-config || VALID=false
test -x $HOME/.cache/HEPtools/bin/eMELA-config || VALID=false
test -x $HOME/.cache/HEPtools/fastjet/bin/fastjet-config || VALID=false
test -d $HOME/.cache/HEPtools/rivet || VALID=false
# looptools: check the libraries themselves, not just the ninja/ dir.
# A "install collier"/"install ninja" that failed still leaves the dirs
# behind, and a combined cache built from such a run has MadLoop paths
# configured but nothing to link against (MG5 looks for exactly these
# two files, see activate_dependence in madgraph/various/misc.py).
test -f $HOME/.cache/HEPtools/ninja/lib/libninja.a || VALID=false
test -f $HOME/.cache/HEPtools/collier/libcollier.a || VALID=false
test -f $HOME/.cache/HEPtools/CutTools/lib/libcts.a || VALID=false
test -f $HOME/.cache/HEPtools/IREGI/src/libiregi.a || VALID=false
echo "cache_valid=$VALID" >> $GITHUB_OUTPUT
if [ "$VALID" = "false" ]; then
echo "::warning::heptools cache is incomplete, will restore from sub-caches"
fi
shell: bash
if: steps.heptools-cache.outputs.cache-matched-key != ''
uses: ./.github/actions/check_heptools
with:
tools: lhapdf boost pythia8 emela contur looptools
mode: report

# setup other environment of previous level of cache
# setup other environment of previous level of cache
# try to use their cache if previous cache failed or content is incomplete
- uses: ./.github/actions/restore_heptools_lhapdf
with:
setup_only: ${{ steps.heptools-cache.outputs.cache-hit == 'true' && steps.validate-cache.outputs.cache_valid == 'true' }}
with:
setup_only: ${{ steps.heptools-cache.outputs.cache-matched-key != '' && steps.validate-cache.outputs.valid == 'true' }}
- uses: ./.github/actions/restore_heptools_boost
with:
setup_only: ${{ steps.heptools-cache.outputs.cache-matched-key != '' && steps.validate-cache.outputs.valid == 'true' }}
- uses: ./.github/actions/restore_heptools_pythia8
with:
setup_only: ${{ steps.heptools-cache.outputs.cache-hit == 'true' && steps.validate-cache.outputs.cache_valid == 'true' }}
with:
setup_only: ${{ steps.heptools-cache.outputs.cache-matched-key != '' && steps.validate-cache.outputs.valid == 'true' }}
- uses: ./.github/actions/restore_heptools_emela
with:
setup_only: ${{ steps.heptools-cache.outputs.cache-hit == 'true' && steps.validate-cache.outputs.cache_valid == 'true' }}
with:
setup_only: ${{ steps.heptools-cache.outputs.cache-matched-key != '' && steps.validate-cache.outputs.valid == 'true' }}
- uses: ./.github/actions/restore_heptools_contur
with:
setup_only: ${{ steps.heptools-cache.outputs.cache-hit == 'true' && steps.validate-cache.outputs.cache_valid == 'true' }}
with:
setup_only: ${{ steps.heptools-cache.outputs.cache-matched-key != '' && steps.validate-cache.outputs.valid == 'true' }}
- uses: ./.github/actions/restore_heptools_looptools
with:
setup_only: ${{ steps.heptools-cache.outputs.cache-hit == 'true' && steps.validate-cache.outputs.cache_valid == 'true' }}

with:
setup_only: ${{ steps.heptools-cache.outputs.cache-matched-key != '' && steps.validate-cache.outputs.valid == 'true' }}
37 changes: 37 additions & 0 deletions .github/actions/restore_heptools_boost/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
name: Restore boost cache (if it exists and in any case configure even if it does not)
description: Restores boost (stacked on lhapdf) from cache and sets MG5 accordingly

inputs:
setup_only:
required: false
default: "false"

runs:
using: composite
steps:

# Call previous cache to ensure that environment is setup correctly
- name: restore lhapdf
uses: ./.github/actions/restore_heptools_lhapdf
with:
setup_only: ${{ inputs.setup_only }}

- name: Set cache key
run: echo "CACHE_KEY=boost-$ImageOS" >> $GITHUB_ENV
shell: bash

# check if the cache exists (if not an higher level will be called)
# Generation-suffixed keys: see the comment in restore_heptools_lhapdf.
- uses: actions/cache/restore@v5
if: ${{ inputs.setup_only != 'true' }}
with:
path: ~/.cache/HEPtools
key: ${{ env.CACHE_KEY }}-${{ github.run_id }}
restore-keys: |
${{ env.CACHE_KEY }}-
${{ env.CACHE_KEY }}

# Nothing to write into mg7_configuration.txt: boost has no MG5 option.
# HEPToolInstaller finds it on its own as soon as
# <heptools_install_dir>/boost/lib/libboost_system.so is present, and then
# skips the (~6 min, download-flaky) boost build when installing eMELA.
Loading
Loading