Skip to content

Merge pull request #628 from sachiwee/Galacticus_Msigma #1004

Merge pull request #628 from sachiwee/Galacticus_Msigma

Merge pull request #628 from sachiwee/Galacticus_Msigma #1004

Workflow file for this run

name: 'CI/CD'
on:
workflow_dispatch:
pull_request:
push:
branches:
- 'master'
paths:
- 'Makefile'
- 'source/**'
- 'source/Bivar/**'
- 'source/ISO_Varying_String/**'
- 'source/gslODEInitVal2/**'
- 'source/NSWC/**'
- 'source/pFq/**'
- 'source/gslSpecFuncApprox/**'
- 'source/FFTlog/**'
- 'perl/**'
- 'perl/File/**'
- 'perl/Galacticus/**'
- 'perl/Galacticus/Launch/**'
- 'perl/Galacticus/Constraints/**'
- 'perl/Galacticus/Build/**'
- 'perl/Galacticus/Build/Components/**'
- 'perl/Galacticus/Build/Components/Classes/**'
- 'perl/Galacticus/Build/Components/Implementations/**'
- 'perl/Galacticus/Build/Components/Properties/**'
- 'perl/Galacticus/Build/Components/TreeNodes/**'
- 'perl/Galacticus/Build/Components/Hierarchy/**'
- 'perl/Galacticus/Build/SourceTree/**'
- 'perl/Galacticus/Build/SourceTree/Parse/**'
- 'perl/Galacticus/Build/SourceTree/Analyze/**'
- 'perl/Galacticus/Build/SourceTree/Process/**'
- 'perl/Galacticus/Build/SourceTree/Process/FunctionClass/**'
- 'perl/List/**'
- 'perl/Sort/**'
- 'perl/LaTeX/**'
- 'perl/IO/**'
- 'perl/IO/Compress/**'
- 'perl/System/**'
- 'perl/Fortran/**'
- 'scripts/build/**'
- 'schema/**'
concurrency:
group: cicd-${{ github.ref }}
cancel-in-progress: true
defaults:
run:
shell: bash
jobs:
# Build and deploy
## Linux
### Static executable and test codes
Build-Executable-Linux:
runs-on: ubuntu-latest
container: ghcr.io/galacticusorg/buildenv:latest
steps:
- run: echo "The job was automatically triggered by a ${{ github.event_name }} event."
- run: echo "This job is now running on a ${{ runner.os }} server."
- run: echo "The name of the branch is ${{ github.ref }} and the repository is ${{ github.repository }}."
- name: Check out repository code
uses: actions/checkout@v4
- name: Check out repository analysis-perl
uses: actions/checkout@v4
with:
repository: galacticusorg/analysis-perl
path: analysis-perl
- run: echo "The ${{ github.repository }} repository has been cloned to the runner."
- name: "Set environmental variables"
run: |
echo "GALACTICUS_EXEC_PATH=$GITHUB_WORKSPACE" >> $GITHUB_ENV
echo "GALACTICUS_FCFLAGS=$GALACTICUS_FCFLAGS -static" >> $GITHUB_ENV
echo "GALACTICUS_ANALYSIS_PERL_PATH=$GITHUB_WORKSPACE/analysis-perl" >> $GITHUB_ENV
- name: Build the code
run: |
cd $GALACTICUS_EXEC_PATH
git config --global --add safe.directory $GALACTICUS_EXEC_PATH
export BUILDPATH=./work/build
set -o pipefail
make GALACTICUS_BUILD_OPTION=compileprof -j4 all 2>&1 | tee build.log
set +o pipefail
chmod u=wrx ./scripts/build/buildProfiler.pl
./scripts/build/buildProfiler.pl build.log buildProfile.html --durationMinimum 20
grep -vqzi error: build.log || (echo "FAIL: errors found in build.log" && false)
grep -vqzi warning: build.log || (echo "FAIL: warnings found in build.log" && false)
grep -vqzi 'is up to date' build.log || (echo "FAIL: 'is up to date' found in build.log" && false)
- name: Upload Galacticus executable
uses: actions/upload-artifact@v4
with:
name: galacticus-exec
path: 'Galacticus.exe'
- name: Upload test code executables
uses: actions/upload-artifact@v4
with:
name: test-execs
path: 'tests.*.exe'
- name: Upload build profile
uses: actions/upload-artifact@v4
with:
name: build-profile
path: 'buildProfile.html'
- name: Test preprocessor determinism
run: |
# Test that the preprocessor produces deterministic output by re-preprocessing one file and checking that the results are unchanged.
cd $GALACTICUS_EXEC_PATH
cp work/build/mass_distributions.p.F90 work/build/mass_distributions.p.F90.prev
cp work/build/mass_distributions.spherical.Sersic.p.F90 work/build/mass_distributions.spherical.Sersic.p.F90.prev
touch source/mass_distributions.spherical.Sersic.F90
make -j16 work/build/mass_distributions.p.F90
cmp -s work/build/mass_distributions.p.F90 work/build/mass_distributions.p.F90.prev
cmp -s work/build/mass_distributions.spherical.Sersic.p.F90 work/build/mass_distributions.spherical.Sersic.p.F90.prev
- run: echo "This job's status is ${{ job.status }}."
### Non-static executable
Build-Executable-Linux-Non-Static:
runs-on: ubuntu-latest
container: ghcr.io/galacticusorg/buildenv:latest
steps:
- run: echo "The job was automatically triggered by a ${{ github.event_name }} event."
- run: echo "This job is now running on a ${{ runner.os }} server."
- run: echo "The name of the branch is ${{ github.ref }} and the repository is ${{ github.repository }}."
- name: Check out repository code
uses: actions/checkout@v4
- name: Check out repository analysis-perl
uses: actions/checkout@v4
with:
repository: galacticusorg/analysis-perl
path: analysis-perl
- run: echo "The ${{ github.repository }} repository has been cloned to the runner."
- name: "Set environmental variables"
run: |
echo "GALACTICUS_EXEC_PATH=$GITHUB_WORKSPACE" >> $GITHUB_ENV
echo "GALACTICUS_ANALYSIS_PERL_PATH=$GITHUB_WORKSPACE/analysis-perl" >> $GITHUB_ENV
- name: Build the code
run: |
cd $GALACTICUS_EXEC_PATH
git config --global --add safe.directory $GALACTICUS_EXEC_PATH
export BUILDPATH=./work/build
set -o pipefail
make -j4 Galacticus.exe 2>&1 | tee build.log
set +o pipefail
! grep -n Error: build.log
! grep -n Warning: build.log
! grep -v 'is up to date' build.log | grep -n -C 5 make:
- name: Upload Galacticus executable
uses: actions/upload-artifact@v4
with:
name: galacticus-exec-non-static
path: 'Galacticus.exe'
- run: echo "This job's status is ${{ job.status }}."
### Executable instrumented
Build-Executables-Instrumented-Linux:
runs-on: ubuntu-latest
container: ghcr.io/galacticusorg/buildenv:latest
steps:
- run: echo "The job was automatically triggered by a ${{ github.event_name }} event."
- run: echo "This job is now running on a ${{ runner.os }} server."
- run: echo "The name of the branch is ${{ github.ref }} and the repository is ${{ github.repository }}."
- name: Check out repository code
uses: actions/checkout@v4
- run: echo "The ${{ github.repository }} repository has been cloned to the runner."
- name: "Set environmental variables"
run: |
echo "GALACTICUS_EXEC_PATH=$GITHUB_WORKSPACE" >> $GITHUB_ENV
echo "GALACTICUS_DATA_PATH=$GITHUB_WORKSPACE/datasets" >> $GITHUB_ENV
- name: Build the code
run: |
cd $GALACTICUS_EXEC_PATH
git config --global --add safe.directory $GALACTICUS_EXEC_PATH
export GALACTICUS_FCFLAGS="$GALACTICUS_FCFLAGS -pg"
export GALACTICUS_CFLAGS="$GALACTICUS_CFLAGS -pg"
export GALACTICUS_CPPFLAGS="$GALACTICUS_CPPFLAGS -pg"
make -j4 Galacticus.exe
- name: Upload executables
uses: actions/upload-artifact@v4
with:
name: galacticus-exec-instrumented
path: 'Galacticus.exe'
- run: echo "This job's status is ${{ job.status }}."
### Executable MPI
Build-Executables-MPI-Linux:
runs-on: ubuntu-latest
container: ghcr.io/galacticusorg/buildenv:latest
steps:
- run: echo "The job was automatically triggered by a ${{ github.event_name }} event."
- run: echo "This job is now running on a ${{ runner.os }} server."
- run: echo "The name of the branch is ${{ github.ref }} and the repository is ${{ github.repository }}."
- name: Check out repository code
uses: actions/checkout@v4
- run: echo "The ${{ github.repository }} repository has been cloned to the runner."
- name: "Set environmental variables"
run: |
echo "GALACTICUS_EXEC_PATH=$GITHUB_WORKSPACE" >> $GITHUB_ENV
echo "GALACTICUS_DATA_PATH=$GITHUB_WORKSPACE/datasets" >> $GITHUB_ENV
- name: Build the code
run: |
cd $GALACTICUS_EXEC_PATH
git config --global --add safe.directory $GALACTICUS_EXEC_PATH
make -j4 GALACTICUS_BUILD_OPTION=MPI Galacticus.exe tests.MPI.exe tests.radiative_transfer.atomic_matter.state_solver.exe
- name: Upload Galacticus executable
uses: actions/upload-artifact@v4
with:
name: galacticus-exec-MPI
path: 'Galacticus.exe'
- name: Upload test code executables
uses: actions/upload-artifact@v4
with:
name: test-execs-MPI
path: 'tests.*.exe'
- run: echo "This job's status is ${{ job.status }}."
### Executable debugging
Build-Executables-Debugging-Linux:
runs-on: ubuntu-latest
container: ghcr.io/galacticusorg/buildenv:latest
steps:
- run: echo "The job was automatically triggered by a ${{ github.event_name }} event."
- run: echo "This job is now running on a ${{ runner.os }} server."
- run: echo "The name of the branch is ${{ github.ref }} and the repository is ${{ github.repository }}."
- name: Check out repository code
uses: actions/checkout@v4
- run: echo "The ${{ github.repository }} repository has been cloned to the runner."
- name: "Set environmental variables"
run: |
echo "GALACTICUS_EXEC_PATH=$GITHUB_WORKSPACE" >> $GITHUB_ENV
echo "GALACTICUS_DATA_PATH=$GITHUB_WORKSPACE/datasets" >> $GITHUB_ENV
echo "GALACTICUS_FCFLAGS+=\ -DDEBUGGING" >> $GITHUB_ENV
- name: Build the code
run: |
cd $GALACTICUS_EXEC_PATH
git config --global --add safe.directory $GALACTICUS_EXEC_PATH
make -j4 Galacticus.exe tests.debugging.exe
- name: Upload test code executables
uses: actions/upload-artifact@v4
with:
name: test-execs-debugging
path: 'tests.*.exe'
- run: echo "This job's status is ${{ job.status }}."
### Library
Build-Library-Linux:
runs-on: ubuntu-latest
container: ghcr.io/galacticusorg/buildenv:latest
steps:
- run: echo "The job was automatically triggered by a ${{ github.event_name }} event."
- run: echo "This job is now running on a ${{ runner.os }} server."
- run: echo "The name of the branch is ${{ github.ref }} and the repository is ${{ github.repository }}."
- name: Check out repository code
uses: actions/checkout@v4
- run: echo "The ${{ github.repository }} repository has been cloned to the runner."
- name: "Set environmental variables"
run: |
echo "GALACTICUS_EXEC_PATH=$GITHUB_WORKSPACE" >> $GITHUB_ENV
- name: Build the code
run: |
cd $GALACTICUS_EXEC_PATH
git config --global --add safe.directory $GALACTICUS_EXEC_PATH
make -j4 GALACTICUS_BUILD_OPTION=lib libgalacticus.so
- name: Package the code
run: |
cd $GALACTICUS_EXEC_PATH
git config --global --add safe.directory $GALACTICUS_EXEC_PATH
mkdir galacticus
mkdir galacticus/lib
mkdir galacticus/python
# Find all dynamic libraries needed (filtering out some system libs) and copy to our folder.
ldd libgalacticus.so | awk '{if (NF == 4) print $3}' | grep -v -e /libc.so -e /libdl.so -e /libm.so -e /libpthread.so -e /librt.so | xargs -n 1 -i{} cp {} galacticus/lib/
mv galacticus.py galacticus/python/
mv libgalacticus.so galacticus/lib/
tar cvfj libgalacticus.tar.bz2 galacticus
- name: Upload library
uses: actions/upload-artifact@v4
with:
name: galacticus-library
path: 'libgalacticus.tar.bz2'
- run: echo "This job's status is ${{ job.status }}."
### Docker image
Build-Docker-Linux:
runs-on: ubuntu-latest
permissions:
packages: write
steps:
- name: "Detect PR build"
id: detectBranch
run: |
if [[ "${{ github.event_name }}" == "pull_request" ]]; then
echo Running on a PR - will build, but not push
echo "doPush=false" >> "$GITHUB_OUTPUT"
else
echo Running on a non-PR - will build and push
echo "doPush=true" >> "$GITHUB_OUTPUT"
fi
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@v5
with:
images: galacticusorg/galacticus
- name: Build and push Docker image
uses: docker/build-push-action@v5
with:
push: ${{ steps.detectBranch.outputs.doPush }}
tags: ghcr.io/galacticusorg/galacticus:latest
labels: ${{ steps.meta.outputs.labels }}
### Documentation
Build-Documentation-Linux:
runs-on: ubuntu-latest
container: ghcr.io/galacticusorg/buildenv:latest
steps:
- run: echo "The job was automatically triggered by a ${{ github.event_name }} event."
- run: echo "This job is now running on a ${{ runner.os }} server."
- run: echo "The name of the branch is ${{ github.ref }} and the repository is ${{ github.repository }}."
- name: Check out repository code
uses: actions/checkout@v4
- run: echo "The ${{ github.repository }} repository has been cloned to the runner."
- name: "Set environmental variables"
run: |
echo "GALACTICUS_EXEC_PATH=$GITHUB_WORKSPACE" >> $GITHUB_ENV
- name: Build the docs
run: |
cd $GALACTICUS_EXEC_PATH
git config --global --add safe.directory $GALACTICUS_EXEC_PATH
./scripts/doc/Build_Documentation.sh -f yes -p 2
- name: Upload docs
uses: actions/upload-artifact@v4
with:
name: galacticus-docs
path: |
./doc/Galacticus_Usage.pdf
./doc/Galacticus_Physics.pdf
./doc/Galacticus_Development.pdf
./doc/Galacticus_Source.pdf
- run: echo "This job's status is ${{ job.status }}."
### Tools
Build-Tools:
runs-on: ubuntu-latest
container: ghcr.io/galacticusorg/buildenv:latest
needs: Build-Executable-Linux
steps:
- run: echo "The job was automatically triggered by a ${{ github.event_name }} event."
- run: echo "This job is now running on a ${{ runner.os }} server."
- run: echo "The name of the branch is ${{ github.ref }} and the repository is ${{ github.repository }}."
- name: Check out repository code
uses: actions/checkout@v4
- name: Check out repository datasets
uses: actions/checkout@v4
with:
repository: galacticusorg/datasets
path: datasets
- run: echo "The ${{ github.repository }} repository has been cloned to the runner."
- name: "Set environmental variables"
run: |
echo "GALACTICUS_EXEC_PATH=$GITHUB_WORKSPACE" >> $GITHUB_ENV
echo "GALACTICUS_DATA_PATH=$GITHUB_WORKSPACE/datasets" >> $GITHUB_ENV
echo "GALACTICUS_FCFLAGS+=\ -static" >> $GITHUB_ENV
- name: Download executables
uses: actions/download-artifact@v4
with:
name: galacticus-exec
- name: Build tools
run: |
cd $GALACTICUS_EXEC_PATH
git config --global --add safe.directory $GALACTICUS_EXEC_PATH
mkdir -p $GALACTICUS_DATA_PATH/dynamic
chmod u=wrx ./Galacticus.exe
./Galacticus.exe parameters/buildTools.xml
cd $GALACTICUS_DATA_PATH
classVersion=`awk '{if ($1 == "class:") print $2}' ${GALACTICUS_EXEC_PATH}/aux/dependencies.yml`
cambVersion=`awk '{if ($1 == "camb:") print $2}' ${GALACTICUS_EXEC_PATH}/aux/dependencies.yml`
forutilsVersion=`awk '{if ($1 == "forutils:") print $2}' ${GALACTICUS_EXEC_PATH}/aux/dependencies.yml`
fspsVersion=`awk '{if ($1 == "fsps:") print $2}' ${GALACTICUS_EXEC_PATH}/aux/dependencies.yml`
cloudyVersion=`awk '{if ($1 == "cloudy:") print $2}' ${GALACTICUS_EXEC_PATH}/aux/dependencies.yml`
# Check that executables were statically linked
! ldd dynamic/CAMB-${cambVersion}/fortran/camb
! ldd dynamic/AxionCAMB/camb
! ldd dynamic/class_public-${classVersion}/class
! ldd dynamic/RecFast/recfast.exe
! ldd dynamic/fsps-${fspsVersion}/src/autosps.exe
tar cfj tools.tar.bz2 \
dynamic/CAMB-${cambVersion}/fortran/camb \
dynamic/AxionCAMB/camb \
dynamic/class_public-${classVersion}/class \
dynamic/RecFast/recfast.exe \
dynamic/RecFast/currentVersion \
dynamic/c${cloudyVersion}/source/cloudy.exe \
dynamic/c${cloudyVersion}/data \
dynamic/fsps-${fspsVersion}/src/autosps.exe \
dynamic/fsps-${fspsVersion}/dust \
dynamic/fsps-${fspsVersion}/data \
dynamic/fsps-${fspsVersion}/nebular \
dynamic/fsps-${fspsVersion}/SPECTRA \
dynamic/fsps-${fspsVersion}/OUTPUTS \
dynamic/fsps-${fspsVersion}/ISOCHRONES
- name: Upload tools
uses: actions/upload-artifact@v4
with:
name: galacticus-tools
path: ./datasets/tools.tar.bz2
- run: echo "This job's status is ${{ job.status }}."
## MacOS
### Static executable
Build-Executable-MacOS:
runs-on: macos-12
steps:
- run: echo "The job was automatically triggered by a ${{ github.event_name }} event."
- run: echo "This job is now running on a ${{ runner.os }} server."
- run: echo "The name of the branch is ${{ github.ref }} and the repository is ${{ github.repository }}."
- name: Check out repository code
uses: actions/checkout@v4
- run: echo "The ${{ github.repository }} repository has been cloned to the runner."
- name: Set up build environment
uses: ./.github/actions/buildMacOS
- name: Build Galacticus
run: |
set -o pipefail
make -j3 Galacticus.exe tests.hashes.cryptographic.exe 2>&1 | tee build.log
./scripts/build/staticRelinker.pl `grep '\-o Galacticus.exe' build.log`
./scripts/build/staticRelinker.pl `grep '\-o tests.hashes.cryptographic.exe' build.log`
dsymutil -o Galacticus.exe.dSYM Galacticus.exe
zip -r debugSymbolsMacOS.zip Galacticus.exe.dSYM
mv Galacticus.exe Galacticus_MacOS.exe
- name: Upload Galacticus executable
uses: actions/upload-artifact@v4
with:
name: galacticus-exec-MacOS
path: 'Galacticus_MacOS.exe'
- name: Upload test code executables
uses: actions/upload-artifact@v4
with:
name: test-execs-MacOS
path: 'tests.*.exe'
- name: Upload Galacticus debug symbols
uses: actions/upload-artifact@v4
with:
name: galacticus-debug-MacOS
path: 'debugSymbolsMacOS.zip'
### Apple Silicon build
Build-Executable-MacOS-M1:
runs-on: macos-14
steps:
- run: echo "The job was automatically triggered by a ${{ github.event_name }} event."
- run: echo "This job is now running on a ${{ runner.os }} server."
- run: echo "The name of the branch is ${{ github.ref }} and the repository is ${{ github.repository }}."
- name: Check out repository code
uses: actions/checkout@v4
- run: echo "The ${{ github.repository }} repository has been cloned to the runner."
- name: Set up build environment
uses: ./.github/actions/buildMacOS
- name: Build Galacticus
run: |
set -o pipefail
make -j3 Galacticus.exe 2>&1 | tee build.log
./scripts/build/staticRelinker.pl `grep '\-o Galacticus.exe' build.log`
dsymutil -o Galacticus.exe.dSYM Galacticus.exe
zip -r debugSymbolsMacOS-M1.zip Galacticus.exe.dSYM
mv Galacticus.exe Galacticus_MacOS-M1.exe
- name: Upload Galacticus executable
uses: actions/upload-artifact@v4
with:
name: galacticus-exec-MacOS-M1
path: 'Galacticus_MacOS-M1.exe'
- name: Upload Galacticus debug symbols
uses: actions/upload-artifact@v4
with:
name: galacticus-debug-MacOS-M1
path: 'debugSymbolsMacOS-M1.zip'
## Library
Build-Library-MacOS:
runs-on: macos-12
steps:
- run: echo "The job was automatically triggered by a ${{ github.event_name }} event."
- run: echo "This job is now running on a ${{ runner.os }} server."
- run: echo "The name of the branch is ${{ github.ref }} and the repository is ${{ github.repository }}."
- name: Check out repository code
uses: actions/checkout@v4
- run: echo "The ${{ github.repository }} repository has been cloned to the runner."
- name: Set up build environment
uses: ./.github/actions/buildMacOS
- name: Build Galacticus
run: |
make -j3 GALACTICUS_BUILD_OPTION=lib libgalacticus.so
- name: Package the code
run: |
cd $GALACTICUS_EXEC_PATH
git config --global --add safe.directory $GALACTICUS_EXEC_PATH
mkdir galacticus
mkdir galacticus/lib
mkdir galacticus/python
# Find all dynamic libraries needed (filtering out any non-"local" ones) and copy to our folder.
otool -L libgalacticus.so | awk '{if (NR > 1) print $1}' | grep -e /usr/local -e /opt/local | xargs -n 1 -I{} cp {} galacticus/lib/
mv galacticus.py galacticus/python/
mv libgalacticus.so galacticus/lib/
zip -r libgalacticusMacOS.zip galacticus
- name: Upload library
uses: actions/upload-artifact@v4
with:
name: galacticus-library-MacOS
path: 'libgalacticusMacOS.zip'
### Tools
Build-Tools-MacOS:
runs-on: macos-12
steps:
- run: echo "The job was automatically triggered by a ${{ github.event_name }} event."
- run: echo "This job is now running on a ${{ runner.os }} server."
- run: echo "The name of the branch is ${{ github.ref }} and the repository is ${{ github.repository }}."
- name: Check out repository code
uses: actions/checkout@v4
- name: Check out repository datasets
uses: actions/checkout@v4
with:
repository: galacticusorg/datasets
path: datasets
- run: echo "The ${{ github.repository }} repository has been cloned to the runner."
- name: Set up build environment
uses: ./.github/actions/buildMacOS
- name: Build Galacticus
run: |
make -j3 Galacticus.exe
- name: Build tools
run: |
export GALACTICUS_EXEC_PATH=`pwd`
export FCCOMPILER=gfortran-11
export CCOMPILER=gcc-11
export CPPCOMPILER=g++-11
export GALACTICUS_FCFLAGS="-fintrinsic-modules-path /usr/local/include -L/usr/local/lib -L/opt/local/lib"
export GALACTICUS_CFLAGS="-I/usr/local/include -I/opt/local/include"
export GALACTICUS_CPPFLAGS="-I/usr/local/include -I/opt/local/include"
classVersion=`awk '{if ($1 == "class:") print $2}' ${GALACTICUS_EXEC_PATH}/aux/dependencies.yml`
cambVersion=`awk '{if ($1 == "camb:") print $2}' ${GALACTICUS_EXEC_PATH}/aux/dependencies.yml`
forutilsVersion=`awk '{if ($1 == "forutils:") print $2}' ${GALACTICUS_EXEC_PATH}/aux/dependencies.yml`
fspsVersion=`awk '{if ($1 == "fsps:") print $2}' ${GALACTICUS_EXEC_PATH}/aux/dependencies.yml`
cloudyVersion=`awk '{if ($1 == "cloudy:") print $2}' ${GALACTICUS_EXEC_PATH}/aux/dependencies.yml`
cd $GALACTICUS_EXEC_PATH
git config --global --add safe.directory $GALACTICUS_EXEC_PATH
mkdir -p $GALACTICUS_DATA_PATH/dynamic
set -o pipefail
./Galacticus.exe parameters/buildTools.xml 2>&1 | tee build.log
cd $GALACTICUS_DATA_PATH/dynamic/CAMB-${cambVersion}/fortran/
$GALACTICUS_EXEC_PATH/scripts/build/staticRelinker.pl gfortran-11 -cpp -Ofast -fopenmp -fintrinsic-modules-path /usr/local/include -L/usr/local/lib -L/opt/local/lib -JRelease -IRelease/ -I"/Users/runner/work/galacticus/galacticus/datasets/dynamic/CAMB-${cambVersion}/fortran/../forutils/Release/" Release/inidriver.o Release/libcamb.a -L"/Users/runner/work/galacticus/galacticus/datasets/dynamic/CAMB-${cambVersion}/fortran/../forutils/Release/" -lforutils -o camb
cd $GALACTICUS_DATA_PATH/dynamic/AxionCAMB/
$GALACTICUS_EXEC_PATH/scripts/build/staticRelinker.pl gfortran-11 -O3 -fintrinsic-modules-path /usr/local/include -L/usr/local/lib -L/opt/local/lib constants.o utils.o subroutines.o inifile.o power_tilt.o recfast_axion.o reionization.o modules.o bessels.o equations_ppf.o halofit_ppf.o lensing.o SeparableBispectrum.o cmbmain.o camb.o axion_background.o inidriver_axion.F90 -o camb
cd $GALACTICUS_DATA_PATH/dynamic/class_public-${classVersion}/
$GALACTICUS_EXEC_PATH/scripts/build/staticRelinker.pl `grep -E '\-o class ' $GALACTICUS_EXEC_PATH/build.log`
cd $GALACTICUS_DATA_PATH/dynamic/RecFast/
$GALACTICUS_EXEC_PATH/scripts/build/staticRelinker.pl gfortran-11 recfast.for -o recfast.exe -O3 -ffixed-form -ffixed-line-length-none
cd $GALACTICUS_DATA_PATH/dynamic/c${cloudyVersion}/source/
$GALACTICUS_EXEC_PATH/scripts/build/staticRelinker.pl `grep -E '\-o cloudy.exe' $GALACTICUS_EXEC_PATH/build.log`
cd $GALACTICUS_DATA_PATH/dynamic/fsps-${fspsVersion}/src
$GALACTICUS_EXEC_PATH/scripts/build/staticRelinker.pl `grep -E '\-o autosps.exe' $GALACTICUS_EXEC_PATH/build.log`
cd $GALACTICUS_DATA_PATH
zip -r toolsMacOS.zip \
dynamic/CAMB-${cambVersion}/fortran/camb \
dynamic/AxionCAMB/camb \
dynamic/class_public-${classVersion}/class \
dynamic/RecFast/recfast.exe \
dynamic/RecFast/currentVersion \
dynamic/c${cloudyVersion}/source/cloudy.exe \
dynamic/c${cloudyVersion}/data \
dynamic/fsps-${fspsVersion}/src/autosps.exe \
dynamic/fsps-${fspsVersion}/dust \
dynamic/fsps-${fspsVersion}/data \
dynamic/fsps-${fspsVersion}/nebular \
dynamic/fsps-${fspsVersion}/SPECTRA \
dynamic/fsps-${fspsVersion}/OUTPUTS \
dynamic/fsps-${fspsVersion}/ISOCHRONES
- name: Upload Galacticus executable
uses: actions/upload-artifact@v4
with:
name: galacticus-tools-MacOS
path: './datasets/toolsMacOS.zip'
- run: echo "This job's status is ${{ job.status }}."
Build-Tools-MacOS-M1:
runs-on: macos-14
steps:
- run: echo "The job was automatically triggered by a ${{ github.event_name }} event."
- run: echo "This job is now running on a ${{ runner.os }} server."
- run: echo "The name of the branch is ${{ github.ref }} and the repository is ${{ github.repository }}."
- name: Check out repository code
uses: actions/checkout@v4
- name: Check out repository datasets
uses: actions/checkout@v4
with:
repository: galacticusorg/datasets
path: datasets
- run: echo "The ${{ github.repository }} repository has been cloned to the runner."
- name: Set up build environment
uses: ./.github/actions/buildMacOS
- name: Build Galacticus
run: |
make -j3 Galacticus.exe 2>&1 | tee build.log
./scripts/build/staticRelinker.pl `grep '\-o Galacticus.exe' build.log`
- name: Build tools
run: |
export GALACTICUS_EXEC_PATH=`pwd`
export FCCOMPILER=gfortran-11
export CCOMPILER=gcc-11
export CPPCOMPILER=g++-11
export GALACTICUS_FCFLAGS="-fintrinsic-modules-path /usr/local/include -L/usr/local/lib -L/opt/local/lib"
export GALACTICUS_CFLAGS="-I/usr/local/include -I/opt/local/include"
export GALACTICUS_CPPFLAGS="-I/usr/local/include -I/opt/local/include"
classVersion=`awk '{if ($1 == "class:") print $2}' ${GALACTICUS_EXEC_PATH}/aux/dependencies.yml`
cambVersion=`awk '{if ($1 == "camb:") print $2}' ${GALACTICUS_EXEC_PATH}/aux/dependencies.yml`
forutilsVersion=`awk '{if ($1 == "forutils:") print $2}' ${GALACTICUS_EXEC_PATH}/aux/dependencies.yml`
fspsVersion=`awk '{if ($1 == "fsps:") print $2}' ${GALACTICUS_EXEC_PATH}/aux/dependencies.yml`
cloudyVersion=`awk '{if ($1 == "cloudy:") print $2}' ${GALACTICUS_EXEC_PATH}/aux/dependencies.yml`
cd $GALACTICUS_EXEC_PATH
git config --global --add safe.directory $GALACTICUS_EXEC_PATH
mkdir -p $GALACTICUS_DATA_PATH/dynamic
set -o pipefail
./Galacticus.exe parameters/buildTools.xml 2>&1 | tee build.log
cd $GALACTICUS_DATA_PATH/dynamic/CAMB-${cambVersion}/fortran/
$GALACTICUS_EXEC_PATH/scripts/build/staticRelinker.pl gfortran-11 -cpp -Ofast -fopenmp -fintrinsic-modules-path /usr/local/include -L/usr/local/lib -L/opt/local/lib -JRelease -IRelease/ -I"/Users/runner/work/galacticus/galacticus/datasets/dynamic/CAMB-${cambVersion}/fortran/../forutils/Release/" Release/inidriver.o Release/libcamb.a -L"/Users/runner/work/galacticus/galacticus/datasets/dynamic/CAMB-${cambVersion}/fortran/../forutils/Release/" -lforutils -o camb
cd $GALACTICUS_DATA_PATH/dynamic/AxionCAMB/
$GALACTICUS_EXEC_PATH/scripts/build/staticRelinker.pl gfortran-11 -O3 -fintrinsic-modules-path /usr/local/include -L/usr/local/lib -L/opt/local/lib constants.o utils.o subroutines.o inifile.o power_tilt.o recfast_axion.o reionization.o modules.o bessels.o equations_ppf.o halofit_ppf.o lensing.o SeparableBispectrum.o cmbmain.o camb.o axion_background.o inidriver_axion.F90 -o camb
cd $GALACTICUS_DATA_PATH/dynamic/class_public-${classVersion}/
$GALACTICUS_EXEC_PATH/scripts/build/staticRelinker.pl `grep -E '\-o class ' $GALACTICUS_EXEC_PATH/build.log`
cd $GALACTICUS_DATA_PATH/dynamic/RecFast/
$GALACTICUS_EXEC_PATH/scripts/build/staticRelinker.pl gfortran-11 recfast.for -o recfast.exe -O3 -ffixed-form -ffixed-line-length-none
cd $GALACTICUS_DATA_PATH/dynamic/c${cloudyVersion}/source/
$GALACTICUS_EXEC_PATH/scripts/build/staticRelinker.pl `grep -E '\-o cloudy.exe' $GALACTICUS_EXEC_PATH/build.log`
cd $GALACTICUS_DATA_PATH/dynamic/fsps-${fspsVersion}/src
$GALACTICUS_EXEC_PATH/scripts/build/staticRelinker.pl `grep -E '\-o autosps.exe' $GALACTICUS_EXEC_PATH/build.log`
cd $GALACTICUS_DATA_PATH
zip -r toolsMacOSM1.zip \
dynamic/CAMB-${cambVersion}/fortran/camb \
dynamic/AxionCAMB/camb \
dynamic/class_public-${classVersion}/class \
dynamic/RecFast/recfast.exe \
dynamic/RecFast/currentVersion \
dynamic/c${cloudyVersion}/source/cloudy.exe \
dynamic/c${cloudyVersion}/data \
dynamic/fsps-${fspsVersion}/src/autosps.exe \
dynamic/fsps-${fspsVersion}/dust \
dynamic/fsps-${fspsVersion}/data \
dynamic/fsps-${fspsVersion}/nebular \
dynamic/fsps-${fspsVersion}/SPECTRA \
dynamic/fsps-${fspsVersion}/OUTPUTS \
dynamic/fsps-${fspsVersion}/ISOCHRONES
- name: Upload Galacticus executable
uses: actions/upload-artifact@v4
with:
name: galacticus-tools-MacOS-M1
path: './datasets/toolsMacOSM1.zip'
- run: echo "This job's status is ${{ job.status }}."
# Benchmarks
Benchmark-Dark-Matter-Only-Subhalos:
needs: Build-Executable-Linux
uses: ./.github/workflows/testModel.yml
with:
file: benchmark-darkMatterOnlySubhalos.pl
artifact: galacticus-exec
runPath: ./testSuite
cacheData: 0
install: time
uploadFile: testSuite/outputs/benchmark_darkMatterOnlySubhalos.json
uploadName: benchmark-darkMatterOnlySubhalos
secrets: inherit
Benchmark-Milky-Way-Model:
needs: Build-Executable-Linux
uses: ./.github/workflows/testModel.yml
with:
file: benchmark-milkyWay.pl
artifact: galacticus-exec
runPath: ./testSuite
cacheData: 1
install: time
uploadFile: testSuite/outputs/benchmark_milkyWayModel.json
uploadName: benchmark-milkyWayModel
secrets: inherit
# Profiling
Profile-Dark-Matter-Only-Subhalos:
needs: Build-Executable-Linux
uses: ./.github/workflows/profile.yml
with:
profiler: perf
cacheData: 0
name: darkMatterOnlySubHalos
frequency: 500
secrets: inherit
Profile-Milky-Way-Model:
needs: Build-Executable-Linux
uses: ./.github/workflows/profile.yml
with:
profiler: perf
cacheData: 1
name: milkyWay
frequency: 100
secrets: inherit
Profile-Milky-Way-SIDM-Model:
needs: Build-Executable-Linux
uses: ./.github/workflows/profile.yml
with:
profiler: perf
cacheData: 1
name: milkyWay_SIDM
frequency: 100
secrets: inherit
Profile-Dark-Matter-Only-Subhalos-GProf:
needs: Build-Executables-Instrumented-Linux
uses: ./.github/workflows/profile.yml
with:
profiler: gprof
cacheData: 0
name: darkMatterOnlySubHalos
secrets: inherit
Profile-Milky-Way-GProf:
needs: Build-Executables-Instrumented-Linux
uses: ./.github/workflows/profile.yml
with:
profiler: gprof
cacheData: 1
name: milkyWay
Profile-Milky-Way-SIDM-GProf:
needs: Build-Executables-Instrumented-Linux
uses: ./.github/workflows/profile.yml
with:
profiler: gprof
cacheData: 1
name: milkyWay_SIDM
# Validation
Validate-Dark-Matter-Only-Subhalos:
needs: Build-Executable-Linux
uses: ./.github/workflows/testModel.yml
with:
file: validate-darkMatterOnlySubhalos.pl
artifact: galacticus-exec
runPath: ./testSuite
cacheData: 0
uploadFile: ./testSuite/outputs/*.json
uploadName: validate-darkMatterOnlySubhalos
secrets: inherit
Validate-Milky-Way-Model:
needs: Build-Executable-Linux
uses: ./.github/workflows/testModel.yml
with:
file: validate-milkyWay.pl
artifact: galacticus-exec
runPath: ./testSuite
cacheData: 1
uploadFile: ./testSuite/outputs/*.json
uploadName: validate-milkyWayModel
secrets: inherit
Validate-PonosV:
needs: Build-Executable-Linux
uses: ./.github/workflows/testModel.yml
with:
file: validate-PonosV.pl
artifact: galacticus-exec
runPath: ./testSuite
cacheData: 0
uploadFile: ./testSuite/outputs/*.json
uploadName: validate-PonosV
secrets: inherit
Validate-Baryonic-Suppression:
needs: Build-Executable-Linux
uses: ./.github/workflows/testModel.yml
with:
file: validate-baryonicSuppression.pl
artifact: galacticus-exec
runPath: ./testSuite
cacheData: 0
uploadFile: ./testSuite/outputs/*.json
uploadName: validate-baryonicSuppression
secrets: inherit
Validate-Idealized-Subhalo-Simulations:
needs: Build-Executable-Linux
uses: ./.github/workflows/testModel.yml
with:
file: validate-idealizedSubhaloSimulations-wrapper.pl
artifact: galacticus-exec
runPath: ./testSuite
cacheData: 0
uploadFile: ./testSuite/outputs/*.json
uploadName: validate-idealizedSubhaloSimulations
secrets: inherit
# Tests
## Linux
### Test Codes
Codes:
needs: Build-Executable-Linux
strategy:
# Ensure all jobs are run, even if some fail.
fail-fast: false
matrix:
executable: [ tests.nodes.exe,
tests.parameters.exe,
tests.files.exe,
tests.IO.XML.exe,
tests.ODE_solver.exe,
tests.random.exe,
tests.random.quasi.exe,
tests.arrays.exe,
tests.meshes.exe,
tests.convex_hulls.exe,
tests.comparisons.exe,
tests.geometry.coordinate_systems.exe,
tests.hashes.exe,
tests.hashes.perfect.exe,
tests.regular_expressions.exe,
tests.hashes.cryptographic.exe,
tests.integration.exe,
tests.integration2.exe,
tests.differentiation.exe,
tests.tables.exe,
tests.interpolation.exe,
tests.interpolation.2D.exe,
tests.make_ranges.exe,
tests.mass_distributions.exe,
tests.math_special_functions.exe,
tests.math_distributions.exe,
tests.math.fast.exe,
tests.math.arithmetic.exe,
tests.math.linear_algebra.exe,
tests.root_finding.exe,
tests.multi_dimensional_minimizer.exe,
tests.search.exe,
tests.Roman_numerals.exe,
tests.SI_prefixes.exe,
tests.sort.exe,
tests.sort.topological.exe,
tests.string_utilities.exe,
tests.vectors.exe,
tests.multi_counters.exe,
tests.tensors.exe,
tests.cosmic_age.exe,
tests.spherical_collapse.open.exe,
tests.spherical_collapse.flat.exe,
tests.spherical_collapse.dark_energy.EdS.exe,
tests.spherical_collapse.dark_energy.open.exe,
tests.spherical_collapse.dark_energy.lambda.exe,
tests.spherical_collapse.dark_energy.constantEoSminusHalf.exe,
tests.spherical_collapse.dark_energy.constantEoSminusTwoThirds.exe,
tests.spherical_collapse.dark_energy.constantEoSminus0.6.exe,
tests.spherical_collapse.dark_energy.constantEoSminus0.8.exe,
tests.spherical_collapse.baryons_dark_matter.exe,
tests.spherical_collapse.nonlinear.exe,
tests.warm_dark_matter.exe,
tests.linear_growth.cosmological_constant.exe,
tests.linear_growth.EdS.exe,
tests.linear_growth.open.exe,
tests.linear_growth.dark_energy.exe,
tests.linear_growth.baryons.EdS.exe,
tests.halo_mass_function.Tinker.exe,
tests.halo_mass_function.Reed2007.exe,
tests.halo_mass_function.environment_averaged.exe,
tests.comoving_distance.exe,
tests.mass_accretion_history.Correa2015.exe,
tests.Zhao2009_algorithms.dark_energy.exe,
tests.Zhao2009_algorithms.EdS.exe,
tests.Zhao2009_algorithms.open.exe,
tests.NFW96_concentration.dark_energy.exe,
tests.Prada2011_concentration.exe,
tests.DiemerKravtsov2014_concentration.exe,
tests.concentration.Correa2015.exe,
tests.concentrations.exe,
tests.biases.exe,
tests.kepler_orbits.exe,
tests.abundances.exe,
tests.sigma.exe,
tests.power_spectrum.primordial.exe,
tests.power_spectrum.exe,
tests.transfer_functions.exe,
tests.black_hole_fundamentals.exe,
tests.bug745815.exe,
tests.gaunt_factors.exe,
tests.cooling_functions.exe,
tests.accretion_disks.exe,
tests.mass_accretion_history.Hearin2021.exe,
tests.mass_accretion_history.Hearin2021_stochastic.exe,
tests.dark_matter_profiles.exe,
tests.dark_matter_profiles.projected.exe,
tests.dark_matter_profiles.adiabaticGnedin2004.exe,
tests.dark_matter_profiles.heated.exe,
tests.dark_matter_halo_radius_enclosing_mass.exe,
tests.dark_matter_profiles.tidal_tracks.exe,
tests.dark_matter_profiles.generic.exe,
tests.dark_matter_profiles.finite_resolution.exe,
tests.dark_matter_profiles.Zhao1996.exe,
tests.spectra.postprocess.Inoue2014.exe,
tests.recombination_computed.exe,
tests.recombination_cooling.Hummer.exe,
tests.locks.exe,
tests.initial_mass_functions.exe,
tests.stellar_populations.exe,
tests.stellar_populations.luminosities.exe,
tests.excursion_sets.exe,
tests.merger_tree_branching.exe,
tests.event_hooks.exe,
tests.tree_branch_destroy.exe,
tests.binary_search_trees.exe,
tests.orbits.exe,
tests.debugging.exe,
tests.hashes.cryptographic.exe ]
uses: ./.github/workflows/testCode.yml
with:
executable: ${{ matrix.executable }}
artifact: test-execs
secrets: inherit
### Test HDF5 IO
IO-HDF5:
needs: Build-Executable-Linux
uses: ./.github/workflows/testCode.yml
with:
executable: tests.IO.HDF5.exe
artifact: test-execs
requirePython: 1
secrets: inherit
### Test Crash
Crash:
needs: Build-Executable-Linux
uses: ./.github/workflows/testCode.yml
with:
executable: tests.crash.exe
artifact: test-execs
expectCrash: 1
secrets: inherit
### Test Fail
Fail:
needs: Build-Executable-Linux
uses: ./.github/workflows/testCode.yml
with:
executable: tests.fail.exe
artifact: test-execs
expectFail: 1
secrets: inherit
### MPI Test Codes
Codes-MPI:
needs: Build-Executables-MPI-Linux
strategy:
# Ensure all jobs are run, even if some fail.
fail-fast: false
matrix:
executable: [ tests.MPI.exe,
tests.radiative_transfer.atomic_matter.state_solver.exe ]
uses: ./.github/workflows/testCode.yml
with:
executable: ${{ matrix.executable }}
artifact: test-execs-MPI
mpi: 1
secrets: inherit
### Debugging Test Codes
Codes-Debugging:
needs: Build-Executables-Debugging-Linux
strategy:
# Ensure all jobs are run, even if some fail.
fail-fast: false
matrix:
executable: [ tests.debugging.exe ]
uses: ./.github/workflows/testCode.yml
with:
executable: ${{ matrix.executable }}
artifact: test-execs-debugging
secrets: inherit
### Cosmology
Cosmology:
needs: Build-Executable-Linux
strategy:
# Ensure all jobs are run, even if some fail.
fail-fast: false
matrix:
instance: [ "1:2", "2:2" ]
uses: ./.github/workflows/testModel.yml
with:
file: test-cosmology.pl
artifact: galacticus-exec
runPath: ./testSuite
options: "--launchMethod local --threadMaximum 1 --ompThreads 4 --instance ${{ matrix.instance }}"
secrets: inherit
### Mass Conservation
Mass-Conservation:
needs: Build-Executable-Linux
strategy:
# Ensure all jobs are run, even if some fail.
fail-fast: false
matrix:
file: [ "test-mass-conservation-simple.pl", "test-mass-conservation-standard.pl", "test-mass-conservation-coldMode.pl" ]
uses: ./.github/workflows/testModel.yml
with:
file: ${{ matrix.file }}
artifact: galacticus-exec
runPath: ./testSuite
options: "--launchMethod local --threadMaximum 1 --ompThreads 4"
secrets: inherit
### Merger Trees
Merger-Tree-Builder:
needs: Build-Executable-Linux
strategy:
# Ensure all jobs are run, even if some fail.
fail-fast: false
matrix:
instance: [ "1:4", "2:4", "3:4", "4:4" ]
uses: ./.github/workflows/testModel.yml
with:
file: test-merger-tree-builder.pl
artifact: galacticus-exec
runPath: ./testSuite
options: "--launchMethod local --threadMaximum 1 --ompThreads 4 --instance ${{ matrix.instance }}"
secrets: inherit
Merger-Tree-Write:
needs: Build-Executable-Linux
uses: ./.github/workflows/testModel.yml
with:
file: test-merger-tree-write.pl
artifact: galacticus-exec
runPath: ./testSuite
options: "--launchMethod local --threadMaximum 1 --ompThreads 4"
needsIRATE: 1
secrets: inherit
## Model Integration
Model-Integration:
needs: Build-Executable-Linux
strategy:
# Ensure all jobs are run, even if some fail.
fail-fast: false
matrix:
instance: [ "1:2", "2:2" ]
uses: ./.github/workflows/testModel.yml
with:
file: test-model-integration.pl
artifact: galacticus-exec
runPath: ./testSuite
options: "--launchMethod local --threadMaximum 1 --ompThreads 4 --instance ${{ matrix.instance }}"
secrets: inherit
## Misc Models
Miscellaneous:
needs: Build-Executable-Linux
strategy:
# Ensure all jobs are run, even if some fail.
fail-fast: false
matrix:
file: [ test-allowed-parameters.pl,
test-bar-instability.pl,
test-transfer-functions-axion.pl,
test-mass-definitions.pl,
test-branchlessTrees.pl,
test-branchSubsampling.pl,
test-CGM-mass-cooled.pl,
test-concentration-Ludlow2016.pl,
test-tidallyTruncatedNFWFit.pl,
test-constraint-deterministic-spins.pl,
test-constraint-mass-function.pl,
test-extract-directives.pl,
test-fortran-utils.pl,
test-halo-mass-functions.pl,
test-inactive_luminosities.pl,
test-interoutput-star-formation-rate.pl,
test-mass-host-maximum.pl,
test-noninstantaneous-recycling.pl,
test-satellite-distance-minimum.pl,
test-treeFilterLabels.pl,
test-output.pl,
test-output-tree-contiguousity.pl,
test-outputSelector.pl,
test-parameter-validation.pl,
test-perl-modules.pl,
test-reproducibility.pl,
test-splitForests.pl,
test-star-formation-histories-adaptive.py,
test-mostMassiveProgenitorIsSubhalo.py,
test-stateRestore.pl,
test-checkpointing.pl,
test-stellar-mass-weighted-ages.pl,
test-tidalTracks.pl,
test-transferFunctionHalfModeSlope.pl,
test-galacticStructureStateDeallocateBug.pl,
test-inactiveNumerics.pl,
test-impulsiveHeating.pl,
test-haloTriaxiality.pl,
test-parallelTreeBuild.pl,
test-duplicatedOutputPropertyName.pl ]
uses: ./.github/workflows/testModel.yml
with:
file: ${{ matrix.file }}
artifact: galacticus-exec
runPath: ./testSuite
secrets: inherit
Miscellaneous-IRATE:
needs: Build-Executable-Linux
strategy:
# Ensure all jobs are run, even if some fail.
fail-fast: false
matrix:
file: [ test-Bolshoi-tree-builder.pl,
test-Millennium-tree-builder.pl ]
uses: ./.github/workflows/testModel.yml
with:
file: ${{ matrix.file }}
artifact: galacticus-exec
runPath: ./testSuite
needsIRATE: 1
secrets: inherit
Miscellaneous-Deep:
needs: Build-Executable-Linux
strategy:
# Ensure all jobs are run, even if some fail.
fail-fast: false
matrix:
file: [ test-parameter-migration.pl ]
uses: ./.github/workflows/testModel.yml
with:
fetchDepth: 0
file: ${{ matrix.file }}
artifact: galacticus-exec
runPath: ./testSuite
secrets: inherit
Miscellaneous-Cached:
needs: Build-Executable-Linux
strategy:
# Ensure all jobs are run, even if some fail.
fail-fast: false
matrix:
file: [ test-constrained-merger-trees.pl ]
uses: ./.github/workflows/testModel.yml
with:
file: ${{ matrix.file }}
artifact: galacticus-exec
cacheData: 1
runPath: ./testSuite
secrets: inherit
Miscellaneous-Models:
needs: Build-Executable-Linux
strategy:
# Ensure all jobs are run, even if some fail.
fail-fast: false
matrix:
file: [ testSuite/parameters/mergerTreeEvolverThreaded.xml ]
uses: ./.github/workflows/testModel.yml
with:
file: ${{ matrix.file }}
artifact: galacticus-exec
secrets: inherit
### Outputs
Outputs:
needs: Build-Executable-Linux
strategy:
# Ensure all jobs are run, even if some fail.
fail-fast: false
matrix:
instance: [ "1:10", "2:10", "3:10", "4:10", "5:10", "6:10", "7:10", "8:10", "9:10", "10:10" ]
uses: ./.github/workflows/testModel.yml
with:
file: test-outputs.pl
artifact: galacticus-exec
runPath: ./testSuite
options: "--launchMethod local --threadMaximum 1 --ompThreads 4 --instance ${{ matrix.instance }}"
secrets: inherit
### Regressions
Regressions:
needs: Build-Executable-Linux
strategy:
# Ensure all jobs are run, even if some fail.
fail-fast: false
matrix:
file: [ testSuite/regressions/bug1066052.pl,
testSuite/regressions/adaptiveSFHLengths.py,
testSuite/regressions/mergerTreeBoxSizeWeight.pl,
testSuite/regressions/satellitePresetBoundMassNonZero.pl,
testSuite/regressions/setProperties.pl,
testSuite/regressions/cosmicEmu.pl,
testSuite/regressions/bug1053153.xml,
testSuite/regressions/bug711424.xml,
testSuite/regressions/bug725315.xml,
testSuite/regressions/coincidentMergerAndBranchJump.xml,
testSuite/regressions/deadlockMergeTargetInDescendentOfMergee2.xml,
testSuite/regressions/deadlockMergeTargetInDescendentOfMergee.xml,
testSuite/regressions/finalTimeBeforeOutputTime.xml,
testSuite/regressions/immediateSubSubMergerThenBranchJump.xml,
testSuite/regressions/initialSatelliteNoPrimaryProgenitor.xml,
testSuite/regressions/linearGrowthForFutureModel.xml,
testSuite/regressions/ludlowScaleSetBeforeTreeInitialization.xml,
testSuite/regressions/mergerAtFinalTimeInTree.xml,
testSuite/regressions/particulate.xml,
testSuite/regressions/subhaloMergesAtFinalTimeOfTree.xml,
testSuite/regressions/subhaloTwoConsecutiveMergers.xml,
testSuite/regressions/treeWithInitialSatelliteInProgenitorlessHost.xml,
testSuite/regressions/treeWithNoPrimaryProgenitor.xml,
testSuite/regressions/outputRank2ExtendSegFault.xml,
testSuite/regressions/barInstabilityFPE.xml ]
uses: ./.github/workflows/testModel.yml
with:
file: ${{ matrix.file }}
artifact: galacticus-exec
secrets: inherit
Regressions-Cached:
needs: Build-Executable-Linux
strategy:
# Ensure all jobs are run, even if some fail.
fail-fast: false
matrix:
file: [ testSuite/regressions/cole2000TreeBuilderWDMNodeWellOrdering.xml,
testSuite/regressions/issue142.xml ]
uses: ./.github/workflows/testModel.yml
with:
file: ${{ matrix.file }}
artifact: galacticus-exec
cacheData: 1
secrets: inherit
### Methods
Methods:
needs: Build-Executable-Linux
strategy:
# Ensure all jobs are run, even if some fail.
fail-fast: false
matrix:
instance: [ "1:20", "2:20", "3:20", "4:20", "5:20", "6:20", "7:20", "8:20", "9:20", "10:20", "11:20", "12:20", "13:20", "14:20", "15:20", "16:20", "17:20", "18:20", "19:20", "20:20" ]
uses: ./.github/workflows/testModel.yml
with:
file: test-methods.pl
artifact: galacticus-exec
runPath: ./testSuite
options: "--launchMethod local --threadMaximum 1 --ompThreads 4 --instance ${{ matrix.instance }}"
secrets: inherit
### MPI Misc Models
MPI-State-Restore:
needs: Build-Executables-MPI-Linux
uses: ./.github/workflows/testModel.yml
with:
file: test-stateRestore_MPI.pl
artifact: galacticus-exec-MPI
runPath: ./testSuite
options: --processesPerNode 8 --allow-run-as-root yes
secrets: inherit
MPI-Radiative-Transfer-Stromgren-Sphere:
needs: Build-Executables-MPI-Linux
uses: ./.github/workflows/testModel.yml
with:
file: test-radiativeTransfer-StromgrenSphere_MPI.pl
artifact: galacticus-exec-MPI
runPath: ./testSuite
options: --processesPerNode 4 --allow-run-as-root yes
secrets: inherit
MPI-MCMC:
needs: Build-Executables-MPI-Linux
uses: ./.github/workflows/testModel.yml
with:
file: parameters/tutorials/mcmcConfig.xml
artifact: galacticus-exec-MPI
mpi: 1
processesPerNode: 4
secrets: inherit
### MPI Methods
Methods-MPI:
needs: Build-Executables-MPI-Linux
strategy:
# Ensure all jobs are run, even if some fail.
fail-fast: false
matrix:
instance: [ "1:2", "2:2" ]
uses: ./.github/workflows/testModel.yml
with:
file: test-methods_MPI.pl
artifact: galacticus-exec-MPI
runPath: ./testSuite
options: "--launchMethod local --threadMaximum 1 --ompThreads 1 --instance ${{ matrix.instance }}"
secrets: inherit
### Memory leaks (non-MPI)
Memory-Leaks:
needs: Build-Executable-Linux-Non-Static
uses: ./.github/workflows/testModel.yml
with:
install: valgrind
file: test-memory-leaks.pl
artifact: galacticus-exec-non-static
runPath: ./testSuite
options: --mpi 0
secrets: inherit
### Memory leaks (MPI)
Memory-Leaks-MPI:
needs: Build-Executables-MPI-Linux
uses: ./.github/workflows/testModel.yml
with:
install: valgrind
file: test-memory-leaks.pl
artifact: galacticus-exec-MPI
runPath: ./testSuite
options: --mpi 1
secrets: inherit
## Python Interface
Python-Interface:
runs-on: ubuntu-latest
container: ghcr.io/galacticusorg/buildenv:latest
needs: Build-Library-Linux
steps:
- run: echo "The job was automatically triggered by a ${{ github.event_name }} event."
- run: echo "This job is now running on a ${{ runner.os }} server."
- run: echo "The name of the branch is ${{ github.ref }} and the repository is ${{ github.repository }}."
- name: Check out repository code
uses: actions/checkout@v4
- run: echo "The ${{ github.repository }} repository has been cloned to the runner."
- name: "Set environmental variables"
run: |
echo "GALACTICUS_EXEC_PATH=$GITHUB_WORKSPACE" >> $GITHUB_ENV
echo "PYTHONPATH=$GITHUB_WORKSPACE/galacticus/python" >> $GITHUB_ENV
- name: Install Python2
run: |
apt -y update && apt -y upgrade
apt -y install python2.7
- name: Download library
uses: actions/download-artifact@v4
with:
name: galacticus-library
- name: Test interface
run: |
tar xvfj libgalacticus.tar.bz2
python2.7 testSuite/test-Python-interface.py
- run: echo "This job's status is ${{ job.status }}."
## MacOS
### Test Codes
Codes-MacOS:
needs: Build-Executable-MacOS
strategy:
# Ensure all jobs are run, even if some fail.
fail-fast: false
matrix:
executable: [ tests.hashes.cryptographic.exe ]
uses: ./.github/workflows/testCode.yml
with:
runner: macos-12
executable: ${{ matrix.executable }}
artifact: test-execs-MacOS
secrets: inherit
### Test Python Interface
Python-Interface-MacOS:
runs-on: macos-12
steps:
- run: echo "The job was automatically triggered by a ${{ github.event_name }} event."
- run: echo "This job is now running on a ${{ runner.os }} server."
- run: echo "The name of the branch is ${{ github.ref }} and the repository is ${{ github.repository }}."
- name: Check out repository code
uses: actions/checkout@v4
- name: Set up build environment
uses: ./.github/actions/buildMacOS
- name: "Set environmental variables"
run: |
echo "GALACTICUS_EXEC_PATH=$GITHUB_WORKSPACE" >> $GITHUB_ENV
echo "PYTHONPATH=$GITHUB_WORKSPACE/galacticus/python" >> $GITHUB_ENV
- name: Install Python
run: |
sudo port install python27
sudo port select --set python python27
sudo port select --set python2 python27
- name: Build Galacticus
run: |
export GALACTICUS_EXEC_PATH=`pwd`
export FCCOMPILER=gfortran-11
export CCOMPILER=gcc-11
export CPPCOMPILER=g++-11
export GALACTICUS_FCFLAGS="-fintrinsic-modules-path /usr/local/finclude -fintrinsic-modules-path /usr/local/include -fintrinsic-modules-path /usr/local/include/gfortran -fintrinsic-modules-path /usr/local/lib/gfortran/modules -L/usr/local/lib -L/opt/local/lib"
export GALACTICUS_CFLAGS="-I/usr/local/include -I/opt/local/include"
export GALACTICUS_CPPFLAGS="-I/usr/local/include -I/opt/local/include -I/usr/local/include/libqhullcpp"
make -j3 GALACTICUS_BUILD_OPTION=lib libgalacticus.so
mkdir galacticus
mkdir galacticus/lib
mkdir galacticus/python
mv galacticus.py galacticus/python/
mv libgalacticus.so galacticus/lib/
- name: Test interface
run: |
python2 testSuite/test-Python-interface.py
- run: echo "This job's status is ${{ job.status }}."
# Validate, deploy and update
Validate:
runs-on: ubuntu-latest
needs: [ Benchmark-Dark-Matter-Only-Subhalos, Benchmark-Milky-Way-Model, Validate-Dark-Matter-Only-Subhalos, Validate-Milky-Way-Model, Validate-PonosV, Validate-Baryonic-Suppression, Validate-Idealized-Subhalo-Simulations ]
steps:
- name: Check out repository code
uses: actions/checkout@v4
- name: 'Dark matter-only subhalos benchmarks'
uses: ./.github/actions/benchmark
with:
name: 'Dark matter-only subhalos benchmarks'
type: 'benchmark'
suffix: 'darkMatterOnlySubhalos'
threshold: '110%'
token: ${{ secrets.GITHUB_TOKEN }}
- name: 'Milky Way model benchmarks'
uses: ./.github/actions/benchmark
with:
name: 'Milky Way model benchmarks'
type: 'benchmark'
suffix: 'milkyWayModel'
threshold: '140%'
token: ${{ secrets.GITHUB_TOKEN }}
- name: 'Dark matter-only subhalos validation'
uses: ./.github/actions/benchmark
with:
name: 'Dark matter-only subhalos benchmarks'
type: 'validate'
suffix: 'darkMatterOnlySubhalos'
threshold: '115%'
token: ${{ secrets.GITHUB_TOKEN }}
- name: 'Milky Way model validation'
uses: ./.github/actions/benchmark
with:
name: 'Milky Way model benchmarks'
type: 'validate'
suffix: 'milkyWayModel'
threshold: '185%'
token: ${{ secrets.GITHUB_TOKEN }}
- name: 'Idealized subhalo simulations (rₚ/rₐ=0.005; γ=1.5)'
uses: ./.github/actions/benchmark
with:
name: 'Idealized subhalo simulations (rₚ/rₐ=0.005; γ=1.5)'
type: 'validate'
artifact: 'validate-idealizedSubhaloSimulations'
suffix: 'idealizedSubhaloSimulation_rpra0.005_gamma1.5'
threshold: '110%'
token: ${{ secrets.GITHUB_TOKEN }}
- name: 'Idealized subhalo simulations (rₚ/rₐ=0.01; γ=1.5)'
uses: ./.github/actions/benchmark
with:
name: 'Idealized subhalo simulations (rₚ/rₐ=0.01; γ=1.5)'
type: 'validate'
artifact: 'validate-idealizedSubhaloSimulations'
suffix: 'idealizedSubhaloSimulation_rpra0.01_gamma1.5'
threshold: '110%'
token: ${{ secrets.GITHUB_TOKEN }}
- name: 'Idealized subhalo simulations (rₚ/rₐ=0.05; γ=0.5)'
uses: ./.github/actions/benchmark
with:
name: 'Idealized subhalo simulations (rₚ/rₐ=0.05; γ=0.5)'
type: 'validate'
artifact: 'validate-idealizedSubhaloSimulations'
suffix: 'idealizedSubhaloSimulation_rpra0.05_gamma0.5'
threshold: '110%'
token: ${{ secrets.GITHUB_TOKEN }}
- name: 'Idealized subhalo simulations (rₚ/rₐ=0.05; γ=1.0)'
uses: ./.github/actions/benchmark
with:
name: 'Idealized subhalo simulations (rₚ/rₐ=0.05; γ=1.0)'
type: 'validate'
artifact: 'validate-idealizedSubhaloSimulations'
suffix: 'idealizedSubhaloSimulation_rpra0.05_gamma1.0'
threshold: '110%'
token: ${{ secrets.GITHUB_TOKEN }}
- name: 'Idealized subhalo simulations (rₚ/rₐ=0.2; γ=0.0)'
uses: ./.github/actions/benchmark
with:
name: 'Idealized subhalo simulations (rₚ/rₐ=0.2; γ=0.0)'
type: 'validate'
artifact: 'validate-idealizedSubhaloSimulations'
suffix: 'idealizedSubhaloSimulation_rpra0.2_gamma0.0'
threshold: '110%'
token: ${{ secrets.GITHUB_TOKEN }}
- name: 'Idealized subhalo simulations (rₚ/rₐ=0.2; γ=0.5)'
uses: ./.github/actions/benchmark
with:
name: 'Idealized subhalo simulations (rₚ/rₐ=0.2; γ=0.5)'
type: 'validate'
artifact: 'validate-idealizedSubhaloSimulations'
suffix: 'idealizedSubhaloSimulation_rpra0.2_gamma0.5'
threshold: '110%'
token: ${{ secrets.GITHUB_TOKEN }}
- name: 'Idealized subhalo simulations (rₚ/rₐ=0.2; γ=1.0)'
uses: ./.github/actions/benchmark
with:
name: 'Idealized subhalo simulations (rₚ/rₐ=0.2; γ=1.0)'
type: 'validate'
artifact: 'validate-idealizedSubhaloSimulations'
suffix: 'idealizedSubhaloSimulation_rpra0.2_gamma1.0'
threshold: '110%'
token: ${{ secrets.GITHUB_TOKEN }}
- name: 'Idealized subhalo simulations (rₚ/rₐ=0.4; γ=0.0)'
uses: ./.github/actions/benchmark
with:
name: 'Idealized subhalo simulations (rₚ/rₐ=0.4; γ=0.0)'
type: 'validate'
artifact: 'validate-idealizedSubhaloSimulations'
suffix: 'idealizedSubhaloSimulation_rpra0.4_gamma0.0'
threshold: '110%'
token: ${{ secrets.GITHUB_TOKEN }}
- name: Download artifacts (validate-PonosV)
uses: actions/download-artifact@v4
with:
name: validate-PonosV
- name: Download artifacts (validate-baryonicSuppression)
uses: actions/download-artifact@v4
with:
name: validate-baryonicSuppression
- name: Download artifacts (build-profile)
uses: actions/download-artifact@v4
with:
name: build-profile
- name: Push validation results
run: |
git checkout gh-pages
mkdir -p dev/valid/darkMatterOnlySubhalos
mkdir -p dev/valid/milkyWayModel
mkdir -p dev/valid/strongLensing
mkdir -p dev/valid/idealizedSubhaloSimulations
mv results_darkMatterOnlySubhalos.json dev/valid/darkMatterOnlySubhalos/results.json
mv results_milkyWayModel.json dev/valid/milkyWayModel/results.json
mv results_PonosV.json dev/valid/strongLensing/results_PonosV.json
mv results_baryonicSuppression.json dev/valid/baryonicSuppression/results_baryonicSuppression.json
mv results_idealizedSubhaloSimulation_*.json dev/valid/idealizedSubhaloSimulations/
git config --local user.email "github@users.noreply.github.com"
git config --local user.name "github-action-validate"
git add dev/valid/darkMatterOnlySubhalos/results.json dev/valid/milkyWayModel/results.json dev/valid/strongLensing/results_PonosV.json dev/valid/baryonicSuppression/results_baryonicSuppression.json dev/valid/idealizedSubhaloSimulations/results_idealizedSubhaloSimulation_*.json
git commit -m "Update validation results"
git push --set-upstream origin gh-pages
git checkout -
if: github.event_name != 'pull_request'
- name: Push build profile
run: |
git checkout gh-pages
mkdir -p dev/bench/meta
mv buildProfile.html dev/bench/meta/buildProfile.html
git config --local user.email "github@users.noreply.github.com"
git config --local user.name "github-action-validate"
git add dev/bench/meta/buildProfile.html
git commit -m "Update build profile"
git push --set-upstream origin gh-pages
git checkout -
if: github.event_name != 'pull_request'
Deploy:
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/master'
needs: [ Build-Executable-Linux,
Build-Executables-Instrumented-Linux,
Build-Executables-MPI-Linux,
Build-Library-Linux,
Build-Docker-Linux,
Build-Documentation-Linux,
Build-Tools,
Build-Executable-MacOS,
Build-Executable-MacOS-M1,
Build-Library-MacOS,
Build-Tools-MacOS,
Build-Tools-MacOS-M1,
Profile-Dark-Matter-Only-Subhalos,
Profile-Milky-Way-Model,
Profile-Milky-Way-SIDM-Model,
Profile-Dark-Matter-Only-Subhalos-GProf,
Profile-Milky-Way-GProf,
Profile-Milky-Way-SIDM-GProf,
Codes,
Crash,
Fail,
Codes-MPI,
Codes-Debugging,
Memory-Leaks,
Memory-Leaks-MPI,
Cosmology,
Mass-Conservation,
Merger-Tree-Builder,
Merger-Tree-Write,
Model-Integration,
Miscellaneous,
Miscellaneous-Cached,
Miscellaneous-IRATE,
Miscellaneous-Deep,
Miscellaneous-Models,
Outputs,
Regressions,
Regressions-Cached,
Methods,
Methods-MPI,
MPI-State-Restore,
MPI-Radiative-Transfer-Stromgren-Sphere,
MPI-MCMC,
Python-Interface,
Codes-MacOS,
Python-Interface-MacOS,
Validate ]
steps:
- name: Check out repository code
uses: actions/checkout@v4
- name: Download artifacts (executable-linux)
uses: actions/download-artifact@v4
with:
name: galacticus-exec
- name: Download artifacts (library-linux)
uses: actions/download-artifact@v4
with:
name: galacticus-library
- name: Download artifacts (docs)
uses: actions/download-artifact@v4
with:
name: galacticus-docs
- name: Download artifacts (tools-linux)
uses: actions/download-artifact@v4
with:
name: galacticus-tools
- name: Upload assets to release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
gh release upload bleeding-edge ./Galacticus.exe ./libgalacticus.tar.bz2 ./Galacticus_Usage.pdf ./Galacticus_Physics.pdf ./Galacticus_Development.pdf ./Galacticus_Source.pdf ./tools.tar.bz2 --clobber
rm ./Galacticus.exe ./libgalacticus.tar.bz2 ./Galacticus_Usage.pdf ./Galacticus_Physics.pdf ./Galacticus_Development.pdf ./Galacticus_Source.pdf ./tools.tar.bz2
- name: Download artifacts (executable-macos)
uses: actions/download-artifact@v4
with:
name: galacticus-exec-MacOS
- name: Download artifacts (debug-macos)
uses: actions/download-artifact@v4
with:
name: galacticus-debug-MacOS
- name: Download artifacts (executable-macos-m1)
uses: actions/download-artifact@v4
with:
name: galacticus-exec-MacOS-M1
- name: Download artifacts (debug-macos-m1)
uses: actions/download-artifact@v4
with:
name: galacticus-debug-MacOS-M1
- name: Download artifacts (library-macos)
uses: actions/download-artifact@v4
with:
name: galacticus-library-MacOS
- name: Download artifacts (tools-macos)
uses: actions/download-artifact@v4
with:
name: galacticus-tools-MacOS
- name: Download artifacts (tools-macos-m1)
uses: actions/download-artifact@v4
with:
name: galacticus-tools-MacOS-M1
- name: Upload assets to release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
gh release upload bleeding-edge ./Galacticus_MacOS.exe ./Galacticus_MacOS-M1.exe ./libgalacticusMacOS.zip ./toolsMacOS.zip ./toolsMacOSM1.zip ./debugSymbolsMacOS.zip ./debugSymbolsMacOS-M1.zip --clobber
rm ./Galacticus_MacOS.exe ./libgalacticusMacOS.zip ./toolsMacOS.zip ./toolsMacOSM1.zip ./debugSymbolsMacOS.zip
- name: Download artifacts (perf-darkMatterOnlySubHalos)
uses: actions/download-artifact@v4
with:
name: perf-darkMatterOnlySubHalos
- name: Download artifacts (perf-milkyWay)
uses: actions/download-artifact@v4
with:
name: perf-milkyWay
- name: Download artifacts (perf-milkyWay_SIDM)
uses: actions/download-artifact@v4
with:
name: perf-milkyWay_SIDM
- name: Download artifacts (perf-darkMatterOnlySubHalos-gprof)
uses: actions/download-artifact@v4
with:
name: perf-darkMatterOnlySubHalos-gprof
- name: Download artifacts (perf-milkyWay-gprof)
uses: actions/download-artifact@v4
with:
name: perf-milkyWay-gprof
- name: Download artifacts (perf-milkyWay_SIDM-gprof)
uses: actions/download-artifact@v4
with:
name: perf-milkyWay_SIDM-gprof
- name: Upload assets to release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
gh release upload bleeding-edge ./darkMatterOnlySubHalos.perf.bz2 ./milkyWay.perf.bz2 ./milkyWay_SIDM.perf.bz2 ./darkMatterOnlySubHalos.gprof.bz2 ./milkyWay.gprof.bz2 ./milkyWay_SIDM.gprof.bz2 --clobber
rm ./darkMatterOnlySubHalos.perf.bz2 ./milkyWay.perf.bz2 ./milkyWay_SIDM.perf.bz2 ./darkMatterOnlySubHalos.gprof.bz2 ./milkyWay.gprof.bz2 ./milkyWay_SIDM.gprof.bz2
Update-Release-Tag:
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/master'
needs: Deploy
steps:
- name: Check out repository code
uses: actions/checkout@v4
- name: Update tag
run: |
git tag -f bleeding-edge
git push origin -f bleeding-edge
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- run: echo "This job's status is ${{ job.status }}."