Completely Rebuild our CI System #9
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Build And Test | |
on: | |
pull_request: | |
branches: [ develop ] # run this on any PR pointing to develop | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
FC: gfortran-13 | |
Python_REQUIRED_VERSION: 3.12.3 # 3.12.2 not available on Ubuntu 24 GHA | |
shell: bash | |
jobs: | |
build_and_test: | |
runs-on: ${{ matrix.os }} | |
permissions: | |
pull-requests: write | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- os: macos-12 | |
macos_dev_target: 12.1 | |
arch: x86_64 | |
python-arch: x64 | |
generator: "Unix Makefiles" | |
nproc: 3 | |
targets: energyplus ExpandObjects ReadVarsESO Slab Basement AppGPostProcess ParametricPreprocessor | |
- os: macos-14 | |
macos_dev_target: 13.0 | |
arch: arm64 | |
python-arch: arm64 | |
generator: "Unix Makefiles" | |
nproc: 3 | |
targets: energyplus ExpandObjects ReadVarsESO Slab Basement AppGPostProcess ParametricPreprocessor | |
- os: ubuntu-24.04 | |
arch: x86_64 | |
python-arch: x64 | |
generator: "Unix Makefiles" | |
nproc: 4 | |
targets: energyplus ExpandObjects ReadVarsESO Slab Basement AppGPostProcess ParametricPreprocessor | |
- os: windows-2019 | |
arch: x86_64 | |
python-arch: x64 | |
generator: "Visual Studio 16 2019" | |
nproc: 4 | |
targets: energyplus ExpandObjects_build ReadVars_build Slab_build Basement_build AppGPostProcess_build ParametricPreprocessor_build | |
- os: windows-2022 | |
arch: x86_64 | |
python-arch: x64 | |
generator: "Visual Studio 17 2022" | |
nproc: 4 | |
targets: energyplus ExpandObjects_build ReadVars_build Slab_build Basement_build AppGPostProcess_build ParametricPreprocessor_build | |
steps: | |
- name: Set up Python ${{ env.Python_REQUIRED_VERSION }} | |
id: setup-python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ env.Python_REQUIRED_VERSION }} | |
- name: Install Dependencies for Mac | |
if: ${{ runner.os == 'macOS' }} | |
run: | | |
brew update | |
brew install gcc@13 | |
echo "FC=$(brew --prefix gcc@13)/bin/gfortran-13" >> $GITHUB_ENV | |
echo MACOSX_DEPLOYMENT_TARGET=${{ matrix.macos_dev_target }} >> $GITHUB_ENV | |
- name: Install Dependencies for Linux | |
if: ${{ runner.os == 'Linux' }} | |
run: | | |
sudo apt-get update | |
sudo apt-get install libxkbcommon-x11-0 xorg-dev libgl1-mesa-dev | |
if [[ "${{ matrix.os }}" == "ubuntu-24.04" ]]; then | |
# https://github.com/actions/runner-images/issues/10025 | |
echo "FC=gfortran-13" >> $GITHUB_ENV | |
fi | |
# BUILD AND TEST INTEGRATION FILES ON THE BASELINE BRANCH | |
- name: Baseline Checkout | |
uses: actions/checkout@v4 | |
with: | |
ref: develop | |
path: baseline | |
- name: Baseline Create Build Directory | |
run: cmake -E make_directory ./baseline/build/ | |
- name: Baseline Configure CMake | |
working-directory: ./baseline/build | |
run: > | |
cmake | |
-G "${{ matrix.generator }}" | |
-DCMAKE_BUILD_TYPE:STRING=Release | |
-DCMAKE_OSX_DEPLOYMENT_TARGET:STRING=${{ matrix.macos_dev_target }} | |
-DLINK_WITH_PYTHON:BOOL=ON | |
-DPython_REQUIRED_VERSION:STRING=${{ steps.setup-python.outputs.python-version }} | |
-DPython_ROOT_DIR:PATH=$RUNNER_TOOL_CACHE/Python/${{ steps.setup-python.outputs.python-version }}/${{ matrix.python-arch }}/ | |
-DBUILD_TESTING:BOOL=ON | |
-DBUILD_FORTRAN:BOOL=ON | |
-DBUILD_PACKAGE:BOOL=OFF | |
-DDOCUMENTATION_BUILD:STRING=DoNotBuild | |
-DENABLE_OPENMP:BOOL=OFF | |
-DUSE_OpenMP:BOOL=OFF | |
../ | |
- name: Baseline Build | |
working-directory: ./baseline/build | |
# Building specific target list so that we don't waste time building the unit test binary | |
run: cmake --build . -j ${{ matrix.nproc }} --config Release --target ${{ matrix.targets }} | |
- name: Baseline Test | |
working-directory: ./baseline/build | |
run: ctest -C Release -E Basement -R integration -j 3 # TODO: Speed up basement so we don't have to skip it. | |
# BUILD AND TEST EVERYTHING ON THE CURRENT BRANCH | |
- name: Branch Checkout | |
uses: actions/checkout@v4 | |
with: | |
path: branch | |
- name: Branch Create Build Directory | |
run: cmake -E make_directory ./branch/build/ | |
- name: Branch Configure CMake | |
working-directory: ./branch/build | |
run: > | |
cmake | |
-G "${{ matrix.generator }}" | |
-DCMAKE_BUILD_TYPE:STRING=Release | |
-DCMAKE_OSX_DEPLOYMENT_TARGET:STRING=${{ matrix.macos_dev_target }} | |
-DLINK_WITH_PYTHON:BOOL=ON | |
-DPython_REQUIRED_VERSION:STRING=${{ steps.setup-python.outputs.python-version }} | |
-DPython_ROOT_DIR:PATH=$RUNNER_TOOL_CACHE/Python/${{ steps.setup-python.outputs.python-version }}/${{ matrix.python-arch }}/ | |
-DBUILD_TESTING:BOOL=ON | |
-DBUILD_FORTRAN:BOOL=ON | |
-DBUILD_PACKAGE:BOOL=OFF | |
-DDOCUMENTATION_BUILD:STRING=DoNotBuild | |
-DENABLE_OPENMP:BOOL=OFF | |
-DUSE_OpenMP:BOOL=OFF | |
../ | |
- name: Branch Build | |
id: branch_build | |
working-directory: ./branch/build | |
run: cmake --build . -j ${{ matrix.nproc }} --config Release | |
- name: Branch Test | |
working-directory: ./branch/build | |
run: ctest -C Release -E Basement -j 3 | |
- name: Install Regression Tool | |
if: always() && steps.branch_build.outcome != 'failure' # always run this step as long as we actually built | |
run: pip install energyplus-regressions | |
- name: Run Regressions | |
if: always() && steps.branch_build.outcome != 'failure' # always run this step as long as we actually built | |
id: regressions | |
run: python ./branch/scripts/dev/gha_regressions.py ./baseline/build/testfiles ./branch/build/testfiles/ ${{ github.workspace }}/regressions | |
- uses: actions/upload-artifact@v4 | |
id: upload_regressions | |
if: always() && steps.regressions.outcome == 'failure' # only run this if regressions were encountered "failed" | |
with: | |
name: "regressions-${{ matrix.os }}" | |
path: "${{ github.workspace }}/regressions" | |
- uses: actions/github-script@v7 | |
if: always() && steps.regressions.outcome == 'failure' | |
with: | |
script: | | |
github.rest.issues.createComment({ | |
issue_number: context.issue.number, | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
body: "# :warning: Regressions Detected\n - Build: ${{ matrix.os }}\n - Commit: ${{ github.action_ref }}\n - [View Results](https://github.com/NREL/EnergyPlus/actions/runs/${{ github.run_id }})\n - [Download Regressions](${{ steps.upload_regressions.outputs.artifact-url }})" | |
}) |